BLE5.2 1.0
开发文档说明
xc_drv_pwm.c
浏览该文件的文档.
1
24/*------------------------------------------------------------------------------------
25 INCLUDE HEADE FILES
26 -------------------------------------------------------------------------------------*/
27#include "xc_drv_pwm.h"
28#include "xc_drv_gpio.h"
29
30/*------------------------------------------------------------------------------------
31 Macros
32 -------------------------------------------------------------------------------------*/
33
34/*------------------------------------------------------------------------------------
35 Global Variables
36 -------------------------------------------------------------------------------------*/
37
38/*------------------------------------------------------------------------------------
39 TypeDef
40 -------------------------------------------------------------------------------------*/
41typedef enum
42{
46
51};
52
53/*------------------------------------------------------------------------------------
54 Local Variables
55-------------------------------------------------------------------------------------*/
57
58static uint16_t pwm_freq_to_period(PWM_InitCfg_t *pwm_cfg, PWM_ClkDiv_TypeDef div_clk);
59
60double period;
61/*------------------------------------------------------------------------------------
62 Func Prototype
63 -------------------------------------------------------------------------------------*/
64
65/*------------------------------------------------------------------------------------
66 Functions
67 -------------------------------------------------------------------------------------*/
68
69void xc_pwm_init(uint8_t reg_idx, PWM_InitCfg_t *init_cfg)
70{
72
73 cpr_ctlapbclken_grctl__pwm_pclk_en__setf(ENABLE);
74 cpr_rstctl_ctlapb_sw__pwm_rstn__setf(RSTCTL_ENABLE);
75 cpr_rstctl_ctlapb_sw__pwm_rstn__setf(RSTCTL_DISABLE);
76
77 cpr_pwm_clk_ctl__pwm_clk_en__setf(ENABLE);
78 cpr_pwm_clk_ctl__pwm_clksel__setf(init_cfg->SrcClk);
79 cpr_pwm_clk_ctl__pwm_clk0_div__setf(init_cfg->DivClk);
80 cpr_pwm_clk_ctl__pwm_clk1_div__setf(init_cfg->DivClk);
81
83 }
84
85 pwm_pin_set(reg_idx, init_cfg);
86
87 pwm_en__en__setf(reg_idx, DISABLE);
88
89 pwm_en__en_sel__setf(reg_idx, init_cfg->SrcEnable);
90
91 xc_pwm_dutycycle_set(reg_idx, init_cfg->DutyCycleAcc, init_cfg->DutyCycle);
92
93 pwm_period__period__setf(reg_idx, pwm_freq_to_period(init_cfg, PWM_CLK_DIV0));
94
95 pwm_compen__pwmcompen__setf(reg_idx, init_cfg->InvertEnable);
96
97 pwm_comptime__comptime__setf(reg_idx, init_cfg->InvertDelay);
98}
99
100void xc_pwm_start(uint8_t reg_idx) { pwm_en__en__setf(reg_idx, PWM_EN_ENABLE); }
101
102void xc_pwm_stop(uint8_t reg_idx) { pwm_en__en__setf(reg_idx, PWM_EN_DISABLE); }
103
104void pwm_src_enable_set(uint8_t reg_idx, uint8_t src_enable) { pwm_en__en_sel__setf(reg_idx, src_enable); }
105
106void xc_pwm_start_all(void) { pwm_en__pwm_en_all__setf(PWM0_IDX, PWM_EN_ALL_ENABLE); }
107
108void xc_pwm_stop_all(void) { pwm_en__pwm_en_all__setf(PWM0_IDX, PWM_EN_ALL_DISABLE); }
109
110void pwm_pin_set(uint8_t reg_idx, PWM_InitCfg_t *pwm_cfg)
111{
112 GPIO_InitCfg_t gpio_cfg;
113 if(pwm_cfg->OutputPin==GPIO_11||pwm_cfg->OutputPin==GPIO_12||pwm_cfg->OutputPin==GPIO_13){
114 gpio_cfg.Mux = GPIO_Mux1;
115 }else
116 {
117 gpio_cfg.Mux = GPIO_Mux0;
118 }
119 gpio_cfg.Dir = GPIO_DIR_OUTPUT;
120 gpio_cfg.Pull = GPIO_PULLDOWN;
121 gpio_cfg.Int = NOT_INT;
122 gpio_cfg.Pin = pwm_cfg->OutputPin;
123
124 if (reg_idx == PWM0_IDX || reg_idx == PWM1_IDX) {
125 gpio_cfg.FunSel = (reg_idx == PWM0_IDX) ? PWM0 : PWM1;
126 xc_gpio_init(&gpio_cfg);
127
128 if (pwm_cfg->InvertEnable) {
129 gpio_cfg.FunSel = (reg_idx == PWM0_IDX) ? PWM0_INV : PWM1_INV;
130
131 gpio_cfg.Pin = pwm_cfg->OutputInvertPin;
132 xc_gpio_init(&gpio_cfg);
133 }
134 } else if (reg_idx == PWM2_IDX) {
135 gpio_cfg.Mux = GPIO_Mux3;
136 if (pwm_cfg->OutputPin == GPIO_12) {
137 xc_gpio_init(&gpio_cfg);
138 }
139 } else if (reg_idx == PWM3_IDX) {
140 gpio_cfg.Mux = GPIO_Mux3;
141 if (pwm_cfg->OutputPin == GPIO_13) {
142 xc_gpio_init(&gpio_cfg);
143 }
144 } else if (reg_idx == PWM4_IDX) {
145 gpio_cfg.Mux = GPIO_Mux2;
146 if (pwm_cfg->OutputPin == GPIO_0) {
147 xc_gpio_init(&gpio_cfg);
148 }
149 } else if (reg_idx == PWM5_IDX) {
150 gpio_cfg.Mux = GPIO_Mux2;
151 if (pwm_cfg->OutputPin == GPIO_1) {
152 xc_gpio_init(&gpio_cfg);
153 }
154 }
155}
156
157static uint16_t pwm_freq_to_period(PWM_InitCfg_t *pwm_cfg, PWM_ClkDiv_TypeDef div_clk)
158{
159 uint32_t pwm_clk;
160
161 switch (pwm_cfg->SrcClk) {
162 case PWM_CLK_SRC_32M_DIV: {
163 pwm_clk = xc_clock_hfclk_in_get() / PWM_CLK_DIV_CAL(div_clk);
164 } break;
165
166 case PWM_CLK_SRC_32K_DIV: {
167 pwm_clk = xc_clock_lfclk_in_get() / PWM_CLK_DIV_CAL(div_clk);
168 } break;
169
170 case PWM_CLK_SRC_32K: {
171 pwm_clk = CLOCK_LFCLK_IN_32K;
172 } break;
173
174 default:
175 break;
176 }
177
178 uint32_t freq_max = PWM_FREQ_MAX_CAL(pwm_clk, pwm_cfg->DutyCycleAcc);
179
180 uint32_t freq = PWM_FREQ_CAL(pwm_clk, pwm_cfg->DutyCycleAcc, pwm_cfg->Period);
181
182 if (freq > freq_max) {
183 DEBUG("%s,line=%d,set freq=%d,The maximum configurable frequency %d hz "
184 "has been exceeded.\n",
185 __func__, __LINE__, freq, freq_max);
186 } else {
187 DEBUG("%s,line=%d,set freq=%d,maximum configurable frequency %d hz\n", __func__, __LINE__, freq, freq_max);
188 }
189
190 return pwm_cfg->Period;
191}
192
193void xc_pwm_dutycycle_set(uint8_t reg_idx, uint32_t dutycycle_acc, uint32_t dutycycle)
194{
195 pwm_en__mode__setf(reg_idx, PWM_EN_MODE_ACC_65535);
196
197 pwm_ocpy__ocpy_ratio_config__setf(reg_idx, (dutycycle_acc - 1));
198
199 pwm_ocpy__ocpy_ratio__setf(reg_idx, dutycycle_acc - dutycycle);
200
201 pwm_up__update__setf(reg_idx, PWM_UP_UPDATE_ENABLE);
202}
203
204void xc_pwm_lowpower_enable(uint8_t reg_idx) { pwm_en__sleep_en__setf(reg_idx, PWM_EN_SLEEP_EN_ENABLE); }
205
206void xc_pwm_lowpower_disable(uint8_t reg_idx) { pwm_en__sleep_en__setf(reg_idx, PWM_EN_SLEEP_EN_DISABLE); }
207
208void xc_pwm_lowpower_countdirection_set(uint8_t reg_idx, uint32_t direction)
209{
210 pwm_en__sleep_incr__setf(reg_idx, direction);
211}
212
213void xc_pwm_brake_enable(uint8_t reg_idx)
214{
215 uint32_t val;
216
217 val = pwm_break_ctl__pwm_brk_enable__getf(PWM0_IDX);
218
219 if (reg_idx == PWM0_IDX || reg_idx == PWM1_IDX) {
220 val &= ~(PWM_BRK0_ENABLE_ENABLE);
221 val |= (PWM_BRK0_ENABLE_ENABLE);
222 } else if (reg_idx == PWM2_IDX || reg_idx == PWM3_IDX) {
223 val &= ~(PWM_BRK1_ENABLE_ENABLE);
224 val |= (PWM_BRK1_ENABLE_ENABLE);
225 } else if (reg_idx == PWM4_IDX || reg_idx == PWM5_IDX) {
226 val &= ~(PWM_BRK2_ENABLE_ENABLE);
227 val |= (PWM_BRK2_ENABLE_ENABLE);
228 }
229
230 pwm_break_ctl__pwm_brk_enable__setf(PWM0_IDX, val);
231}
232
233void xc_pwm_brake_disable(uint8_t reg_idx)
234{
235 uint32_t val;
236
237 val = pwm_break_ctl__pwm_brk_enable__getf(PWM0_IDX);
238
239 if (reg_idx == PWM0_IDX || reg_idx == PWM1_IDX) {
240 val &= ~(PWM_BRK0_ENABLE_ENABLE);
241 } else if (reg_idx == PWM2_IDX || reg_idx == PWM3_IDX) {
242 val &= ~(PWM_BRK1_ENABLE_ENABLE);
243 } else if (reg_idx == PWM4_IDX || reg_idx == PWM5_IDX) {
244 val &= ~(PWM_BRK2_ENABLE_ENABLE);
245 }
246
247 pwm_break_ctl__pwm_brk_enable__setf(PWM0_IDX, val);
248}
249
250uint8_t xc_pwm_brake_signal_valid_get(void) { return pwm_break_ctl__pwm_brk_sync__getf(PWM0_IDX); }
251
252void xc_pwm_brake_signal_mask_set(uint32_t mask) { pwm_break_ctl__pwm_brk_mask__setf(PWM0_IDX, mask); }
253
254void xc_pwm_brake_signal_trigger_level_set(uint32_t level) { pwm_break_ctl__pwm_brk_inv__setf(PWM0_IDX, level); }
255
256void xc_pwm_brake_recovery_mode_set(uint32_t mode) { pwm_break_ctl__brk_mode__setf(PWM0_IDX, mode); }
257
258uint8_t xc_pwm_brake_recovery_mode_get(void) { return (pwm_break_ctl__brk_mode__getf(PWM0_IDX)); }
259
260void xc_pwm_brake_debounce_set(uint32_t debounce, uint32_t step)
261{
262 pwm_break_ctl__brk_dbc_en__setf(PWM0_IDX, debounce);
263 pwm_break_ctl__brk_dbc_step__setf(PWM0_IDX, step);
264}
265
266void xc_pwm_brake_clear() { pwm_break_ctl__clear__setf(PWM0_IDX, PWM_BRK_BRK_CLEAR_EXIT); }
267
268void xc_pwm_capture_enable(uint8_t ch) { cap_tim_ctl__capture_enable__setf(ch, PWM_CAPTURE_ENABLE); }
269
270void xc_pwm_capture_disable(uint8_t ch) { cap_tim_ctl__capture_enable__setf(ch, PWM_CAPTURE_DISABLE); }
271
273{
274 if (ch == 0) {
275 pwm_cap_tim_int_en__capture_upd_0_en__setf(ENABLE);
276 } else if (ch == 1) {
277 pwm_cap_tim_int_en__capture_upd_1_en__setf(ENABLE);
278 } else if (ch == 2) {
279 pwm_cap_tim_int_en__capture_upd_2_en__setf(ENABLE);
280 }
281}
282
284{
285 if (ch == PWM_IC_CH0) {
286 pwm_cap_tim_int_en__capture_upd_0_en__setf(DISABLE);
287 } else if (ch == PWM_IC_CH1) {
288 pwm_cap_tim_int_en__capture_upd_1_en__setf(DISABLE);
289 } else if (ch == PWM_IC_CH2) {
290 pwm_cap_tim_int_en__capture_upd_2_en__setf(DISABLE);
291 }
292}
293
294void xc_pwm_capture_signal_set(uint8_t ch, uint32_t signal) { cap_tim_ctl__capture_sig_sel__setf(ch, signal); }
295
296void xc_pwm_capture_debounce_enable(uint8_t ch, uint32_t step)
297{
298 cap_tim_ctl__dbc_en__setf(ch, PWM_CAPTURE_DBC_ENABLE);
299
300 cap_tim_ctl__dbc_step__setf(ch, step);
301}
302
303void xc_pwm_capture_debounce_disable(uint8_t ch, uint32_t step)
304{
305 cap_tim_ctl__dbc_en__setf(ch, PWM_CAPTURE_DBC_DISABLE);
306
307 cap_tim_ctl__dbc_step__setf(ch, step);
308}
309
310void xc_pwm_capture_edge_set(uint8_t ch, uint32_t edge) { cap_tim_ctl__capture_mode__setf(ch, edge); }
311
312void xc_pwm_capture_psc_set(uint8_t ch, uint32_t psc) { cap_tim_ctl__capture_psc__setf(ch, psc); }
313
315{
316 cap_tim_ctl__common_cnt_enable__setf(ch, PWM_CAPTURE_COMMON_CNT_ENABLE);
317}
318
320{
321 cap_tim_ctl__common_cnt_enable__setf(ch, PWM_CAPTURE_COMMON_CNT_DISABLE);
322}
323
324uint16_t xc_pwm_capture_val_get(uint8_t ch) { return cap_tim_val__capture_value__getf(ch); }
325
326/*
327 *-----------------------------------------------------------------------------------------------
328 * PWM Timer
329 *-----------------------------------------------------------------------------------------------
330 */
339void xc_pwm_timer_init(uint8_t reg_idx, PWM_Timer_InitCfg_t *init_cfg)
340{
341 if (reg_idx > PWM_TIMER5_IDX)
342 return;
343
345 cpr_ctlapbclken_grctl__pwm_pclk_en__setf(ENABLE);
346 cpr_rstctl_ctlapb_sw__pwm_rstn__setf(RSTCTL_ENABLE);
347 cpr_rstctl_ctlapb_sw__pwm_rstn__setf(RSTCTL_DISABLE);
348
349 cpr_pwm_clk_ctl__pwm_clk_en__setf(ENABLE);
350 cpr_pwm_clk_ctl__pwm_clksel__setf(init_cfg->src_clk);
351 cpr_pwm_clk_ctl__pwm_clk0_div__setf(init_cfg->clk_div);
352 cpr_pwm_clk_ctl__pwm_clk1_div__setf(init_cfg->clk_div);
353
355 }
356
357 uint32_t ctl_reg = (init_cfg->timer_mode << TIMER_MODE_POS) | (init_cfg->timer_int_mask_en << TIMER_INT_MASK_POS) |
358 (init_cfg->timer_pwm_en << TIMER_PWM_POS) |
359 (init_cfg->timer_0to100_pwm_en << TIMER_ON10OPWM_EN_POS);
360
361 pwm_timer_controlreg_set(reg_idx, ctl_reg);
362}
363
364void xc_pwm_timer_deinit(uint8_t reg_idx)
365{
367 cpr_ctlapbclken_grctl__pwm_pclk_en__setf(DISABLE);
368}
369
378void xc_pwm_timer_set_freq(uint8_t reg_idx, uint32_t freq) { period = xc_clock_hfclk_in_get() / 2 / freq; }
379
380void xc_pwm_timer_set_dutycycle(uint8_t reg_idx, double dutycycle)
381{
382 uint16_t high_cnt = ((uint32_t)(period * dutycycle) / 100);
383 uint16_t low_cnt = (uint32_t)(period - high_cnt);
384
385 pwm_timer_loadcount__timer_lc__setf(reg_idx, low_cnt);
386 pwm_timer_loadcount2__timer_lc2__setf(reg_idx, high_cnt);
387}
388
389void xc_pwm_timer_set_high_cnt(uint8_t reg_idx, uint16_t high_cnt)
390{
391 pwm_timer_loadcount2__timer_lc2__setf(reg_idx, high_cnt);
392}
393
394void xc_pwm_timer_set_low_cnt(uint8_t reg_idx, uint16_t low_cnt)
395{
396 pwm_timer_loadcount__timer_lc__setf(reg_idx, low_cnt);
397}
406void xc_pwm_timer_start(uint8_t reg_idx) { pwm_timer_controlreg__timer_en__setf(reg_idx, ENABLE); }
407
408void xc_pwm_timer_stop(uint8_t reg_idx) { pwm_timer_controlreg__timer_en__setf(reg_idx, DISABLE); }
409
410/*-----------------------------------------------------------------------------------------------*/
411
412void PWM_Handler(void)
413{
414 uint32_t cap_tim_int;
415
416 cap_tim_int = pwm_cap_tim_int_get();
417
418 pwm_cap_tim_int_set(cap_tim_int); // clear inter
419
420 if ((cap_tim_int & PWM_CAPTURE_UPD0_EN_ENABLE) == PWM_CAPTURE_UPD0_EN_ENABLE) {
422 }
423 if ((cap_tim_int & PWM_CAPTURE_UPD1_EN_ENABLE) == PWM_CAPTURE_UPD1_EN_ENABLE) {
425 }
426 if ((cap_tim_int & PWM_CAPTURE_UPD2_EN_ENABLE) == PWM_CAPTURE_UPD2_EN_ENABLE) {
428 }
429}
430
431__WEAK uint8_t pwm_capture_ch0_callback(void *context) { return 0; }
432
433__WEAK uint8_t pwm_capture_ch1_callback(void *context) { return 0; }
434
435__WEAK uint8_t pwm_capture_ch2_callback(void *context) { return 0; }
GPIO_DIR_TypeDef Dir
GPIO_FUN_SEL_TypeDef FunSel
GPIO_PULL_TypeDef Pull
GPIO_MUX_TypeDef Mux
GPIO_INT_TypeDef Int
uint8_t SrcEnable
Definition xc_drv_pwm.h:245
uint8_t InvertDelay
Definition xc_drv_pwm.h:250
PWM_ClkSrc_TypeDef SrcClk
Definition xc_drv_pwm.h:242
uint8_t DivClk
Definition xc_drv_pwm.h:247
uint32_t DutyCycle
Definition xc_drv_pwm.h:244
uint32_t DutyCycleAcc
Definition xc_drv_pwm.h:243
uint8_t OutputInvertPin
Definition xc_drv_pwm.h:249
uint8_t OutputPin
Definition xc_drv_pwm.h:248
uint8_t Period
Definition xc_drv_pwm.h:246
uint8_t timer_0to100_pwm_en
Definition xc_drv_pwm.h:259
PWM_ClkDiv_TypeDef clk_div
Definition xc_drv_pwm.h:258
PWM_ClkSrc_TypeDef src_clk
Definition xc_drv_pwm.h:257
uint8_t timer_int_mask_en
Definition xc_drv_pwm.h:261
CLOCK_LFCLK_In_Typedef xc_clock_lfclk_in_get(void)
xc_clock_lfclk_in_get
CLOCK_HFCLK_In_Typedef xc_clock_hfclk_in_get(void)
xc_clock_hfclk_in_get
@ CLOCK_LFCLK_IN_32K
void xc_gpio_init(GPIO_InitCfg_t *init_cfg)
xc_gpio_init
Definition xc_drv_gpio.c:63
@ GPIO_DIR_OUTPUT
@ PWM0
@ PWM0_INV
@ PWM1
@ PWM1_INV
@ GPIO_PULLDOWN
@ NOT_INT
@ GPIO_Mux0
Definition xc_drv_gpio.h:96
@ GPIO_Mux1
Definition xc_drv_gpio.h:97
@ GPIO_Mux3
Definition xc_drv_gpio.h:99
@ GPIO_Mux2
Definition xc_drv_gpio.h:98
@ GPIO_0
Definition xc_drv_gpio.h:50
@ GPIO_1
Definition xc_drv_gpio.h:51
@ GPIO_12
Definition xc_drv_gpio.h:62
@ GPIO_13
Definition xc_drv_gpio.h:63
@ GPIO_11
Definition xc_drv_gpio.h:61
uint8_t xc_pwm_brake_signal_valid_get(void)
Definition xc_drv_pwm.c:250
void xc_pwm_brake_signal_mask_set(uint32_t mask)
Definition xc_drv_pwm.c:252
void PWM_Handler(void)
Definition xc_drv_pwm.c:412
void xc_pwm_capture_enable(uint8_t ch)
Definition xc_drv_pwm.c:268
void xc_pwm_brake_recovery_mode_set(uint32_t mode)
Definition xc_drv_pwm.c:256
pwm_handler_callback pwm_n_callback[3]
Definition xc_drv_pwm.c:47
void xc_pwm_stop_all(void)
Definition xc_drv_pwm.c:108
void xc_pwm_timer_set_dutycycle(uint8_t reg_idx, double dutycycle)
Definition xc_drv_pwm.c:380
__WEAK uint8_t pwm_capture_ch1_callback(void *context)
Definition xc_drv_pwm.c:433
void xc_pwm_capture_debounce_disable(uint8_t ch, uint32_t step)
Definition xc_drv_pwm.c:303
void xc_pwm_init(uint8_t reg_idx, PWM_InitCfg_t *init_cfg)
Definition xc_drv_pwm.c:69
void xc_pwm_brake_enable(uint8_t reg_idx)
Definition xc_drv_pwm.c:213
static uint16_t pwm_freq_to_period(PWM_InitCfg_t *pwm_cfg, PWM_ClkDiv_TypeDef div_clk)
Definition xc_drv_pwm.c:157
void xc_pwm_brake_clear()
Definition xc_drv_pwm.c:266
void xc_pwm_timer_set_high_cnt(uint8_t reg_idx, uint16_t high_cnt)
Definition xc_drv_pwm.c:389
void xc_pwm_dutycycle_set(uint8_t reg_idx, uint32_t dutycycle_acc, uint32_t dutycycle)
Definition xc_drv_pwm.c:193
void xc_pwm_brake_disable(uint8_t reg_idx)
Definition xc_drv_pwm.c:233
void xc_pwm_capture_disable_it(uint8_t ch)
Definition xc_drv_pwm.c:283
static uint32_t pwm_clk_init_state
Definition xc_drv_pwm.c:56
void xc_pwm_timer_set_low_cnt(uint8_t reg_idx, uint16_t low_cnt)
Definition xc_drv_pwm.c:394
void xc_pwm_stop(uint8_t reg_idx)
Definition xc_drv_pwm.c:102
void xc_pwm_start_all(void)
Definition xc_drv_pwm.c:106
xincx_drv_state_t
Definition xc_drv_pwm.c:42
@ STATE_INITIALIZED
Definition xc_drv_pwm.c:44
@ STATE_UNINITIALIZED
Definition xc_drv_pwm.c:43
void xc_pwm_lowpower_disable(uint8_t reg_idx)
Definition xc_drv_pwm.c:206
__WEAK uint8_t pwm_capture_ch2_callback(void *context)
Definition xc_drv_pwm.c:435
void xc_pwm_timer_init(uint8_t reg_idx, PWM_Timer_InitCfg_t *init_cfg)
Definition xc_drv_pwm.c:339
__WEAK uint8_t pwm_capture_ch0_callback(void *context)
Definition xc_drv_pwm.c:431
void xc_pwm_capture_debounce_enable(uint8_t ch, uint32_t step)
Definition xc_drv_pwm.c:296
void xc_pwm_lowpower_countdirection_set(uint8_t reg_idx, uint32_t direction)
Definition xc_drv_pwm.c:208
void xc_pwm_capture_enable_it(uint8_t ch)
Definition xc_drv_pwm.c:272
void xc_pwm_brake_debounce_set(uint32_t debounce, uint32_t step)
Definition xc_drv_pwm.c:260
void xc_pwm_capture_counter_disable(uint8_t ch)
Definition xc_drv_pwm.c:319
void xc_pwm_timer_start(uint8_t reg_idx)
Definition xc_drv_pwm.c:406
void xc_pwm_capture_psc_set(uint8_t ch, uint32_t psc)
Definition xc_drv_pwm.c:312
void xc_pwm_timer_deinit(uint8_t reg_idx)
Definition xc_drv_pwm.c:364
void xc_pwm_brake_signal_trigger_level_set(uint32_t level)
Definition xc_drv_pwm.c:254
void xc_pwm_capture_edge_set(uint8_t ch, uint32_t edge)
Definition xc_drv_pwm.c:310
uint8_t xc_pwm_brake_recovery_mode_get(void)
Definition xc_drv_pwm.c:258
void xc_pwm_lowpower_enable(uint8_t reg_idx)
Definition xc_drv_pwm.c:204
void xc_pwm_start(uint8_t reg_idx)
Definition xc_drv_pwm.c:100
void xc_pwm_capture_counter_enable(uint8_t ch)
Definition xc_drv_pwm.c:314
double period
Definition xc_drv_pwm.c:60
void xc_pwm_capture_signal_set(uint8_t ch, uint32_t signal)
Definition xc_drv_pwm.c:294
void xc_pwm_timer_set_freq(uint8_t reg_idx, uint32_t freq)
Definition xc_drv_pwm.c:378
void pwm_src_enable_set(uint8_t reg_idx, uint8_t src_enable)
Definition xc_drv_pwm.c:104
uint16_t xc_pwm_capture_val_get(uint8_t ch)
Definition xc_drv_pwm.c:324
void xc_pwm_timer_stop(uint8_t reg_idx)
Definition xc_drv_pwm.c:408
void xc_pwm_capture_disable(uint8_t ch)
Definition xc_drv_pwm.c:270
void pwm_pin_set(uint8_t reg_idx, PWM_InitCfg_t *pwm_cfg)
Definition xc_drv_pwm.c:110
The header of xc_drv_pwm.c
@ PWM_CLK_SRC_32K
Definition xc_drv_pwm.h:212
@ PWM_CLK_SRC_32M_DIV
Definition xc_drv_pwm.h:210
@ PWM_CLK_SRC_32K_DIV
Definition xc_drv_pwm.h:211
PWM_ClkDiv_TypeDef
Definition xc_drv_pwm.h:216
@ PWM_CLK_DIV0
Definition xc_drv_pwm.h:217
uint8_t(* pwm_handler_callback)(void *context)
Definition xc_drv_pwm.h:268