Initial commit
This commit is contained in:
100
Clean_TMC2209/lib/tmc/ic/TMC2209/TMC2209.h
Normal file
100
Clean_TMC2209/lib/tmc/ic/TMC2209/TMC2209.h
Normal file
@@ -0,0 +1,100 @@
|
||||
/*******************************************************************************
|
||||
* Copyright © 2019 TRINAMIC Motion Control GmbH & Co. KG
|
||||
* (now owned by Analog Devices Inc.),
|
||||
*
|
||||
* Copyright © 2023 Analog Devices Inc. All Rights Reserved. This software is
|
||||
* proprietary & confidential to Analog Devices, Inc. and its licensors.
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
#ifndef TMC_IC_TMC2209_H_
|
||||
#define TMC_IC_TMC2209_H_
|
||||
|
||||
#include "tmc/helpers/Constants.h"
|
||||
#include "tmc/helpers/API_Header.h"
|
||||
#include "TMC2209_Register.h"
|
||||
#include "TMC2209_Constants.h"
|
||||
#include "TMC2209_Fields.h"
|
||||
|
||||
// Helper macros
|
||||
#define TMC2209_FIELD_READ(tdef, address, mask, shift) \
|
||||
FIELD_GET(tmc2209_readInt(tdef, address), mask, shift)
|
||||
#define TMC2209_FIELD_UPDATE(tdef, address, mask, shift, value) \
|
||||
(tmc2209_writeInt(tdef, address, FIELD_SET(tmc2209_readInt(tdef, address), mask, shift, value)))
|
||||
|
||||
// Usage note: use 1 TypeDef per IC
|
||||
typedef struct {
|
||||
ConfigurationTypeDef *config;
|
||||
|
||||
int32_t registerResetState[TMC2209_REGISTER_COUNT];
|
||||
uint8_t registerAccess[TMC2209_REGISTER_COUNT];
|
||||
|
||||
uint8_t slaveAddress;
|
||||
} TMC2209TypeDef;
|
||||
|
||||
typedef void (*tmc2209_callback)(TMC2209TypeDef*, ConfigState);
|
||||
|
||||
// Default Register values
|
||||
#define R00 0x00000040 // GCONF
|
||||
#define R10 0x00071703 // IHOLD_IRUN
|
||||
#define R11 0x00000014 // TPOWERDOWN
|
||||
#define R6C 0x10000053 // CHOPCONF
|
||||
#define R70 0xC10D0024 // PWMCONF
|
||||
|
||||
// Register access permissions:
|
||||
// 0x00: none (reserved)
|
||||
// 0x01: read
|
||||
// 0x02: write
|
||||
// 0x03: read/write
|
||||
// 0x13: read/write, separate functions/values for reading or writing
|
||||
// 0x23: read/write, flag register (write to clear)
|
||||
// 0x42: write, has hardware presets on reset
|
||||
static const uint8_t tmc2209_defaultRegisterAccess[TMC2209_REGISTER_COUNT] =
|
||||
{
|
||||
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
0x03, 0x23, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, ____, ____, ____, ____, ____, ____, ____, ____, // 0x00 - 0x0F
|
||||
0x02, 0x02, 0x01, 0x02, 0x02, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, // 0x10 - 0x1F
|
||||
____, ____, 0x02, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, // 0x20 - 0x2F
|
||||
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, // 0x30 - 0x3F
|
||||
0x02, 0x01, 0x02, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, // 0x40 - 0x4F
|
||||
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, // 0x50 - 0x5F
|
||||
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 0x01, 0x01, 0x03, ____, ____, 0x01, // 0x60 - 0x6F
|
||||
0x03, 0x01, 0x01, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____ // 0x70 - 0x7F
|
||||
};
|
||||
|
||||
static const int32_t tmc2209_defaultRegisterResetState[TMC2209_REGISTER_COUNT] =
|
||||
{
|
||||
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
R00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x00 - 0x0F
|
||||
R10, R11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x10 - 0x1F
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x20 - 0x2F
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x30 - 0x3F
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x40 - 0x4F
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0x50 - 0x5F
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, R6C, 0, 0, 0, // 0x60 - 0x6F
|
||||
R70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 0x70 - 0x7F
|
||||
};
|
||||
|
||||
// Undefine the default register values.
|
||||
// This prevents warnings in case multiple TMC-API chip headers are included at once
|
||||
#undef R00
|
||||
#undef R10
|
||||
#undef R11
|
||||
#undef R6C
|
||||
#undef R70
|
||||
|
||||
// Communication
|
||||
void tmc2209_writeInt(TMC2209TypeDef *tmc2209, uint8_t address, int32_t value);
|
||||
int32_t tmc2209_readInt(TMC2209TypeDef *tmc2209, uint8_t address);
|
||||
|
||||
void tmc2209_init(TMC2209TypeDef *tmc2209, uint8_t channel, uint8_t slaveAddress, ConfigurationTypeDef *tmc2209_config, const int32_t *registerResetState);
|
||||
uint8_t tmc2209_reset(TMC2209TypeDef *tmc2209);
|
||||
uint8_t tmc2209_restore(TMC2209TypeDef *tmc2209);
|
||||
void tmc2209_setRegisterResetState(TMC2209TypeDef *tmc2209, const int32_t *resetState);
|
||||
void tmc2209_setCallback(TMC2209TypeDef *tmc2209, tmc2209_callback callback);
|
||||
void tmc2209_periodicJob(TMC2209TypeDef *tmc2209, uint32_t tick);
|
||||
|
||||
uint8_t tmc2209_get_slave(TMC2209TypeDef *tmc2209);
|
||||
void tmc2209_set_slave(TMC2209TypeDef *tmc2209, uint8_t slaveAddress);
|
||||
|
||||
#endif /* TMC_IC_TMC2209_H_ */
|
||||
Reference in New Issue
Block a user