diff --git a/drivers/stepper/adi_tmc/adi_tmc5041_stepper_controller.c b/drivers/stepper/adi_tmc/adi_tmc5041_stepper_controller.c index c5433c1a83591..0fa7ab19e6d69 100644 --- a/drivers/stepper/adi_tmc/adi_tmc5041_stepper_controller.c +++ b/drivers/stepper/adi_tmc/adi_tmc5041_stepper_controller.c @@ -63,7 +63,7 @@ static int tmc5041_write(const struct device *dev, const uint8_t reg_addr, const k_sem_take(&data->sem, K_FOREVER); - err = tmc_spi_write_register(&bus, TMC5041_WRITE_BIT, reg_addr, reg_val); + err = tmc_spi_write_register(&bus, TMC5XXX_WRITE_BIT, reg_addr, reg_val); k_sem_give(&data->sem); @@ -83,7 +83,7 @@ static int tmc5041_read(const struct device *dev, const uint8_t reg_addr, uint32 k_sem_take(&data->sem, K_FOREVER); - err = tmc_spi_read_register(&bus, TMC5041_ADDRESS_MASK, reg_addr, reg_val); + err = tmc_spi_read_register(&bus, TMC5XXX_ADDRESS_MASK, reg_addr, reg_val); k_sem_give(&data->sem); @@ -117,7 +117,7 @@ static int stallguard_enable(const struct device *dev, const bool enable) } if (enable) { - reg_value |= TMC5041_SW_MODE_SG_STOP_ENABLE; + reg_value |= TMC5XXX_SW_MODE_SG_STOP_ENABLE; int32_t actual_velocity; @@ -136,7 +136,7 @@ static int stallguard_enable(const struct device *dev, const bool enable) return -EAGAIN; } } else { - reg_value &= ~TMC5041_SW_MODE_SG_STOP_ENABLE; + reg_value &= ~TMC5XXX_SW_MODE_SG_STOP_ENABLE; } err = tmc5041_write(config->controller, TMC5041_SWMODE(config->index), reg_value); if (err) { @@ -193,11 +193,11 @@ static void rampstat_work_handler(struct k_work *work) tmc5041_read(stepper_config->controller, TMC5041_DRVSTATUS(stepper_config->index), &drv_status); - if (FIELD_GET(TMC5041_DRV_STATUS_SG_STATUS_MASK, drv_status) == 1U) { + if (FIELD_GET(TMC5XXX_DRV_STATUS_SG_STATUS_MASK, drv_status) == 1U) { LOG_INF("%s: Stall detected", stepper_data->stepper->name); err = tmc5041_write(stepper_config->controller, TMC5041_RAMPMODE(stepper_config->index), - TMC5041_RAMPMODE_HOLD_MODE); + TMC5XXX_RAMPMODE_HOLD_MODE); if (err != 0) { LOG_ERR("%s: Failed to stop motor", stepper_data->stepper->name); return; @@ -213,29 +213,29 @@ static void rampstat_work_handler(struct k_work *work) return; } - const uint8_t ramp_stat_values = FIELD_GET(TMC5041_RAMPSTAT_INT_MASK, rampstat_value); + const uint8_t ramp_stat_values = FIELD_GET(TMC5XXX_RAMPSTAT_INT_MASK, rampstat_value); if (ramp_stat_values > 0) { switch (ramp_stat_values) { - case TMC5041_STOP_LEFT_EVENT: + case TMC5XXX_STOP_LEFT_EVENT: LOG_DBG("RAMPSTAT %s:Left end-stop detected", stepper_data->stepper->name); execute_callback(stepper_data->stepper, STEPPER_EVENT_LEFT_END_STOP_DETECTED); break; - case TMC5041_STOP_RIGHT_EVENT: + case TMC5XXX_STOP_RIGHT_EVENT: LOG_DBG("RAMPSTAT %s:Right end-stop detected", stepper_data->stepper->name); execute_callback(stepper_data->stepper, STEPPER_EVENT_RIGHT_END_STOP_DETECTED); break; - case TMC5041_POS_REACHED_EVENT: + case TMC5XXX_POS_REACHED_EVENT: LOG_DBG("RAMPSTAT %s:Position reached", stepper_data->stepper->name); execute_callback(stepper_data->stepper, STEPPER_EVENT_STEPS_COMPLETED); break; - case TMC5041_STOP_SG_EVENT: + case TMC5XXX_STOP_SG_EVENT: LOG_DBG("RAMPSTAT %s:Stall detected", stepper_data->stepper->name); stallguard_enable(stepper_data->stepper, false); execute_callback(stepper_data->stepper, STEPPER_EVENT_STALL_DETECTED); @@ -266,9 +266,9 @@ static int tmc5041_stepper_enable(const struct device *dev, const bool enable) } if (enable) { - reg_value |= TMC5041_CHOPCONF_DRV_ENABLE_MASK; + reg_value |= TMC5XXX_CHOPCONF_DRV_ENABLE_MASK; } else { - reg_value &= ~TMC5041_CHOPCONF_DRV_ENABLE_MASK; + reg_value &= ~TMC5XXX_CHOPCONF_DRV_ENABLE_MASK; } err = tmc5041_write(config->controller, TMC5041_CHOPCONF(config->index), reg_value); @@ -291,7 +291,7 @@ static int tmc5041_stepper_is_moving(const struct device *dev, bool *is_moving) return -EIO; } - *is_moving = (FIELD_GET(TMC5041_DRV_STATUS_STST_BIT, reg_value) != 1U); + *is_moving = (FIELD_GET(TMC5XXX_DRV_STATUS_STST_BIT, reg_value) != 1U); LOG_DBG("Stepper motor controller %s is moving: %d", dev->name, *is_moving); return 0; } @@ -318,7 +318,7 @@ static int tmc5041_stepper_move(const struct device *dev, const int32_t steps) int32_t target_position = position + steps; err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index), - TMC5041_RAMPMODE_POSITIONING_MODE); + TMC5XXX_RAMPMODE_POSITIONING_MODE); if (err != 0) { return -EIO; } @@ -373,9 +373,9 @@ static int tmc5041_stepper_set_micro_step_res(const struct device *dev, return -EIO; } - reg_value &= ~TMC5041_CHOPCONF_MRES_MASK; + reg_value &= ~TMC5XXX_CHOPCONF_MRES_MASK; reg_value |= ((MICRO_STEP_RES_INDEX(STEPPER_MICRO_STEP_256) - LOG2(res)) - << TMC5041_CHOPCONF_MRES_SHIFT); + << TMC5XXX_CHOPCONF_MRES_SHIFT); err = tmc5041_write(config->controller, TMC5041_CHOPCONF(config->index), reg_value); if (err != 0) { @@ -398,8 +398,8 @@ static int tmc5041_stepper_get_micro_step_res(const struct device *dev, if (err != 0) { return -EIO; } - reg_value &= TMC5041_CHOPCONF_MRES_MASK; - reg_value >>= TMC5041_CHOPCONF_MRES_SHIFT; + reg_value &= TMC5XXX_CHOPCONF_MRES_MASK; + reg_value >>= TMC5XXX_CHOPCONF_MRES_SHIFT; *res = (1 << (MICRO_STEP_RES_INDEX(STEPPER_MICRO_STEP_256) - reg_value)); LOG_DBG("Stepper motor controller %s get micro step resolution: %d", dev->name, *res); return 0; @@ -411,7 +411,7 @@ static int tmc5041_stepper_set_actual_position(const struct device *dev, const i int err; err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index), - TMC5041_RAMPMODE_HOLD_MODE); + TMC5XXX_RAMPMODE_HOLD_MODE); if (err != 0) { return -EIO; } @@ -449,7 +449,7 @@ static int tmc5041_stepper_set_target_position(const struct device *dev, const i } err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index), - TMC5041_RAMPMODE_POSITIONING_MODE); + TMC5XXX_RAMPMODE_POSITIONING_MODE); if (err != 0) { return -EIO; } @@ -493,7 +493,7 @@ static int tmc5041_stepper_enable_constant_velocity_mode(const struct device *de switch (direction) { case STEPPER_DIRECTION_POSITIVE: err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index), - TMC5041_RAMPMODE_POSITIVE_VELOCITY_MODE); + TMC5XXX_RAMPMODE_POSITIVE_VELOCITY_MODE); if (err != 0) { return -EIO; } @@ -505,7 +505,7 @@ static int tmc5041_stepper_enable_constant_velocity_mode(const struct device *de case STEPPER_DIRECTION_NEGATIVE: err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index), - TMC5041_RAMPMODE_NEGATIVE_VELOCITY_MODE); + TMC5XXX_RAMPMODE_NEGATIVE_VELOCITY_MODE); if (err != 0) { return -EIO; } @@ -611,7 +611,7 @@ static int tmc5041_init(const struct device *dev) /* Init non motor-index specific registers here. */ LOG_DBG("GCONF: %d", config->gconf); - err = tmc5041_write(dev, TMC5041_GCONF, config->gconf); + err = tmc5041_write(dev, TMC5XXX_GCONF, config->gconf); if (err != 0) { return -EIO; } @@ -619,7 +619,7 @@ static int tmc5041_init(const struct device *dev) /* Read GSTAT register values to clear any errors SPI Datagram. */ uint32_t gstat_value; - err = tmc5041_read(dev, TMC5041_GSTAT, &gstat_value); + err = tmc5041_read(dev, TMC5XXX_GSTAT, &gstat_value); if (err != 0) { return -EIO; } @@ -647,8 +647,8 @@ static int tmc5041_stepper_init(const struct device *dev) LOG_DBG("Setting stall guard to %d with delay %d ms", stepper_config->sg_threshold, stepper_config->sg_velocity_check_interval_ms); - if (!IN_RANGE(stepper_config->sg_threshold, TMC5041_SG_MIN_VALUE, - TMC5041_SG_MAX_VALUE)) { + if (!IN_RANGE(stepper_config->sg_threshold, TMC5XXX_SG_MIN_VALUE, + TMC5XXX_SG_MAX_VALUE)) { LOG_ERR("Stallguard threshold out of range"); return -EINVAL; } @@ -657,7 +657,7 @@ static int tmc5041_stepper_init(const struct device *dev) err = tmc5041_write( stepper_config->controller, TMC5041_COOLCONF(stepper_config->index), - stall_guard_threshold << TMC5041_COOLCONF_SG2_THRESHOLD_VALUE_SHIFT); + stall_guard_threshold << TMC5XXX_COOLCONF_SG2_THRESHOLD_VALUE_SHIFT); if (err != 0) { return -EIO; } diff --git a/drivers/stepper/adi_tmc/adi_tmc_reg.h b/drivers/stepper/adi_tmc/adi_tmc_reg.h index ebf0de57ed168..eff9f86cea8d0 100644 --- a/drivers/stepper/adi_tmc/adi_tmc_reg.h +++ b/drivers/stepper/adi_tmc/adi_tmc_reg.h @@ -20,7 +20,64 @@ extern "C" { /** Common Registers for TMC5041 and TMC51XX */ #if defined(CONFIG_STEPPER_ADI_TMC5041) -#define TMC5XXX_CLOCK_FREQ_SHIFT 24 +#define TMC5XXX_WRITE_BIT 0x80U +#define TMC5XXX_ADDRESS_MASK 0x7FU + + #define TMC5XXX_CLOCK_FREQ_SHIFT 24 + +#define TMC5XXX_GCONF 0x00 +#define TMC5XXX_GSTAT 0x01 + +#define TMC5XXX_RAMPMODE_POSITIONING_MODE 0 +#define TMC5XXX_RAMPMODE_POSITIVE_VELOCITY_MODE 1 +#define TMC5XXX_RAMPMODE_NEGATIVE_VELOCITY_MODE 2 +#define TMC5XXX_RAMPMODE_HOLD_MODE 3 + +#define TMC5XXX_SG_MIN_VALUE -64 +#define TMC5XXX_SG_MAX_VALUE 63 +#define TMC5XXX_SW_MODE_SG_STOP_ENABLE BIT(10) + +#define TMC5XXX_COOLCONF_SG2_THRESHOLD_VALUE_SHIFT 16 + +#define TMC5XXX_IHOLD_MASK GENMASK(4, 0) +#define TMC5XXX_IHOLD_SHIFT 0 +#define TMC5XXX_IHOLD(n) (((n) << TMC5XXX_IHOLD_SHIFT) & TMC5XXX_IHOLD_MASK) + +#define TMC5XXX_IRUN_MASK GENMASK(12, 8) +#define TMC5XXX_IRUN_SHIFT 8 +#define TMC5XXX_IRUN(n) (((n) << TMC5XXX_IRUN_SHIFT) & TMC5XXX_IRUN_MASK) + +#define TMC5XXX_IHOLDDELAY_MASK GENMASK(19, 16) +#define TMC5XXX_IHOLDDELAY_SHIFT 16 +#define TMC5XXX_IHOLDDELAY(n) (((n) << TMC5XXX_IHOLDDELAY_SHIFT) & TMC5XXX_IHOLDDELAY_MASK) + +#define TMC5XXX_CHOPCONF_DRV_ENABLE_MASK GENMASK(3, 0) +#define TMC5XXX_CHOPCONF_MRES_MASK GENMASK(27, 24) +#define TMC5XXX_CHOPCONF_MRES_SHIFT 24 + +#define TMC5XXX_RAMPSTAT_INT_MASK GENMASK(7, 4) +#define TMC5XXX_RAMPSTAT_INT_SHIFT 4 + +#define TMC5XXX_RAMPSTAT_POS_REACHED_EVENT_MASK BIT(7) +#define TMC5XXX_POS_REACHED_EVENT \ + (TMC5XXX_RAMPSTAT_POS_REACHED_EVENT_MASK >> TMC5XXX_RAMPSTAT_INT_SHIFT) + +#define TMC5XXX_RAMPSTAT_STOP_SG_EVENT_MASK BIT(6) +#define TMC5XXX_STOP_SG_EVENT \ + (TMC5XXX_RAMPSTAT_STOP_SG_EVENT_MASK >> TMC5XXX_RAMPSTAT_INT_SHIFT) + +#define TMC5XXX_RAMPSTAT_STOP_RIGHT_EVENT_MASK BIT(5) +#define TMC5XXX_STOP_RIGHT_EVENT \ + (TMC5XXX_RAMPSTAT_STOP_RIGHT_EVENT_MASK >> TMC5XXX_RAMPSTAT_INT_SHIFT) + +#define TMC5XXX_RAMPSTAT_STOP_LEFT_EVENT_MASK BIT(4) +#define TMC5XXX_STOP_LEFT_EVENT \ + (TMC5XXX_RAMPSTAT_STOP_LEFT_EVENT_MASK >> TMC5XXX_RAMPSTAT_INT_SHIFT) + +#define TMC5XXX_DRV_STATUS_STST_BIT BIT(31) +#define TMC5XXX_DRV_STATUS_SG_RESULT_MASK GENMASK(9, 0) +#define TMC5XXX_DRV_STATUS_SG_STATUS_MASK BIT(24) +#define TMC5XXX_DRV_STATUS_SG_STATUS_SHIFT 24 #endif @@ -37,19 +94,11 @@ extern "C" { * @{ */ -#define TMC5041_WRITE_BIT 0x80U -#define TMC5041_ADDRESS_MASK 0x7FU - #define TMC5041_GCONF_POSCMP_ENABLE_SHIFT 3 #define TMC5041_GCONF_TEST_MODE_SHIFT 7 #define TMC5041_GCONF_SHAFT_SHIFT(n) ((n) ? 8 : 9) #define TMC5041_LOCK_GCONF_SHIFT 10 -#define TMC5041_GCONF 0x00 -#define TMC5041_GSTAT 0x01 -#define TMC5041_INPUT 0x04 -#define TMC5041_X_COMPARE 0x05 - #define TMC5041_PWMCONF(motor) (0x10 | TMC5041_MOTOR_ADDR_PWM(motor)) #define TMC5041_PWM_STATUS(motor) (0x11 | TMC5041_MOTOR_ADDR_PWM(motor)) @@ -89,57 +138,6 @@ extern "C" { #define TMC5041_COOLCONF(motor) (0x6D | TMC5041_MOTOR_ADDR_DRV(motor)) #define TMC5041_DRVSTATUS(motor) (0x6F | TMC5041_MOTOR_ADDR_DRV(motor)) -#define TMC5041_RAMPMODE_POSITIONING_MODE 0 -#define TMC5041_RAMPMODE_POSITIVE_VELOCITY_MODE 1 -#define TMC5041_RAMPMODE_NEGATIVE_VELOCITY_MODE 2 -#define TMC5041_RAMPMODE_HOLD_MODE 3 - -#define TMC5041_SW_MODE_SG_STOP_ENABLE BIT(10) - -#define TMC5041_RAMPSTAT_INT_MASK GENMASK(7, 4) -#define TMC5041_RAMPSTAT_INT_SHIFT 4 - -#define TMC5041_RAMPSTAT_POS_REACHED_EVENT_MASK BIT(7) -#define TMC5041_POS_REACHED_EVENT \ - (TMC5041_RAMPSTAT_POS_REACHED_EVENT_MASK >> TMC5041_RAMPSTAT_INT_SHIFT) - -#define TMC5041_RAMPSTAT_STOP_SG_EVENT_MASK BIT(6) -#define TMC5041_STOP_SG_EVENT (TMC5041_RAMPSTAT_STOP_SG_EVENT_MASK >> TMC5041_RAMPSTAT_INT_SHIFT) - -#define TMC5041_RAMPSTAT_STOP_RIGHT_EVENT_MASK BIT(5) -#define TMC5041_STOP_RIGHT_EVENT \ - (TMC5041_RAMPSTAT_STOP_RIGHT_EVENT_MASK >> TMC5041_RAMPSTAT_INT_SHIFT) - -#define TMC5041_RAMPSTAT_STOP_LEFT_EVENT_MASK BIT(4) -#define TMC5041_STOP_LEFT_EVENT \ - (TMC5041_RAMPSTAT_STOP_LEFT_EVENT_MASK >> TMC5041_RAMPSTAT_INT_SHIFT) - -#define TMC5041_DRV_STATUS_STST_BIT BIT(31) -#define TMC5041_DRV_STATUS_SG_RESULT_MASK GENMASK(9, 0) -#define TMC5041_DRV_STATUS_SG_STATUS_MASK BIT(24) -#define TMC5041_DRV_STATUS_SG_STATUS_SHIFT 24 - -#define TMC5041_SG_MIN_VALUE -64 -#define TMC5041_SG_MAX_VALUE 63 - -#define TMC5041_COOLCONF_SG2_THRESHOLD_VALUE_SHIFT 16 - -#define TMC5041_IHOLD_MASK GENMASK(4, 0) -#define TMC5041_IHOLD_SHIFT 0 -#define TMC5041_IHOLD(n) (((n) << TMC5041_IHOLD_SHIFT) & TMC5041_IHOLD_MASK) - -#define TMC5041_IRUN_MASK GENMASK(12, 8) -#define TMC5041_IRUN_SHIFT 8 -#define TMC5041_IRUN(n) (((n) << TMC5041_IRUN_SHIFT) & TMC5041_IRUN_MASK) - -#define TMC5041_IHOLDDELAY_MASK GENMASK(19, 16) -#define TMC5041_IHOLDDELAY_SHIFT 16 -#define TMC5041_IHOLDDELAY(n) (((n) << TMC5041_IHOLDDELAY_SHIFT) & TMC5041_IHOLDDELAY_MASK) - -#define TMC5041_CHOPCONF_DRV_ENABLE_MASK GENMASK(3, 0) -#define TMC5041_CHOPCONF_MRES_MASK GENMASK(27, 24) -#define TMC5041_CHOPCONF_MRES_SHIFT 24 - #endif /** diff --git a/include/zephyr/drivers/stepper/stepper_trinamic.h b/include/zephyr/drivers/stepper/stepper_trinamic.h index d36707c14b0b0..6afe8c9292fdb 100644 --- a/include/zephyr/drivers/stepper/stepper_trinamic.h +++ b/include/zephyr/drivers/stepper/stepper_trinamic.h @@ -144,9 +144,9 @@ struct tmc_ramp_generator_data { .tzerowait = DT_PROP(node, tzerowait), \ .vcoolthrs = DT_PROP(node, vcoolthrs), \ .vhigh = DT_PROP(node, vhigh), \ - .iholdrun = (TMC5041_IRUN(DT_PROP(node, irun)) | \ - TMC5041_IHOLD(DT_PROP(node, ihold)) | \ - TMC5041_IHOLDDELAY(DT_PROP(node, iholddelay))), \ + .iholdrun = (TMC5XXX_IRUN(DT_PROP(node, irun)) | \ + TMC5XXX_IHOLD(DT_PROP(node, ihold)) | \ + TMC5XXX_IHOLDDELAY(DT_PROP(node, iholddelay))), \ } /**