BLE5.2 1.0
开发文档说明
xc_drv_pwm.h
浏览该文件的文档.
1
25#ifndef _XC_DRV_PWM_H_
26#define _XC_DRV_PWM_H_
27
28/*-----------------------------------------------------------------------------------
29 INCLUDE HEADE FILES
30 ------------------------------------------------------------------------------------*/
31#include <stdbool.h>
32#include <stdio.h>
33
34#include "xc6xxx.h"
35/*------------------------------------------------------------------------------------
36 Macros
37 -------------------------------------------------------------------------------------*/
38#define PWM_CLK_DIV_CAL(div) (2 * (div + 1))
39#define PWM_FREQ_MAX_CAL(pwm_clk, dutycycle_acc) \
40 (pwm_clk / (dutycycle_acc * (0 + 1)) / 2)
41#define PWM_FREQ_CAL(pwm_clk, dutycycle_acc, period) \
42 (pwm_clk / (dutycycle_acc * (period + 1)) / 2)
43
44#define PWM_UP_UPDATE_ENABLE (1UL)
45#define PWM_UP_UPDATE_DISABLE (0UL)
46
47#define PWM_EN_ENABLE (0x01UL)
48#define PWM_EN_DISABLE (0x00UL)
49#define PWM_EN_ALL_ENABLE (0x01UL)
50#define PWM_EN_ALL_DISABLE (0x00UL)
51#define PWM_EN_SLEEP_EN_ENABLE (0x01UL)
52#define PWM_EN_SLEEP_EN_DISABLE (0x00UL)
53
54#define PWM_EN_MODE_ACC_65535 (0x02UL)
55
56#define PWM_COMP_TIME_PWMCOMPTIME_Pos (0x00UL)
57#define PWM_COMP_TIME_PWMCOMPTIME_Msk (0xFFUL)
58#define PWM_COMP_TIME_PWMCOMPTIME_VAL_1CLK (0x00UL)
59#define PWM_COMP_TIME_PWMCOMPTIME_VAL_2CLK (0x01UL)
60#define PWM_COMP_TIME_PWMCOMPTIME_VAL_3CLK (0x02UL)
61#define PWM_COMP_TIME_PWMCOMPTIME_VAL_4CLK (0x03UL)
62#define PWM_COMP_TIME_PWMCOMPTIME_VAL_5CLK (0x04UL)
63#define PWM_COMP_TIME_PWMCOMPTIME_VAL_6CLK (0x05UL)
64#define PWM_COMP_TIME_PWMCOMPTIME_VAL_7CLK (0x06UL)
65#define PWM_COMP_TIME_PWMCOMPTIME_VAL_8CLK (0x07UL)
66
67#define PWM_BRK_BRK_CLEAR_EXIT (0x01UL)
68
69#define PWM_BRK_DBC_EN_ENABLE (0x01UL)
70#define PWM_BRK_DBC_EN_DISABLE (0x00UL)
71
72#define PWM_BRK_DBC_STEP1 (0x01UL)
73#define PWM_BRK_DBC_STEP2 (0x02UL)
74#define PWM_BRK_DBC_STEP3 (0x03UL)
75#define PWM_BRK_DBC_STEP4 (0x04UL)
76#define PWM_BRK_DBC_STEP5 (0x05UL)
77#define PWM_BRK_DBC_STEP6 (0x06UL)
78#define PWM_BRK_DBC_STEP7 (0x07UL)
79#define PWM_BRK_DBC_STEP8 (0x08UL)
80#define PWM_BRK_DBC_STEP9 (0x09UL)
81#define PWM_BRK_DBC_STEP10 (0x0AUL)
82
83#define PWM_BRK0_INV_ENABLE (0x01UL)
84#define PWM_BRK0_INV_DISABLE (0x00UL)
85#define PWM_BRK1_INV_ENABLE (0x02UL)
86#define PWM_BRK1_INV_DISABLE (0x00UL)
87#define PWM_BRK2_INV_ENABLE (0x04UL)
88#define PWM_BRK2_INV_DISABLE (0x00UL)
89
90#define PWM_BRK0_MASK_ENABLE (0x01UL)
91#define PWM_BRK0_MASK_DISABLE (0x00UL)
92#define PWM_BRK1_MASK_ENABLE (0x02UL)
93#define PWM_BRK1_MASK_DISABLE (0x00UL)
94#define PWM_BRK2_MASK_ENABLE (0x04UL)
95#define PWM_BRK2_MASK_DISABLE (0x00UL)
96
97#define PWM_BRK0_ENABLE_ENABLE (0x01UL)
98#define PWM_BRK0_ENABLE_DISABLE (0x00UL)
99#define PWM_BRK1_ENABLE_ENABLE (0x02UL)
100#define PWM_BRK1_ENABLE_DISABLE (0x00UL)
101#define PWM_BRK2_ENABLE_ENABLE (0x04UL)
102#define PWM_BRK2_ENABLE_DISABLE (0x00UL)
103
104#define PWM_CAPTURE_UPD0_EN_ENABLE (0x01UL)
105#define PWM_CAPTURE_UPD1_EN_ENABLE (0x02UL)
106#define PWM_CAPTURE_UPD2_EN_ENABLE (0x04UL)
107
108#define PWM_CAPTURE_PSC_1 (0x00UL)
109#define PWM_CAPTURE_PSC_2 (0x01UL)
110#define PWM_CAPTURE_PSC_3 (0x02UL)
111
112#define PWM_CAPTURE_MODE_RISE (0x00UL)
113#define PWM_CAPTURE_MODE_FALL (0x01UL)
114#define PWM_CAPTURE_MODE_BOTH (0x02UL)
115
116#define PWM_CAPTURE_DBC_STEP0 (0x00UL)
117#define PWM_CAPTURE_DBC_STEP1 (0x01UL)
118#define PWM_CAPTURE_DBC_STEP2 (0x02UL)
119#define PWM_CAPTURE_DBC_STEP3 (0x03UL)
120#define PWM_CAPTURE_DBC_STEP4 (0x04UL)
121#define PWM_CAPTURE_DBC_STEP5 (0x05UL)
122#define PWM_CAPTURE_DBC_STEP6 (0x06UL)
123#define PWM_CAPTURE_DBC_STEP7 (0x07UL)
124#define PWM_CAPTURE_DBC_STEP8 (0x08UL)
125#define PWM_CAPTURE_DBC_STEP9 (0x09UL)
126#define PWM_CAPTURE_DBC_STEP10 (0x0AUL)
127#define PWM_CAPTURE_DBC_STEP11 (0x0BUL)
128#define PWM_CAPTURE_DBC_STEP12 (0x0CUL)
129
130#define PWM_CAPTURE_SIG_SEL_PWM_CAPTURE0 (0x00UL)
131#define PWM_CAPTURE_SIG_SEL_PWM_CAPTURE1 (0x01UL)
132#define PWM_CAPTURE_SIG_SEL_PWM_CAPTURE2 (0x02UL)
133#define PWM_CAPTURE_SIG_SEL_PWM_BRK0 (0x03UL)
134#define PWM_CAPTURE_SIG_SEL_PWM_BRK1 (0x04UL)
135#define PWM_CAPTURE_SIG_SEL_PWM_BRK2 (0x05UL)
136
137#define PWM_CAPTURE_CLK_DIV_VAL_0 (0x00UL)
138#define PWM_CAPTURE_CLK_DIV_VAL_2 (0x01UL)
139#define PWM_CAPTURE_CLK_DIV_VAL_3 (0x02UL)
140#define PWM_CAPTURE_CLK_DIV_VAL_4 (0x03UL)
141#define PWM_CAPTURE_CLK_DIV_VAL_5 (0x04UL)
142#define PWM_CAPTURE_CLK_DIV_VAL_6 (0x05UL)
143#define PWM_CAPTURE_CLK_DIV_VAL_7 (0x06UL)
144#define PWM_CAPTURE_CLK_DIV_VAL_8 (0x07UL)
145#define PWM_CAPTURE_CLK_DIV_VAL_9 (0x08UL)
146#define PWM_CAPTURE_CLK_DIV_VAL_10 (0x09UL)
147#define PWM_CAPTURE_CLK_DIV_VAL_11 (0x0AUL)
148#define PWM_CAPTURE_CLK_DIV_VAL_12 (0x0BUL)
149#define PWM_CAPTURE_CLK_DIV_VAL_13 (0x0CUL)
150
151#define PWM_CAPTURE_ENABLE (0x01UL)
152#define PWM_CAPTURE_DISABLE (0x00UL)
153
154#define PWM_CAPTURE_DBC_ENABLE (0x01UL)
155#define PWM_CAPTURE_DBC_DISABLE (0x00UL)
156
157#define PWM_CAPTURE_COMMON_CNT_ENABLE (0x01UL)
158#define PWM_CAPTURE_COMMON_CNT_DISABLE (0x00UL)
159
160#define PWM_CAPTURE_UPD_EN_ENABLE (0x01UL)
161#define PWM_CAPTURE_UPD_EN_DISABLE (0x00UL)
162
163#define PWM_SIGNAL_CAPTURE0_GPIO3 GPIO_3
164#define PWM_SIGNAL_CAPTURE1_GPIO8 GPIO_8
165#define PWM_SIGNAL_CAPTURE2_GPIO9 GPIO_9
166#define PWM_SIGNAL_BRK0_GPIO4 GPIO_4
167#define PWM_SIGNAL_BRK1_GPIO5 GPIO_5
168#define PWM_SIGNAL_BRK2_GPIO6 GPIO_6
169
170#define PWM_IC_CH0 0
171#define PWM_IC_CH1 1
172#define PWM_IC_CH2 2
173
174#define PWM_BRK_SYNC_VALID 1
175#define PWM_BRK_SYNC_INVALID 0
176
177#define PWM_BRK0_HIGH_LEVEL PWM_BRK0_INV_DISABLE
178#define PWM_BRK0_LOW_LEVEL PWM_BRK0_INV_ENABLE
179#define PWM_BRK1_HIGH_LEVEL PWM_BRK1_INV_DISABLE
180#define PWM_BRK1_LOW_LEVEL PWM_BRK1_INV_ENABLE
181#define PWM_BRK2_HIGH_LEVEL PWM_BRK2_INV_DISABLE
182#define PWM_BRK2_LOW_LEVEL PWM_BRK2_INV_ENABLE
183
184#define PWM_ICSIG_CAPTURE0 PWM_CAPTURE_SIG_SEL_PWM_CAPTURE0
185#define PWM_ICSIG_CAPTURE1 PWM_CAPTURE_SIG_SEL_PWM_CAPTURE1
186#define PWM_ICSIG_CAPTURE2 PWM_CAPTURE_SIG_SEL_PWM_CAPTURE2
187
188#define PWM_ALL_ENABLE PWM_EN_ALL_ENABLE
189#define PWM_ALL_DISABLE PWM_EN_ALL_DISABLE
190
191#define PWM_SLEEP_COUNT_DIRECTION_UP (0x01UL)
192#define PWM_SLEEP_COUNT_DIRECTION_DOWN (0x00UL)
193
194#define PWM_SLEEP_ENABLE PWM_SLEEP_EN_ENABLE
195#define PWM_SLEEP_DISABLE PWM_SLEEP_EN_DISABLE
196
197#define PWM_EN_SEL_SELF (0x00UL)
198#define PWM_EN_SEL_ALL (0x01UL)
199
200#define PWM_BRK_MODE_HARDWARE (0x00UL)
201#define PWM_BRK_MODE_SOFTWARE (0x01UL)
202
203#define PWM_TIMER_MODE_USER_DEFINED (0x01UL)
204#define PWM_TIMER_MODE_FREE_RUNNING (0x00UL)
205/*------------------------------------------------------------------------------------
206 TypeDef
207 -------------------------------------------------------------------------------------*/
208typedef enum
209{
210 PWM_CLK_SRC_32M_DIV = 0, /*PWM CLK SRC 32MHz div.*/
211 PWM_CLK_SRC_32K_DIV = 1, /*PWM CLK SRC 32kHz div.*/
212 PWM_CLK_SRC_32K = 4, /*PWM CLK SRC 32kHz.*/
214
215typedef enum
216{
217 PWM_CLK_DIV0 = 0UL, /*PWM CLK 16 MHz or 16KHz*/
218 PWM_CLK_DIV1 = 1UL, /*PWM CLK 8 MHz or 8KHz*/
219 PWM_CLK_DIV3 = 3UL, /*PWM CLK 4 MHz or 4KHz.*/
220 PWM_CLK_DIV7 = 7UL, /*PWM CLK 2 MHz or 2KHz.*/
221 PWM_CLK_DIV15 = 15UL, /*PWM CLK 1 MHz or 1KHz.*/
222 PWM_CLK_DIV31 = 31UL, /*PWM CLK 500 kHz or 500Hz.*/
223 PWM_CLK_DIV63 = 63UL, /*PWM CLK 250 kHz or 250Hz.*/
224 PWM_CLK_DIV127 = 127UL, /*PWM CLK 125 kHz or 125Hz.*/
225 PWM_CLK_DIV255 = 255UL, /*PWM CLK 62500 Hz or 62.5Hz.*/
227
229{
239
240typedef struct
241{
243 uint32_t DutyCycleAcc;
244 uint32_t DutyCycle;
245 uint8_t SrcEnable;
246 uint8_t Period;
247 uint8_t DivClk;
248 uint8_t OutputPin;
250 uint8_t InvertDelay;
252
254
255typedef struct
256{
262 uint8_t timer_mode; /* 0x0 FREE_RUNNING; 0x1 USER_DEFINED */
264
265/*------------------------------------------------------------------------------------
266 Global Variables
267 -------------------------------------------------------------------------------------*/
268typedef uint8_t (*pwm_handler_callback)(void *context);
269
270/*------------------------------------------------------------------------------------
271 Exported Functions
272 -------------------------------------------------------------------------------------*/
273void xc_pwm_init(uint8_t reg_idx, PWM_InitCfg_t *pwm_cfg);
274void xc_pwm_start(uint8_t reg_idx);
275void xc_pwm_stop(uint8_t reg_idx);
276void xc_pwm_start_all(void);
277void xc_pwm_stop_all(void);
278void pwm_pin_set(uint8_t reg_idx, PWM_InitCfg_t *pwm_cfg);
279void xc_pwm_dutycycle_set(uint8_t reg_idx, uint32_t dutycycle_acc, uint32_t dutycycle);
280void xc_pwm_lowpower_enable(uint8_t reg_idx);
281void xc_pwm_lowpower_disable(uint8_t reg_idx);
282void xc_pwm_lowpower_countdirection_set(uint8_t reg_idx, uint32_t direction);
283void xc_pwm_brake_enable(uint8_t reg_idx);
284void xc_pwm_brake_disable(uint8_t reg_idx);
286void xc_pwm_brake_signal_mask_set(uint32_t mask);
287void xc_pwm_brake_signal_trigger_level_set(uint32_t invert);
288void xc_pwm_brake_recovery_mode_set(uint32_t mode);
290void xc_pwm_brake_debounce_set(uint32_t debounce, uint32_t step);
291void xc_pwm_brake_clear(void);
292void xc_pwm_capture_enable(uint8_t ch);
293void xc_pwm_capture_disable(uint8_t ch);
294void xc_pwm_capture_enable_it(uint8_t ch);
295void xc_pwm_capture_disable_it(uint8_t ch);
296void xc_pwm_capture_signal_set(uint8_t ch, uint32_t signal);
297void xc_pwm_capture_debounce_enable(uint8_t ch, uint32_t step);
298void xc_pwm_capture_debounce_disable(uint8_t ch, uint32_t step);
299void xc_pwm_capture_edge_set(uint8_t ch, uint32_t edge);
300void xc_pwm_capture_psc_set(uint8_t ch, uint32_t psc);
301void xc_pwm_capture_counter_enable(uint8_t ch);
302void xc_pwm_capture_counter_disable(uint8_t ch);
303uint16_t xc_pwm_capture_val_get(uint8_t ch);
304
305void xc_pwm_timer_init(uint8_t reg_idx, PWM_Timer_InitCfg_t *init_cfg);
306void xc_pwm_timer_deinit(uint8_t reg_idx);
307void xc_pwm_timer_set_freq(uint8_t reg_idx, uint32_t freq);
308void xc_pwm_timer_set_dutycycle(uint8_t reg_idx, double dutycycle);
309void xc_pwm_timer_start(uint8_t reg_idx);
310void xc_pwm_timer_stop(uint8_t reg_idx);
311void xc_pwm_timer_set_high_cnt(uint8_t reg_idx, uint16_t high_cnt);
312void xc_pwm_timer_set_low_cnt(uint8_t reg_idx, uint16_t high_cnt);
313
314uint8_t pwm_capture_ch0_callback(void *context);
315uint8_t pwm_capture_ch1_callback(void *context);
316uint8_t pwm_capture_ch2_callback(void *context);
317#endif // _XC_DRV_PWM_H_
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
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 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
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
PWM_ClkSrc_TypeDef
Definition xc_drv_pwm.h:209
@ 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
void xc_pwm_capture_debounce_disable(uint8_t ch, uint32_t step)
Definition xc_drv_pwm.c:303
void xc_pwm_brake_enable(uint8_t reg_idx)
Definition xc_drv_pwm.c:213
void xc_pwm_timer_set_high_cnt(uint8_t reg_idx, uint16_t high_cnt)
Definition xc_drv_pwm.c:389
enum pwm_timer_number ePWM_Timer_Num
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
pwm_timer_number
Definition xc_drv_pwm.h:229
@ PWM_NO_TIMER
Definition xc_drv_pwm.h:230
@ PWM_TIMER_2
Definition xc_drv_pwm.h:232
@ PWM_TIMER_5
Definition xc_drv_pwm.h:235
@ PWM_TIMER_4
Definition xc_drv_pwm.h:234
@ PWM_ALL_TIMER
Definition xc_drv_pwm.h:237
@ PWM_TIMER_3
Definition xc_drv_pwm.h:233
@ PWM_TIMER_6
Definition xc_drv_pwm.h:236
@ PWM_TIMER_1
Definition xc_drv_pwm.h:231
void xc_pwm_capture_disable_it(uint8_t ch)
Definition xc_drv_pwm.c:283
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
void xc_pwm_lowpower_disable(uint8_t reg_idx)
Definition xc_drv_pwm.c:206
void xc_pwm_timer_init(uint8_t reg_idx, PWM_Timer_InitCfg_t *init_cfg)
Definition xc_drv_pwm.c:339
void xc_pwm_init(uint8_t reg_idx, PWM_InitCfg_t *pwm_cfg)
Definition xc_drv_pwm.c:69
PWM_ClkDiv_TypeDef
Definition xc_drv_pwm.h:216
@ PWM_CLK_DIV0
Definition xc_drv_pwm.h:217
@ PWM_CLK_DIV3
Definition xc_drv_pwm.h:219
@ PWM_CLK_DIV15
Definition xc_drv_pwm.h:221
@ PWM_CLK_DIV127
Definition xc_drv_pwm.h:224
@ PWM_CLK_DIV1
Definition xc_drv_pwm.h:218
@ PWM_CLK_DIV31
Definition xc_drv_pwm.h:222
@ PWM_CLK_DIV63
Definition xc_drv_pwm.h:223
@ PWM_CLK_DIV255
Definition xc_drv_pwm.h:225
@ PWM_CLK_DIV7
Definition xc_drv_pwm.h:220
void xc_pwm_capture_debounce_enable(uint8_t ch, uint32_t step)
Definition xc_drv_pwm.c:296
void xc_pwm_timer_set_low_cnt(uint8_t reg_idx, uint16_t high_cnt)
Definition xc_drv_pwm.c:394
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_brake_signal_trigger_level_set(uint32_t invert)
Definition xc_drv_pwm.c:254
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_clear(void)
Definition xc_drv_pwm.c:266
uint8_t pwm_capture_ch1_callback(void *context)
Definition xc_drv_pwm.c:433
uint8_t(* pwm_handler_callback)(void *context)
Definition xc_drv_pwm.h:268
uint8_t pwm_capture_ch2_callback(void *context)
Definition xc_drv_pwm.c:435
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
uint8_t pwm_capture_ch0_callback(void *context)
Definition xc_drv_pwm.c:431
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
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