Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
tmc6460.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: Copyright (c) 2026 Cherrence Sarip <cherrence.sarip@analog.com>
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
11
12#ifndef ZEPHYR_INCLUDE_DRIVERS_MISC_TMC6460_TMC6460_H_
13#define ZEPHYR_INCLUDE_DRIVERS_MISC_TMC6460_TMC6460_H_
14
15#include <zephyr/types.h>
16#include <zephyr/device.h>
17#include <zephyr/sys/util.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
28
29/* Register Field Descriptor */
30
44
52
53/* TMC6460 Register Addresses */
54/* Source: TMC-API master (analogdevicesinc/TMC-API) */
55/* tmc/ic/TMC6460/TMC6460_HW_Abstraction.h */
56
57/* CHIP registers */
58#define TMC6460_CHIP_ID 0x0000U
59
60/* CHIP_ID reset value: ASCII "6460" (0x36='6' 0x34='4' 0x36='6' 0x30='0') */
61#define TMC6460_CHIP_ID_RESET_VALUE 0x36343630U
62
63#define TMC6460_CHIP_VARIANT 0x0001U
64#define TMC6460_CHIP_REVISION 0x0002U
65#define TMC6460_CHIP_INPUTS_RAW 0x0004U
66#define TMC6460_CHIP_OUTPUTS_RAW 0x0005U
67#define TMC6460_CHIP_IO_MATRIX 0x0006U
68#define TMC6460_CHIP_IO_PU_PD 0x0007U
69#define TMC6460_CHIP_IO_CONFIG 0x0008U
70
71/* CHIP_IO_CONFIG power-on reset (POR) default value */
72#define TMC6460_CHIP_IO_CONFIG_RESET_VALUE 0x70055000U
73#define TMC6460_CHIP_STATUS_FLAGS 0x0009U
74#define TMC6460_CHIP_EVENTS 0x000AU
75#define TMC6460_CHIP_FAULTN_INT_MASK 0x000BU
76#define TMC6460_CHIP_SPI_STATUS_MASK 0x000CU
77
78/* CLK_CTRL registers */
79#define TMC6460_CLK_CTRL_CONFIG 0x0040U
80#define TMC6460_CLK_CTRL_STATUS 0x0041U
81
82/* ADC registers */
83#define TMC6460_ADC_CONFIG 0x0080U
84#define TMC6460_ADC_ADC_VERSION 0x0081U
85#define TMC6460_ADC_I2_I1_RAW 0x0082U
86#define TMC6460_ADC_VM_I3_RAW 0x0083U
87#define TMC6460_ADC_TEMP_RAW 0x0084U
88#define TMC6460_ADC_AIN_V_AIN_U_RAW 0x0085U
89#define TMC6460_ADC_AIN_AIN_W_RAW 0x0086U
90#define TMC6460_ADC_STATUS 0x008AU
91#define TMC6460_ADC_I123 0x008CU
92
93/* MCC_ADC registers */
94#define TMC6460_MCC_ADC_I_GEN_CONFIG 0x00C0U
95#define TMC6460_MCC_ADC_IW_IU 0x00C1U
96#define TMC6460_MCC_ADC_IV 0x00C2U
97#define TMC6460_MCC_ADC_CSA_GAIN 0x00C3U
98#define TMC6460_MCC_ADC_EVENTS 0x00C4U
99#define TMC6460_MCC_ADC_DYN_GAIN_LIMITS_4X_3X 0x00C5U
100#define TMC6460_MCC_ADC_DYN_GAIN_LIMIT_2X 0x00C6U
101#define TMC6460_MCC_ADC_TEMP_LIMITS 0x00C7U
102#define TMC6460_MCC_ADC_CURRENT_OVERLOAD 0x00C8U
103
104/* MCC_CONFIG registers */
105#define TMC6460_MCC_CONFIG_MOTOR_MOTION 0x0100U
106#define TMC6460_MCC_CONFIG_GDRV 0x0101U
107#define TMC6460_MCC_CONFIG_PWM 0x0102U
108#define TMC6460_MCC_CONFIG_PWM_PERIOD 0x0103U
109#define TMC6460_MCC_CONFIG_BRAKE_CHOPPER_LIMITS 0x0104U
110#define TMC6460_MCC_CONFIG_MCC_STATUS 0x0105U
111#define TMC6460_MCC_CONFIG_TORQUE_FF_ACC_CONFIG 0x0106U
112#define TMC6460_MCC_CONFIG_TORQUE_FF_VISC_FRIC_CONFIG 0x0107U
113#define TMC6460_MCC_CONFIG_TORQUE_FF_COULOMB_FRIC 0x0108U
114#define TMC6460_MCC_CONFIG_TORQUE_FEEDFORWARD 0x0109U
115
116/* FOC registers */
117#define TMC6460_FOC_PID_CONFIG 0x0140U
118#define TMC6460_FOC_PID_U_S_MAX 0x0141U
119#define TMC6460_FOC_PID_FLUX_COEFF 0x0142U
120#define TMC6460_FOC_PID_TORQUE_COEFF 0x0143U
121#define TMC6460_FOC_PID_FIELDWEAK_COEFF 0x0144U
122#define TMC6460_FOC_PID_VELOCITY_COEFF 0x0145U
123#define TMC6460_FOC_PID_POSITION_COEFF 0x0146U
124#define TMC6460_FOC_PID_POSITION_TOLERANCE 0x0147U
125#define TMC6460_FOC_PID_POSITION_TOLERANCE_DELAY 0x0148U
126#define TMC6460_FOC_PID_UQ_UD_LIMITS 0x0149U
127#define TMC6460_FOC_PID_TORQUE_FLUX_LIMITS 0x014AU
128#define TMC6460_FOC_PID_VELOCITY_LIMIT 0x014BU
129#define TMC6460_FOC_PID_POSITION_LIMIT_LOW 0x014CU
130#define TMC6460_FOC_PID_POSITION_LIMIT_HIGH 0x014DU
131#define TMC6460_FOC_PID_TORQUE_FLUX_TARGET 0x014EU
132#define TMC6460_FOC_PID_TORQUE_FLUX_OFFSET 0x014FU
133#define TMC6460_FOC_PID_VELOCITY_TARGET 0x0150U
134#define TMC6460_FOC_PID_VELOCITY_OFFSET 0x0151U
135#define TMC6460_FOC_PID_POSITION_TARGET 0x0152U
136#define TMC6460_FOC_PID_TORQUE_FLUX_ACTUAL 0x0153U
137#define TMC6460_FOC_PID_VELOCITY_ACTUAL 0x0154U
138#define TMC6460_FOC_PID_POSITION_ACTUAL 0x0155U
139#define TMC6460_FOC_PID_POSITION_ACTUAL_OFFSET 0x0156U
140#define TMC6460_FOC_PID_TORQUE_ERROR 0x0157U
141#define TMC6460_FOC_PID_FLUX_ERROR 0x0158U
142#define TMC6460_FOC_PID_VELOCITY_ERROR 0x0159U
143#define TMC6460_FOC_PID_VELOCITY_ERROR_MAX 0x015AU
144#define TMC6460_FOC_PID_POSITION_ERROR 0x015BU
145#define TMC6460_FOC_PID_POSITION_ERROR_MAX 0x015CU
146#define TMC6460_FOC_PID_TORQUE_INTEGRATOR 0x015DU
147#define TMC6460_FOC_PID_FLUX_INTEGRATOR 0x015EU
148#define TMC6460_FOC_PID_VELOCITY_INTEGRATOR 0x015FU
149#define TMC6460_FOC_PID_POSITION_INTEGRATOR 0x0160U
150#define TMC6460_FOC_PIDIN_TORQUE_FLUX_TARGET 0x0161U
151#define TMC6460_FOC_PIDIN_VELOCITY_TARGET 0x0162U
152#define TMC6460_FOC_PIDIN_POSITION_TARGET 0x0163U
153#define TMC6460_FOC_PIDIN_TORQUE_FLUX_TARGET_LIMITED 0x0164U
154#define TMC6460_FOC_PIDIN_VELOCITY_TARGET_LIMITED 0x0165U
155#define TMC6460_FOC_PIDIN_POSITION_TARGET_LIMITED 0x0166U
156#define TMC6460_FOC_FOC_IBETA_IALPHA 0x0167U
157#define TMC6460_FOC_FOC_IQ_ID 0x0168U
158#define TMC6460_FOC_FOC_UQ_UD 0x0169U
159#define TMC6460_FOC_FOC_UQ_UD_LIMITED 0x016AU
160#define TMC6460_FOC_FOC_UBETA_UALPHA 0x016BU
161#define TMC6460_FOC_FOC_UW_UU 0x016CU
162#define TMC6460_FOC_FOC_UV 0x016DU
163#define TMC6460_FOC_PWM_V_U 0x016EU
164#define TMC6460_FOC_PWM_W 0x016FU
165#define TMC6460_FOC_FOC_STATUS 0x0170U
166#define TMC6460_FOC_U_S_ACTUAL_I_S_ACTUAL 0x0171U
167#define TMC6460_FOC_P_MOTOR 0x0172U
168#define TMC6460_FOC_I_T_ACTUAL 0x0173U
169#define TMC6460_FOC_PRBS_AMPLITUDE 0x0174U
170#define TMC6460_FOC_PRBS_DOWN_SAMPLING_RATIO 0x0175U
171
172/* BIQUAD registers */
173#define TMC6460_BIQUAD_BIQUAD_EN 0x0180U
174#define TMC6460_BIQUAD_VELOCITY_A1 0x0181U
175#define TMC6460_BIQUAD_VELOCITY_A2 0x0182U
176#define TMC6460_BIQUAD_VELOCITY_B0 0x0183U
177#define TMC6460_BIQUAD_VELOCITY_B1 0x0184U
178#define TMC6460_BIQUAD_VELOCITY_B2 0x0185U
179#define TMC6460_BIQUAD_TORQUE_A1 0x0186U
180#define TMC6460_BIQUAD_TORQUE_A2 0x0187U
181#define TMC6460_BIQUAD_TORQUE_B0 0x0188U
182#define TMC6460_BIQUAD_TORQUE_B1 0x0189U
183#define TMC6460_BIQUAD_TORQUE_B2 0x018AU
184
185/* RAMPER registers */
186#define TMC6460_RAMPER_TIME_CONFIG 0x01C0U
187#define TMC6460_RAMPER_SWITCH_MODE 0x01C1U
188#define TMC6460_RAMPER_PHI_E 0x01C3U
189#define TMC6460_RAMPER_A1 0x01C4U
190#define TMC6460_RAMPER_A2 0x01C5U
191#define TMC6460_RAMPER_A_MAX 0x01C6U
192#define TMC6460_RAMPER_D1 0x01C7U
193#define TMC6460_RAMPER_D2 0x01C8U
194#define TMC6460_RAMPER_D_MAX 0x01C9U
195#define TMC6460_RAMPER_V_START 0x01CAU
196#define TMC6460_RAMPER_V1 0x01CBU
197#define TMC6460_RAMPER_V2 0x01CCU
198#define TMC6460_RAMPER_V_STOP 0x01CDU
199#define TMC6460_RAMPER_V_MAX 0x01CEU
200#define TMC6460_RAMPER_ACCELERATION 0x01CFU
201#define TMC6460_RAMPER_V_ACTUAL 0x01D0U
202#define TMC6460_RAMPER_POSITION 0x01D1U
203#define TMC6460_RAMPER_POSITION_LATCH 0x01D2U
204#define TMC6460_RAMPER_POSITION_ACTUAL_LATCH 0x01D3U
205#define TMC6460_RAMPER_STATUS 0x01D4U
206#define TMC6460_RAMPER_EVENTS 0x01D5U
207
208/* EXT_CTRL registers */
209#define TMC6460_EXT_CTRL_VOLTAGE 0x0200U
210#define TMC6460_EXT_CTRL_PWM_V_U 0x0202U
211#define TMC6460_EXT_CTRL_PWM_W 0x0203U
212
213/* FEEDBACK registers */
214#define TMC6460_FEEDBACK_CONF_CH_A 0x0240U
215#define TMC6460_FEEDBACK_CONF_CH_B 0x0241U
216#define TMC6460_FEEDBACK_PHI_E_OFFSET 0x0242U
217#define TMC6460_FEEDBACK_LUT 0x0243U
218#define TMC6460_FEEDBACK_VELOCITY_FRQ_CONF 0x0244U
219#define TMC6460_FEEDBACK_VELOCITY_PER_CONF 0x0245U
220#define TMC6460_FEEDBACK_VELOCITY_PER_FILTER 0x0246U
221#define TMC6460_FEEDBACK_PHI_CONVERTED 0x0247U
222#define TMC6460_FEEDBACK_CH_A 0x0248U
223#define TMC6460_FEEDBACK_CH_B 0x0249U
224#define TMC6460_FEEDBACK_VELOCITY_FRQ 0x024AU
225#define TMC6460_FEEDBACK_VELOCITY_PER 0x024BU
226#define TMC6460_FEEDBACK_LUT_WDATA 0x024CU
227#define TMC6460_FEEDBACK_PHI_EXT_A 0x024DU
228#define TMC6460_FEEDBACK_PHI_EXT_B 0x024EU
229#define TMC6460_FEEDBACK_VELOCITY_EXT 0x024FU
230#define TMC6460_FEEDBACK_OUTPUT_CONF 0x0250U
231#define TMC6460_FEEDBACK_PHI_E 0x0251U
232#define TMC6460_FEEDBACK_PHI_DIFF_LIMIT 0x0252U
233
234/* ABN registers */
235#define TMC6460_ABN_CONFIG 0x0280U
236#define TMC6460_ABN_COUNT 0x0281U
237#define TMC6460_ABN_COUNT_N_CAPTURE 0x0282U
238#define TMC6460_ABN_COUNT_N_WRITE 0x0283U
239#define TMC6460_ABN_EVENTS 0x0284U
240
241/* ABN2 registers */
242#define TMC6460_ABN2_CONFIG 0x02C0U
243#define TMC6460_ABN2_COUNT 0x02C1U
244#define TMC6460_ABN2_COUNT_N_CAPTURE 0x02C2U
245#define TMC6460_ABN2_COUNT_N_WRITE 0x02C3U
246#define TMC6460_ABN2_EVENTS 0x02C4U
247
248/* HALL registers */
249#define TMC6460_HALL_MAP_CONFIG 0x0300U
250#define TMC6460_HALL_DIG_COUNT 0x0301U
251#define TMC6460_HALL_ANA_CONFIG 0x0302U
252#define TMC6460_HALL_ANA_UX_CONFIG 0x0303U
253#define TMC6460_HALL_ANA_VN_CONFIG 0x0304U
254#define TMC6460_HALL_ANA_WY_CONFIG 0x0305U
255#define TMC6460_HALL_ANA_UX_OUT 0x0306U
256#define TMC6460_HALL_ANA_VN_OUT 0x0307U
257#define TMC6460_HALL_ANA_WY_OUT 0x0308U
258#define TMC6460_HALL_ANA_OUT 0x0309U
259#define TMC6460_HALL_DIG_EVENTS 0x030AU
260
261/* UART registers */
262#define TMC6460_UART_CONTROL 0x0340U
263#define TMC6460_UART_TIMEOUT 0x0341U
264#define TMC6460_UART_STATUS 0x0342U
265#define TMC6460_UART_EVENTS 0x0343U
266#define TMC6460_UART_RTMI_CH_0 0x0344U
267#define TMC6460_UART_RTMI_CH_1 0x0345U
268#define TMC6460_UART_RTMI_CH_2 0x0346U
269#define TMC6460_UART_RTMI_CH_3 0x0347U
270#define TMC6460_UART_RTMI_CH_4 0x0348U
271#define TMC6460_UART_RTMI_CH_5 0x0349U
272#define TMC6460_UART_RTMI_CH_6 0x034AU
273#define TMC6460_UART_RTMI_CH_7 0x034BU
274
275/* IO_CONTROLLER registers */
276#define TMC6460_IO_CONTROLLER_CONTROL 0x0380U
277#define TMC6460_IO_CONTROLLER_COMMAND 0x0381U
278#define TMC6460_IO_CONTROLLER_RESPONSE_0 0x0382U
279#define TMC6460_IO_CONTROLLER_RESPONSE_1 0x0383U
280#define TMC6460_IO_CONTROLLER_RESPONSE_2 0x0384U
281#define TMC6460_IO_CONTROLLER_RESPONSE_3 0x0385U
282
283/* Selected Register Field Definitions */
284/* (masks and shifts verified against TMC-API master) */
285
286/* CLK_CTRL_CONFIG fields */
287#define TMC6460_CLK_CTRL_CONFIG_COMMIT_MASK 0x00000001U
288#define TMC6460_CLK_CTRL_CONFIG_COMMIT_SHIFT 0
289#define TMC6460_CLK_CTRL_CONFIG_PLL_SRC_MASK 0x00000002U
290#define TMC6460_CLK_CTRL_CONFIG_PLL_SRC_SHIFT 1
291#define TMC6460_CLK_CTRL_CONFIG_PLL_EN_MASK 0x00000004U
292#define TMC6460_CLK_CTRL_CONFIG_PLL_EN_SHIFT 2
293#define TMC6460_CLK_CTRL_CONFIG_ADC_CLK_EN_MASK 0x00000008U
294#define TMC6460_CLK_CTRL_CONFIG_ADC_CLK_EN_SHIFT 3
295#define TMC6460_CLK_CTRL_CONFIG_PWM_CLK_EN_MASK 0x00000010U
296#define TMC6460_CLK_CTRL_CONFIG_PWM_CLK_EN_SHIFT 4
297#define TMC6460_CLK_CTRL_CONFIG_CLK_FSM_EN_MASK 0x00000020U
298#define TMC6460_CLK_CTRL_CONFIG_CLK_FSM_EN_SHIFT 5
299#define TMC6460_CLK_CTRL_CONFIG_CLOCK_DIVIDER_MASK 0x00001F00U
300#define TMC6460_CLK_CTRL_CONFIG_CLOCK_DIVIDER_SHIFT 8
301
302/* CLK_CTRL_STATUS fields */
303#define TMC6460_CLK_CTRL_STATUS_CLK_1M0_OK_MASK 0x00000001U
304#define TMC6460_CLK_CTRL_STATUS_CLK_1M0_OK_SHIFT 0
305#define TMC6460_CLK_CTRL_STATUS_PLL_ERR_MASK 0x00000010U
306#define TMC6460_CLK_CTRL_STATUS_PLL_ERR_SHIFT 4
307#define TMC6460_CLK_CTRL_STATUS_PLL_LOCK_ON_MASK 0x00000020U
308#define TMC6460_CLK_CTRL_STATUS_PLL_LOCK_ON_SHIFT 5
309#define TMC6460_CLK_CTRL_STATUS_PLL_READY_MASK 0x00000040U
310#define TMC6460_CLK_CTRL_STATUS_PLL_READY_SHIFT 6
311
312/* MCC_CONFIG_MOTOR_MOTION fields */
313#define TMC6460_MCC_CONFIG_MOTOR_MOTION_N_POLE_PAIRS_MASK 0x0000007FU
314#define TMC6460_MCC_CONFIG_MOTOR_MOTION_N_POLE_PAIRS_SHIFT 0
315#define TMC6460_MCC_CONFIG_MOTOR_MOTION_MOTOR_TYPE_MASK 0x00000180U
316#define TMC6460_MCC_CONFIG_MOTOR_MOTION_MOTOR_TYPE_SHIFT 7
317#define TMC6460_MCC_CONFIG_MOTOR_MOTION_MOTION_MODE_MASK 0x00001E00U
318#define TMC6460_MCC_CONFIG_MOTOR_MOTION_MOTION_MODE_SHIFT 9
319#define TMC6460_MCC_CONFIG_MOTOR_MOTION_RAMP_MODE_MASK 0x00002000U
320#define TMC6460_MCC_CONFIG_MOTOR_MOTION_RAMP_MODE_SHIFT 13
321#define TMC6460_MCC_CONFIG_MOTOR_MOTION_RAMP_EN_MASK 0x00004000U
322#define TMC6460_MCC_CONFIG_MOTOR_MOTION_RAMP_EN_SHIFT 14
323#define TMC6460_MCC_CONFIG_MOTOR_MOTION_RAMP_USE_PHI_E_MASK 0x00008000U
324#define TMC6460_MCC_CONFIG_MOTOR_MOTION_RAMP_USE_PHI_E_SHIFT 15
325
326/* MCC_ADC_CSA_GAIN fields */
327#define TMC6460_MCC_ADC_CSA_GAIN_CSA_GAIN_MASK 0x00000003U
328#define TMC6460_MCC_ADC_CSA_GAIN_CSA_GAIN_SHIFT 0
329
330/* MCC_CONFIG_GDRV fields */
331#define TMC6460_MCC_CONFIG_GDRV_DRV_EN_BIT_MASK 0x00010000U
332#define TMC6460_MCC_CONFIG_GDRV_DRV_EN_BIT_SHIFT 16
333#define TMC6460_MCC_CONFIG_GDRV_CHARGE_PUMP_EN_MASK 0x80000000U
334#define TMC6460_MCC_CONFIG_GDRV_CHARGE_PUMP_EN_SHIFT 31
335#define TMC6460_MCC_CONFIG_GDRV_USE_INTERNAL_R_REF_MASK 0x01000000U
336#define TMC6460_MCC_CONFIG_GDRV_USE_INTERNAL_R_REF_SHIFT 24
337#define TMC6460_MCC_CONFIG_GDRV_SLEW_RATE_MASK 0x00000003U
338#define TMC6460_MCC_CONFIG_GDRV_SLEW_RATE_SHIFT 0
339#define TMC6460_MCC_CONFIG_GDRV_LS_RES_ON_MASK 0x00000030U
340#define TMC6460_MCC_CONFIG_GDRV_LS_RES_ON_SHIFT 4
341
342/* MCC_CONFIG_PWM fields */
343#define TMC6460_MCC_CONFIG_PWM_CHOP_MASK 0x00000007U
344#define TMC6460_MCC_CONFIG_PWM_CHOP_SHIFT 0
345#define TMC6460_MCC_CONFIG_PWM_SV_MODE_MASK 0x00000030U
346#define TMC6460_MCC_CONFIG_PWM_SV_MODE_SHIFT 4
347
348/* MCC_CONFIG_PWM_PERIOD fields */
349#define TMC6460_MCC_CONFIG_PWM_PERIOD_MAX_COUNT_MASK 0x0000FFFFU
350#define TMC6460_MCC_CONFIG_PWM_PERIOD_MAX_COUNT_SHIFT 0
351
352/* EXT_CTRL_VOLTAGE fields */
353#define TMC6460_EXT_CTRL_VOLTAGE_UD_MASK 0x0000FFFFU
354#define TMC6460_EXT_CTRL_VOLTAGE_UD_SHIFT 0
355
356/*
357 * ADC_CONFIG fields.
358 * Only three fields exist in this register:
359 * NRST_ADC_0 bit 2 active-low reset for current-sense ADC 0
360 * NRST_ADC_1 bit 3 active-low reset for current-sense ADC 1
361 * CSA_AZ_FLT_EXP bits 8-11 current-sense-amplifier auto-zero filter exponent
362 * Bits 0 and 1 are not defined. Every ADC reset must therefore be a
363 * read-modify-write that changes only NRST (bits 2, 3) and preserves
364 * CSA_AZ_FLT_EXP.
365 */
366#define TMC6460_ADC_CONFIG_NRST_ADC_0_MASK 0x00000004U
367#define TMC6460_ADC_CONFIG_NRST_ADC_0_SHIFT 2
368#define TMC6460_ADC_CONFIG_NRST_ADC_1_MASK 0x00000008U
369#define TMC6460_ADC_CONFIG_NRST_ADC_1_SHIFT 3
370#define TMC6460_ADC_CONFIG_NRST_BOTH_MASK \
371 (TMC6460_ADC_CONFIG_NRST_ADC_0_MASK | TMC6460_ADC_CONFIG_NRST_ADC_1_MASK)
372#define TMC6460_ADC_CONFIG_CSA_AZ_FLT_EXP_MASK 0x00000F00U
373#define TMC6460_ADC_CONFIG_CSA_AZ_FLT_EXP_SHIFT 8
374
375/* ADC_STATUS fields (ADC_0_READY & ADC_1_READY drive ADC_FAIL_STATUS) */
376#define TMC6460_ADC_STATUS_ADC_0_READY_MASK 0x00000001U
377#define TMC6460_ADC_STATUS_ADC_1_READY_MASK 0x00000002U
378
379/* Register Field Value Enumerations */
380/* (enumerated field values per the TMC6460 datasheet register map) */
381
382/* MCC_CONFIG_MOTOR_MOTION.MOTOR_TYPE */
383#define TMC6460_MOTOR_TYPE_BLDC 3U
384
385/* MCC_CONFIG_MOTOR_MOTION.MOTION_MODE */
386#define TMC6460_MOTION_MODE_PWM_OFF 0U
387#define TMC6460_MOTION_MODE_VOLTAGE_EXT 11U
388
389/* MCC_CONFIG_MOTOR_MOTION.RAMP_MODE */
390#define TMC6460_RAMP_MODE_VELOCITY 1U
391
392/* MCC_ADC_CSA_GAIN.CSA_GAIN */
393#define TMC6460_CSA_GAIN_X1 0U
394
395/* MCC_CONFIG_GDRV.SLEW_RATE */
396#define TMC6460_SLEW_RATE_SR_400_V_PER_US 2U
397
398/* MCC_CONFIG_GDRV.LS_RES_ON */
399#define TMC6460_LS_RES_55_MOHM 3U
400
401/* MCC_CONFIG_PWM.CHOP */
402#define TMC6460_PWM_CHOP_CENTERED 7U
403
404/* MCC_CONFIG_PWM.SV_MODE */
405#define TMC6460_PWM_SV_MODE_HARMONIC 1U
406
407/* FOC_PID_TORQUE_FLUX_TARGET fields */
408#define TMC6460_FOC_PID_TORQUE_FLUX_TARGET_FLUX_MASK 0x0000FFFFU
409#define TMC6460_FOC_PID_TORQUE_FLUX_TARGET_FLUX_SHIFT 0
410#define TMC6460_FOC_PID_TORQUE_FLUX_TARGET_TORQUE_MASK 0xFFFF0000U
411#define TMC6460_FOC_PID_TORQUE_FLUX_TARGET_TORQUE_SHIFT 16
412
413/* FOC_PID_TORQUE_FLUX_ACTUAL fields */
414#define TMC6460_FOC_PID_TORQUE_FLUX_ACTUAL_FLUX_MASK 0x0000FFFFU
415#define TMC6460_FOC_PID_TORQUE_FLUX_ACTUAL_FLUX_SHIFT 0
416#define TMC6460_FOC_PID_TORQUE_FLUX_ACTUAL_TORQUE_MASK 0xFFFF0000U
417#define TMC6460_FOC_PID_TORQUE_FLUX_ACTUAL_TORQUE_SHIFT 16
418
419/* FOC_PID_VELOCITY_TARGET field */
420#define TMC6460_FOC_PID_VELOCITY_TARGET_MASK 0xFFFFFFFFU
421#define TMC6460_FOC_PID_VELOCITY_TARGET_SHIFT 0
422
423/* FOC_PID_VELOCITY_ACTUAL field */
424#define TMC6460_FOC_PID_VELOCITY_ACTUAL_MASK 0xFFFFFFFFU
425#define TMC6460_FOC_PID_VELOCITY_ACTUAL_SHIFT 0
426
427/* FOC_PID_POSITION_TARGET field */
428#define TMC6460_FOC_PID_POSITION_TARGET_MASK 0xFFFFFFFFU
429#define TMC6460_FOC_PID_POSITION_TARGET_SHIFT 0
430
431/* FOC_PID_POSITION_ACTUAL field */
432#define TMC6460_FOC_PID_POSITION_ACTUAL_MASK 0xFFFFFFFFU
433#define TMC6460_FOC_PID_POSITION_ACTUAL_SHIFT 0
434
435/* BIQUAD_BIQUAD_EN fields */
436#define TMC6460_BIQUAD_BIQUAD_EN_VELOCITY_EN_MASK 0x00000001U
437#define TMC6460_BIQUAD_BIQUAD_EN_VELOCITY_EN_SHIFT 0
438#define TMC6460_BIQUAD_BIQUAD_EN_TORQUE_EN_MASK 0x00000002U
439#define TMC6460_BIQUAD_BIQUAD_EN_TORQUE_EN_SHIFT 1
440
441/* RAMPER_STATUS fields */
442#define TMC6460_RAMPER_STATUS_V_REACHED_MASK 0x00000800U
443#define TMC6460_RAMPER_STATUS_V_REACHED_SHIFT 11
444#define TMC6460_RAMPER_STATUS_POS_REACHED_MASK 0x00001000U
445#define TMC6460_RAMPER_STATUS_POS_REACHED_SHIFT 12
446#define TMC6460_RAMPER_STATUS_V_ZERO_MASK 0x00002000U
447#define TMC6460_RAMPER_STATUS_V_ZERO_SHIFT 13
448
449/* RAMPER_V_ACTUAL field (28-bit signed) */
450#define TMC6460_RAMPER_V_ACTUAL_MASK 0x0FFFFFFFU
451#define TMC6460_RAMPER_V_ACTUAL_SHIFT 0
452
453/* RAMPER_POSITION field (32-bit signed) */
454#define TMC6460_RAMPER_POSITION_MASK 0xFFFFFFFFU
455#define TMC6460_RAMPER_POSITION_SHIFT 0
456
457/* RAMPER_V_MAX field (27-bit unsigned) */
458#define TMC6460_RAMPER_V_MAX_MASK 0x07FFFFFFU
459#define TMC6460_RAMPER_V_MAX_SHIFT 0
460
461/* RAMPER_V_START field (23-bit unsigned) */
462#define TMC6460_RAMPER_V_START_MASK 0x007FFFFFu
463#define TMC6460_RAMPER_V_START_SHIFT 0
464
465/* RAMPER_V_STOP field (23-bit unsigned) */
466#define TMC6460_RAMPER_V_STOP_MASK 0x007FFFFFu
467#define TMC6460_RAMPER_V_STOP_SHIFT 0
468
469/* RAMPER_A1 field (23-bit unsigned) */
470#define TMC6460_RAMPER_A1_MASK 0x007FFFFFu
471#define TMC6460_RAMPER_A1_SHIFT 0
472
473/* RAMPER_A2 field (23-bit unsigned) */
474#define TMC6460_RAMPER_A2_MASK 0x007FFFFFu
475#define TMC6460_RAMPER_A2_SHIFT 0
476
477/* RAMPER_A_MAX field (23-bit unsigned) */
478#define TMC6460_RAMPER_A_MAX_MASK 0x007FFFFFu
479#define TMC6460_RAMPER_A_MAX_SHIFT 0
480
481/* RAMPER_D1 field (23-bit unsigned) */
482#define TMC6460_RAMPER_D1_MASK 0x007FFFFFu
483#define TMC6460_RAMPER_D1_SHIFT 0
484
485/* RAMPER_D2 field (23-bit unsigned) */
486#define TMC6460_RAMPER_D2_MASK 0x007FFFFFu
487#define TMC6460_RAMPER_D2_SHIFT 0
488
489/* RAMPER_D_MAX field (23-bit unsigned) */
490#define TMC6460_RAMPER_D_MAX_MASK 0x007FFFFFu
491#define TMC6460_RAMPER_D_MAX_SHIFT 0
492
493/* RAMPER_V1 field (27-bit unsigned) */
494#define TMC6460_RAMPER_V1_MASK 0x07FFFFFFu
495#define TMC6460_RAMPER_V1_SHIFT 0
496
497/* RAMPER_V2 field (27-bit unsigned) */
498#define TMC6460_RAMPER_V2_MASK 0x07FFFFFFu
499#define TMC6460_RAMPER_V2_SHIFT 0
500
501/* RAMPER_ACCELERATION field (24-bit signed) */
502#define TMC6460_RAMPER_ACCELERATION_MASK 0x00FFFFFFU
503#define TMC6460_RAMPER_ACCELERATION_SHIFT 0U
504
505/* FEEDBACK_OUTPUT_CONF fields */
506#define TMC6460_FEEDBACK_OUTPUT_CONF_PHI_E_SRC_MASK 0x00030000U
507#define TMC6460_FEEDBACK_OUTPUT_CONF_PHI_E_SRC_SHIFT 16
508#define TMC6460_FEEDBACK_OUTPUT_CONF_POSITION_SRC_MASK 0x00100000U
509#define TMC6460_FEEDBACK_OUTPUT_CONF_POSITION_SRC_SHIFT 20
510#define TMC6460_FEEDBACK_OUTPUT_CONF_VELOCITY_SRC_MASK 0x00200000U
511#define TMC6460_FEEDBACK_OUTPUT_CONF_VELOCITY_SRC_SHIFT 21
512
513/* UART_CONTROL fields */
514#define TMC6460_UART_CONTROL_MANTISSA_LIMIT_MASK 0x00001FFFU
515#define TMC6460_UART_CONTROL_MANTISSA_LIMIT_SHIFT 0
516#define TMC6460_UART_CONTROL_NORMAL_CRC_EN_MASK 0x00100000U
517#define TMC6460_UART_CONTROL_NORMAL_CRC_EN_SHIFT 20
518#define TMC6460_UART_CONTROL_RTMI_CRC_EN_MASK 0x00200000U
519#define TMC6460_UART_CONTROL_RTMI_CRC_EN_SHIFT 21
520#define TMC6460_UART_CONTROL_RTMI_EN_MASK 0x00400000U
521#define TMC6460_UART_CONTROL_RTMI_EN_SHIFT 22
522#define TMC6460_UART_CONTROL_RTMI_SAMPLING_MASK 0xFF000000U
523#define TMC6460_UART_CONTROL_RTMI_SAMPLING_SHIFT 24
524
525/* CHIP_STATUS_FLAGS selected fields */
526#define TMC6460_CHIP_STATUS_FLAGS_SYS_READY_STATE_MASK 0x40000000U
527#define TMC6460_CHIP_STATUS_FLAGS_SYS_READY_STATE_SHIFT 30
528#define TMC6460_CHIP_STATUS_FLAGS_GDRV_ON_STATE_MASK 0x80000000U
529#define TMC6460_CHIP_STATUS_FLAGS_GDRV_ON_STATE_SHIFT 31
530
531/* Convenience Field Descriptor Macro */
532
533#define TMC6460_FIELD(_addr, _mask, _shift, _signed) \
534 ((struct tmc6460_field){ \
535 .mask = (_mask), \
536 .shift = (_shift), \
537 .addr = (_addr), \
538 .is_signed = (_signed), \
539 })
540
542
543/* Register Read/Write API */
544
555int tmc6460_write(const struct device *dev, uint16_t reg_addr, uint32_t reg_val);
556
567int tmc6460_read(const struct device *dev, uint16_t reg_addr, uint32_t *reg_val);
568
582int tmc6460_rtmi_stream_write(const struct device *dev, uint8_t rtmi_index, uint32_t value);
583
596int tmc6460_enable(const struct device *dev);
597
610int tmc6460_disable(const struct device *dev);
611
631int tmc6460_poll_flag(const struct device *dev, uint16_t reg_addr, uint32_t flag_mask,
632 uint32_t poll_interval_ms, uint32_t timeout_ms);
633
634/* Field Access Helpers */
635
645static inline uint32_t tmc6460_field_update(uint32_t reg_val, struct tmc6460_field field,
646 uint32_t field_val)
647{
648 reg_val &= ~field.mask;
649 reg_val |= (field_val << field.shift) & field.mask;
650
651 return reg_val;
652}
653
664static inline int tmc6460_field_write(const struct device *dev, struct tmc6460_field field,
665 uint32_t field_val)
666{
667 uint32_t reg_val;
668 int err;
669
670 err = tmc6460_read(dev, field.addr, &reg_val);
671 if (err != 0) {
672 return err;
673 }
674
675 reg_val = tmc6460_field_update(reg_val, field, field_val);
676
677 return tmc6460_write(dev, field.addr, reg_val);
678}
679
681
682#ifdef __cplusplus
683}
684#endif
685
686#endif /* ZEPHYR_INCLUDE_DRIVERS_MISC_TMC6460_TMC6460_H_ */
static uint32_t tmc6460_field_update(uint32_t reg_val, struct tmc6460_field field, uint32_t field_val)
Update a bitfield within a register value (in memory only).
Definition tmc6460.h:645
int tmc6460_disable(const struct device *dev)
Disable the TMC6460 gate driver.
int tmc6460_poll_flag(const struct device *dev, uint16_t reg_addr, uint32_t flag_mask, uint32_t poll_interval_ms, uint32_t timeout_ms)
Poll a register until the given flag bits are set or a timeout.
int tmc6460_write(const struct device *dev, uint16_t reg_addr, uint32_t reg_val)
Write a value to a TMC6460 register.
int tmc6460_enable(const struct device *dev)
Enable the TMC6460 gate driver.
static int tmc6460_field_write(const struct device *dev, struct tmc6460_field field, uint32_t field_val)
Read-modify-write a bitfield on the device.
Definition tmc6460.h:664
int tmc6460_rtmi_stream_write(const struct device *dev, uint8_t rtmi_index, uint32_t value)
Write a value to an RTMI streamed register slot (UART only).
int tmc6460_read(const struct device *dev, uint16_t reg_addr, uint32_t *reg_val)
Read a value from a TMC6460 register.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
Describes a bitfield within a TMC6460 register.
Definition tmc6460.h:34
bool is_signed
True if the field holds a two's-complement signed value.
Definition tmc6460.h:42
uint32_t mask
Bit mask selecting the field within the register.
Definition tmc6460.h:36
uint8_t shift
Bit position of the field's least significant bit.
Definition tmc6460.h:38
uint16_t addr
16-bit register address containing the field.
Definition tmc6460.h:40
Misc utilities.