diff --git a/chip/chip.c b/chip/chip.c index d2a6366..1ef7567 100644 --- a/chip/chip.c +++ b/chip/chip.c @@ -1,19 +1,25 @@ +#include "chip.h" + #include #include #include uint8_t g_port_exit_critical_count; - -void sys_critical_enter(void) { +// NVIC_EnableIRQ +// NVIC_GetEnableIRQ +// NVIC_DisableIRQ +void chip_critical_enter(void) { if (g_port_exit_critical_count == 0) { __disable_irq(); + // NVIC_DisableIRQ(); } g_port_exit_critical_count++; } -void sys_critical_exit(void) { +void chip_critical_exit(void) { g_port_exit_critical_count--; if (g_port_exit_critical_count == 0) { + // NVIC_EnableIRQ(); __enable_irq(); } } diff --git a/chip/delay.c b/chip/delay.c index 6d10c2c..d3c385c 100644 --- a/chip/delay.c +++ b/chip/delay.c @@ -6,8 +6,9 @@ static TIM_HandleTypeDef *m_dhtim; void chip_delay_init(TIM_HandleTypeDef *htim) { m_dhtim = htim; } -void chip_delay_us(uint32_t n) { - uint16_t counter = 0; + +void _chip_delay_us(uint32_t n) { + volatile uint32_t counter = 0; __HAL_TIM_SET_COUNTER(m_dhtim, 0); HAL_TIM_Base_Start(m_dhtim); while (counter < n) { @@ -15,6 +16,16 @@ void chip_delay_us(uint32_t n) { } HAL_TIM_Base_Stop(m_dhtim); } +void chip_delay_us(uint32_t n) { + uint32_t us = n % 1000; + uint32_t ms = n / 1000; + if (us > 0) { + _chip_delay_us(us); + } + for (uint32_t i = 0; i < ms; i++) { + _chip_delay_us(1000); + } +} void chip_delay_ms(uint32_t n) { uint32_t i; for (i = 0; i < n; i++) { diff --git a/chip/iflytop_no_os.c b/chip/iflytop_no_os.c index 582a423..bd44565 100644 --- a/chip/iflytop_no_os.c +++ b/chip/iflytop_no_os.c @@ -1,6 +1,8 @@ #include "iflytop_no_os.h" - void iflytop_no_os_init(iflytop_no_os_cfg_t* os) { chip_delay_init(os->delayhtim); ifly_loggger_init(os->debuguart); + + + } diff --git a/chip/log.c b/chip/log.c index abfa496..81f6c4b 100644 --- a/chip/log.c +++ b/chip/log.c @@ -6,7 +6,7 @@ static UART_HandleTypeDef *m_huart; -bool g_enable_log; +bool g_enable_log = true; /********************************************************************* * @fn _write diff --git a/components/tmc/ic/ztmc4361A.cpp b/components/tmc/ic/ztmc4361A.cpp index 6736d01..2f70301 100644 --- a/components/tmc/ic/ztmc4361A.cpp +++ b/components/tmc/ic/ztmc4361A.cpp @@ -179,8 +179,8 @@ void TMC4361A::initialize(cfg_t *cfg) { driverIC_reset(); - setAcceleration(100000); - setDeceleration(100000); + setAcceleration(500000); + setDeceleration(500000); enableIC(true); chip_delay_us(300 * 1000); @@ -351,5 +351,13 @@ void TMC4361A::driverIC_setMotorShaft(bool reverse) { DRIVER_ID_FIELD_WRITE(TMC2160_GCONF, TMC2160_SHAFT_MASK, TMC2160_SHAFT_SHIFT, val); } +uint32_t TMC4361A::driverIC_readICVersion() { + int32_t value = driverIC_readInt(TMC2160_IOIN___OUTPUT); + return (value & TMC2160_VERSION_MASK) >> TMC2160_VERSION_SHIFT; +} +void TMC4361A::driverIC_setIHOLD_IRUN(uint8_t ihold, uint8_t irun, uint16_t iholddelay) { + driverIC_writeInt(TMC2160_IHOLD_IRUN, (iholddelay << TMC2160_IHOLDDELAY_SHIFT) | (irun << TMC2160_IRUN_SHIFT) | (ihold << TMC2160_IHOLD_SHIFT)); +} + +#endif #endif -#endif \ No newline at end of file diff --git a/components/tmc/ic/ztmc4361A.hpp b/components/tmc/ic/ztmc4361A.hpp index 4a2b87d..fbead25 100644 --- a/components/tmc/ic/ztmc4361A.hpp +++ b/components/tmc/ic/ztmc4361A.hpp @@ -128,6 +128,9 @@ class TMC4361A : public IStepperMotor { void tmc4361AConfigCallback(ConfigState state); void readWriteArray(uint8_t *data, size_t length); + void setIHOLD_IRUN(uint8_t ihold, uint8_t irun, uint16_t iholddelay) { driverIC_setIHOLD_IRUN(ihold, irun, iholddelay); } + void setMotorShaft(bool reverse) { driverIC_setMotorShaft(reverse); } + private: uint32_t haspassedms(uint32_t now, uint32_t last); // void callOnEventCallback(StepperMotorEvent event); @@ -135,11 +138,11 @@ class TMC4361A : public IStepperMotor { void driverIC_reset(); void driverIC_enableIC(bool enable); void driverIC_setIHOLD_IRUN(uint8_t ihold, uint8_t irun, uint16_t iholddelay); - uint32_t driverIC_readICVersion(); void driverIC_writeDatagram(uint8_t address, uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4); void driverIC_writeInt(uint8_t address, int32_t value); int32_t driverIC_readInt(uint8_t address); void driverIC_setMotorShaft(bool reverse); + uint32_t driverIC_readICVersion(); }; } // namespace iflytop