HPM SDK
HPMicro Software Development Kit
hpm_vsc_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_VSC_DRV_H
9 #define HPM_VSC_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_vsc_regs.h"
13 
25 typedef enum vsc_phase_mode {
34 typedef enum vsc_data_opr_mode {
51 typedef enum vsc_adc_sel {
54  vsc_sel_adc2 = 3
61 typedef enum vsc_pos_cap_mode {
71 typedef enum vsc_timestamp_sel {
81 typedef enum vsc_irq_mask {
96 
100 typedef struct {
102  uint8_t adc_chn;
103  uint32_t adc_offset;
105 
109 typedef struct {
115 
119 typedef struct {
121  uint8_t a_data_cnt;
122  uint8_t b_data_cnt;
123  uint8_t c_data_cnt;
131  uint16_t pole_pairs;
132 } vsc_config_t;
133 
134 
135 #ifdef __cplusplus
136 extern "C" {
137 #endif
138 
145 static inline void vsc_set_enable(VSC_Type *vsc, bool enable)
146 {
147  if (enable) {
149  } else {
151  }
152 }
153 
161 {
166  } else {
168  }
169 }
170 
178 static inline void vsc_config_adc_timestamp(VSC_Type *vsc, vsc_timestamp_sel_t select, uint8_t num)
179 {
182 }
183 
192 static inline void vsc_set_irq_enable(VSC_Type *vsc, uint32_t irq_mask, bool enable)
193 {
194  if (enable) {
195  vsc->IRQ_ENABLE |= irq_mask;
196  } else {
197  vsc->IRQ_ENABLE &= ~irq_mask;
198  }
199 }
200 
207 static inline uint32_t vsc_get_irq_status(VSC_Type *vsc)
208 {
209  return vsc->IRQ_STATUS;
210 }
211 
217 static inline void vsc_clear_irq_status(VSC_Type *vsc, uint32_t irq_mask)
218 {
219  vsc->IRQ_STATUS = irq_mask;
220 }
221 
229 static inline bool vsc_get_irq_flag(VSC_Type *vsc, uint32_t irq_mask)
230 {
231  return ((vsc->IRQ_STATUS & irq_mask) == irq_mask) ? true : false;
232 }
233 
239 static inline void vsc_set_adc_wait_cycle(VSC_Type *vsc, uint32_t wait_cycle)
240 {
242 }
243 
249 static inline void vsc_set_pos_wait_cycle(VSC_Type *vsc, uint32_t wait_cycle)
250 {
252 }
253 
259 static inline void vsc_set_adc_tolerate(VSC_Type *vsc, uint32_t tolerate)
260 {
262 }
263 
269 static inline void vsc_set_pos_pole_pairs(VSC_Type *vsc, uint32_t pole_pairs)
270 {
272 }
273 
278 static inline void vsc_set_sw_trig_in(VSC_Type *vsc)
279 {
281 }
282 
289 static inline int32_t vsc_get_d_axis_value(VSC_Type *vsc, bool positive_seq)
290 {
291  if (positive_seq) {
292  return (int32_t)vsc->ID_POSEDGE;
293  } else {
294  return (int32_t)vsc->ID_NEGEDGE;
295  }
296 }
297 
304 static inline int32_t vsc_get_q_axis_value(VSC_Type *vsc, bool positive_seq)
305 {
306  if (positive_seq) {
307  return (int32_t)vsc->IQ_POSEDGE;
308  } else {
309  return (int32_t)vsc->IQ_NEGEDGE;
310  }
311 }
312 
319 static inline int32_t vsc_get_alpha_axis_value(VSC_Type *vsc, bool positive_seq)
320 {
321  if (positive_seq) {
322  return (int32_t)vsc->ALPHA_POSEDGE;
323  } else {
324  return (int32_t)vsc->ALPHA_NEGEDGE;
325  }
326 }
327 
334 static inline int32_t vsc_get_beta_axis_value(VSC_Type *vsc, bool positive_seq)
335 {
336  if (positive_seq) {
337  return (int32_t)vsc->BETA_POSEDGE;
338  } else {
339  if (vsc->BETA_NEGEDGE == 0x80000000) {
340  return 0x7FFFFFFF;
341  } else {
342  return (int32_t)vsc->BETA_NEGEDGE;
343  }
344  }
345 }
346 
352 static inline uint32_t vsc_get_adc_timestamp(VSC_Type *vsc)
353 {
354  return vsc->TIMESTAMP_LOCKED;
355 }
356 
363 void vsc_get_default_config(VSC_Type *vsc, vsc_config_t *config);
364 
371 void vsc_config_init(VSC_Type *vsc, vsc_config_t *config);
372 
381 void vsc_sw_inject_abc_value(VSC_Type *vsc, int32_t value_a, int32_t value_b, int32_t value_c);
382 
389 void vsc_sw_inject_pos_value(VSC_Type *vsc, uint32_t pos);
390 
391 
392 #ifdef __cplusplus
393 }
394 #endif
398 #endif /* HPM_VSC_DRV_H */
#define BIT4_MASK
Definition: hpm_common.h:90
#define BIT8_MASK
Definition: hpm_common.h:94
#define BIT2_MASK
Definition: hpm_common.h:88
#define BIT5_MASK
Definition: hpm_common.h:91
#define BIT1_MASK
Definition: hpm_common.h:87
#define BIT7_MASK
Definition: hpm_common.h:93
#define BIT10_MASK
Definition: hpm_common.h:96
#define BIT12_MASK
Definition: hpm_common.h:98
#define BIT3_MASK
Definition: hpm_common.h:89
#define BIT6_MASK
Definition: hpm_common.h:92
#define BIT11_MASK
Definition: hpm_common.h:97
#define BIT0_MASK
Definition: hpm_common.h:86
#define BIT9_MASK
Definition: hpm_common.h:95
enum vsc_irq_mask vsc_irq_mask_t
vsc irq mask bit
static void vsc_set_pos_wait_cycle(VSC_Type *vsc, uint32_t wait_cycle)
vsc set position wait cycles
Definition: hpm_vsc_drv.h:249
void vsc_sw_inject_pos_value(VSC_Type *vsc, uint32_t pos)
vsc software inject position value
Definition: hpm_vsc_drv.c:91
static void vsc_set_adc_tolerate(VSC_Type *vsc, uint32_t tolerate)
vsc set abc phase value tolerate
Definition: hpm_vsc_drv.h:259
static void vsc_set_pos_pole_pairs(VSC_Type *vsc, uint32_t pole_pairs)
vsc set position pole pairs
Definition: hpm_vsc_drv.h:269
static void vsc_set_irq_enable(VSC_Type *vsc, uint32_t irq_mask, bool enable)
vsc set irq enable or disable
Definition: hpm_vsc_drv.h:192
static void vsc_config_pos_capture_mode(VSC_Type *vsc, vsc_pos_cap_mode_t mode)
vsc config position capture mode
Definition: hpm_vsc_drv.h:160
vsc_timestamp_sel
vsc select adc timestamp
Definition: hpm_vsc_drv.h:71
static uint32_t vsc_get_irq_status(VSC_Type *vsc)
vsc get irq status
Definition: hpm_vsc_drv.h:207
vsc_irq_mask
vsc irq mask bit
Definition: hpm_vsc_drv.h:81
static uint32_t vsc_get_adc_timestamp(VSC_Type *vsc)
vsc get adc timestamp value
Definition: hpm_vsc_drv.h:352
static int32_t vsc_get_beta_axis_value(VSC_Type *vsc, bool positive_seq)
vsc get beta-axis value
Definition: hpm_vsc_drv.h:334
void vsc_get_default_config(VSC_Type *vsc, vsc_config_t *config)
vsc get default config
Definition: hpm_vsc_drv.c:10
enum vsc_data_opr_mode vsc_data_opr_mode_t
vsc data operation mode
enum vsc_timestamp_sel vsc_timestamp_sel_t
vsc select adc timestamp
vsc_data_opr_mode
vsc data operation mode
Definition: hpm_vsc_drv.h:34
static void vsc_set_enable(VSC_Type *vsc, bool enable)
vsc enable or disable
Definition: hpm_vsc_drv.h:145
vsc_adc_sel
vsc select adc instance
Definition: hpm_vsc_drv.h:51
static int32_t vsc_get_q_axis_value(VSC_Type *vsc, bool positive_seq)
vsc get q-axis value
Definition: hpm_vsc_drv.h:304
static void vsc_set_sw_trig_in(VSC_Type *vsc)
vsc set software trigger in
Definition: hpm_vsc_drv.h:278
vsc_pos_cap_mode
vsc position capture mode
Definition: hpm_vsc_drv.h:61
enum vsc_adc_sel vsc_adc_sel_t
vsc select adc instance
enum vsc_pos_cap_mode vsc_pos_cap_mode_t
vsc position capture mode
static int32_t vsc_get_d_axis_value(VSC_Type *vsc, bool positive_seq)
vsc get d-axis value
Definition: hpm_vsc_drv.h:289
static int32_t vsc_get_alpha_axis_value(VSC_Type *vsc, bool positive_seq)
vsc get alpha-axis value
Definition: hpm_vsc_drv.h:319
void vsc_sw_inject_abc_value(VSC_Type *vsc, int32_t value_a, int32_t value_b, int32_t value_c)
vsc software inject phase a/b/c value
Definition: hpm_vsc_drv.c:82
static void vsc_set_adc_wait_cycle(VSC_Type *vsc, uint32_t wait_cycle)
vsc set adc wait cycles
Definition: hpm_vsc_drv.h:239
void vsc_config_init(VSC_Type *vsc, vsc_config_t *config)
vsc config initialization
Definition: hpm_vsc_drv.c:45
static void vsc_config_adc_timestamp(VSC_Type *vsc, vsc_timestamp_sel_t select, uint8_t num)
vsc config adc timestamp
Definition: hpm_vsc_drv.h:178
enum vsc_phase_mode vsc_phase_mode_t
vsc phase mode
static bool vsc_get_irq_flag(VSC_Type *vsc, uint32_t irq_mask)
vsc check irq request flag
Definition: hpm_vsc_drv.h:229
vsc_phase_mode
vsc phase mode
Definition: hpm_vsc_drv.h:25
static void vsc_clear_irq_status(VSC_Type *vsc, uint32_t irq_mask)
vsc clear irq status
Definition: hpm_vsc_drv.h:217
@ vsc_timestamp_sel_value_b
Definition: hpm_vsc_drv.h:73
@ vsc_timestamp_sel_value_a
Definition: hpm_vsc_drv.h:72
@ vsc_timestamp_sel_value_c
Definition: hpm_vsc_drv.h:74
@ vsc_irq_convert_done
Definition: hpm_vsc_drv.h:82
@ vsc_irq_convert_conflict
Definition: hpm_vsc_drv.h:94
@ vsc_irq_adc0_timeout
Definition: hpm_vsc_drv.h:93
@ vsc_irq_adc2_cap_not_enough
Definition: hpm_vsc_drv.h:87
@ vsc_irq_abc_over_tolerate
Definition: hpm_vsc_drv.h:83
@ vsc_irq_a_overflow
Definition: hpm_vsc_drv.h:86
@ vsc_irq_adc1_timeout
Definition: hpm_vsc_drv.h:92
@ vsc_irq_adc1_cap_not_enough
Definition: hpm_vsc_drv.h:88
@ vsc_irq_pos_timeout
Definition: hpm_vsc_drv.h:90
@ vsc_irq_c_overflow
Definition: hpm_vsc_drv.h:84
@ vsc_irq_b_overflow
Definition: hpm_vsc_drv.h:85
@ vsc_irq_adc2_timeout
Definition: hpm_vsc_drv.h:91
@ vsc_irq_adc0_cap_not_enough
Definition: hpm_vsc_drv.h:89
@ vsc_data_opr_minus_div_2
Definition: hpm_vsc_drv.h:42
@ vsc_data_opr_plus_div_2
Definition: hpm_vsc_drv.h:37
@ vsc_data_opr_plus_div_3
Definition: hpm_vsc_drv.h:38
@ vsc_data_opr_minus_div_4
Definition: hpm_vsc_drv.h:44
@ vsc_data_opr_minus_mul_2
Definition: hpm_vsc_drv.h:41
@ vsc_data_opr_minus_div_3
Definition: hpm_vsc_drv.h:43
@ vsc_data_opr_minus_mul_1
Definition: hpm_vsc_drv.h:40
@ vsc_data_opr_plus_mul_2
Definition: hpm_vsc_drv.h:36
@ vsc_data_opr_plus_div_4
Definition: hpm_vsc_drv.h:39
@ vsc_data_opr_plus_mul_1
Definition: hpm_vsc_drv.h:35
@ vsc_sel_adc1
Definition: hpm_vsc_drv.h:53
@ vsc_sel_adc2
Definition: hpm_vsc_drv.h:54
@ vsc_sel_adc0
Definition: hpm_vsc_drv.h:52
@ vsc_pos_use_first_data_after_adc_sample_start
Definition: hpm_vsc_drv.h:63
@ vsc_pos_use_last_data_when_adc_sample_finish
Definition: hpm_vsc_drv.h:62
@ vsc_pos_use_last_data_before_adc_sample_start
Definition: hpm_vsc_drv.h:64
@ vsc_abc_phase
Definition: hpm_vsc_drv.h:26
@ vsc_ab_phase
Definition: hpm_vsc_drv.h:27
#define VSC_TIMELOCK_ADC_TIMESTAMP_SEL_SET(x)
Definition: hpm_vsc_regs.h:556
#define VSC_TIMELOCK_VALUE_COUNTER_SEL_MASK
Definition: hpm_vsc_regs.h:564
#define VSC_POS_WAIT_CYCLE_POS_WAIT_CYCLE_SET(x)
Definition: hpm_vsc_regs.h:599
#define VSC_TIMELOCK_POSITION_CAPTURE_MODE_MASK
Definition: hpm_vsc_regs.h:540
#define VSC_ADC_WAIT_CYCLE_ADC_WAIT_CYCLE_SET(x)
Definition: hpm_vsc_regs.h:588
#define VSC_TRIGGER_SW_TRIGGER_SW_MASK
Definition: hpm_vsc_regs.h:525
#define VSC_ABC_MODE_POSTION_USE_LAST_LOCKED_MASK
Definition: hpm_vsc_regs.h:67
#define VSC_TIMELOCK_VALUE_COUNTER_SEL_SET(x)
Definition: hpm_vsc_regs.h:566
#define VSC_TIMELOCK_POSITION_CAPTURE_MODE_SET(x)
Definition: hpm_vsc_regs.h:542
#define VSC_ABC_MODE_ENABLE_VSC_MASK
Definition: hpm_vsc_regs.h:151
#define VSC_POS_POLE_POS_POLE_MASK
Definition: hpm_vsc_regs.h:643
#define VSC_ADC_PHASE_TOLERATE_ADC_PHASE_TOLERATE_SET(x)
Definition: hpm_vsc_regs.h:634
#define VSC_POS_POLE_POS_POLE_SET(x)
Definition: hpm_vsc_regs.h:645
#define VSC_TIMELOCK_ADC_TIMESTAMP_SEL_MASK
Definition: hpm_vsc_regs.h:554
Definition: hpm_vsc_regs.h:12
__R uint32_t IQ_NEGEDGE
Definition: hpm_vsc_regs.h:41
__RW uint32_t ABC_MODE
Definition: hpm_vsc_regs.h:13
__R uint32_t IQ_POSEDGE
Definition: hpm_vsc_regs.h:39
__R uint32_t TIMESTAMP_LOCKED
Definition: hpm_vsc_regs.h:46
__RW uint32_t POS_WAIT_CYCLE
Definition: hpm_vsc_regs.h:33
__R uint32_t ALPHA_POSEDGE
Definition: hpm_vsc_regs.h:42
__R uint32_t ID_POSEDGE
Definition: hpm_vsc_regs.h:38
__RW uint32_t IRQ_ENABLE
Definition: hpm_vsc_regs.h:34
__R uint32_t ID_NEGEDGE
Definition: hpm_vsc_regs.h:40
__R uint32_t BETA_NEGEDGE
Definition: hpm_vsc_regs.h:45
__RW uint32_t TIMELOCK
Definition: hpm_vsc_regs.h:30
__R uint32_t ALPHA_NEGEDGE
Definition: hpm_vsc_regs.h:44
__RW uint32_t ADC_WAIT_CYCLE
Definition: hpm_vsc_regs.h:32
__RW uint32_t ADC_PHASE_TOLERATE
Definition: hpm_vsc_regs.h:35
__W uint32_t TRIGGER_SW
Definition: hpm_vsc_regs.h:29
__R uint32_t BETA_POSEDGE
Definition: hpm_vsc_regs.h:43
__RW uint32_t IRQ_STATUS
Definition: hpm_vsc_regs.h:24
__RW uint32_t POS_POLE
Definition: hpm_vsc_regs.h:36
adc config structure
Definition: hpm_vsc_drv.h:100
uint32_t adc_offset
Definition: hpm_vsc_drv.h:103
uint8_t adc_chn
Definition: hpm_vsc_drv.h:102
vsc_adc_sel_t adc_sel
Definition: hpm_vsc_drv.h:101
vsc config structure
Definition: hpm_vsc_drv.h:119
vsc_adc_config_t a_adc_config
Definition: hpm_vsc_drv.h:127
uint8_t a_data_cnt
Definition: hpm_vsc_drv.h:121
vsc_data_opr_config_t b_data_opr_config
Definition: hpm_vsc_drv.h:125
uint16_t pole_pairs
Definition: hpm_vsc_drv.h:131
vsc_adc_config_t b_adc_config
Definition: hpm_vsc_drv.h:128
vsc_phase_mode_t phase_mode
Definition: hpm_vsc_drv.h:120
vsc_data_opr_config_t a_data_opr_config
Definition: hpm_vsc_drv.h:124
vsc_pos_cap_mode_t pos_cap_mode
Definition: hpm_vsc_drv.h:130
vsc_data_opr_config_t c_data_opr_config
Definition: hpm_vsc_drv.h:126
uint8_t b_data_cnt
Definition: hpm_vsc_drv.h:122
vsc_adc_config_t c_adc_config
Definition: hpm_vsc_drv.h:129
uint8_t c_data_cnt
Definition: hpm_vsc_drv.h:123
vsc config structure
Definition: hpm_vsc_drv.h:109
vsc_data_opr_mode_t opr_3
Definition: hpm_vsc_drv.h:113
vsc_data_opr_mode_t opr_0
Definition: hpm_vsc_drv.h:110
vsc_data_opr_mode_t opr_1
Definition: hpm_vsc_drv.h:111
vsc_data_opr_mode_t opr_2
Definition: hpm_vsc_drv.h:112