10#ifndef SDRV_EPWM_DRV_H_
11#define SDRV_EPWM_DRV_H_
13#include "../source/epwm/sdrv_epwm_reg.h"
16#if ((CONFIG_E3106) || (CONFIG_E3104))
17#define EPWM_SOURCE_CLK 150
19#define EPWM_SOURCE_CLK 198
22#define EPWM_SOURCE_CLK 250
25#define EPWM_FIFO_A_OFFSET (0xc0U)
26#define EPWM_FIFO_B_OFFSET (0xc4U)
27#define EPWM_FIFO_C_OFFSET (0xc8U)
28#define EPWM_FIFO_D_OFFSET (0xccU)
29#define EPWM_CNT_G0_OVF_OFFSET (0x104U)
30#define EPWM_CNT_G1_OVF_OFFSET (0x124U)
31#define EPWM_INT_STA_EN (0x3f << 0 | 0xf << 20)
32#define EPWM_COR_ERR_INT_STA_EN (0xf << 0 | 0xffff << 8)
33#define EPWM_UNC_ERR_INT_STA_EN (0xf << 0 | 0xffff << 8)
35#define EPWM_BM_INT_EN_CHN_D_DMA_REQ_SHIFT (23U)
36#define EPWM_BM_INT_EN_CHN_C_DMA_REQ_SHIFT (22U)
37#define EPWM_BM_INT_EN_CHN_B_DMA_REQ_SHIFT (21U)
38#define EPWM_BM_INT_EN_CHN_A_DMA_REQ_SHIFT (20U)
39#define EPWM_BM_INT_EN_CNT_G1_OVF_SHIFT (5U)
40#define EPWM_BM_INT_EN_CNT_G0_OVF_SHIFT (4U)
41#define EPWM_BM_INT_EN_CMP_D_SHIFT (3U)
42#define EPWM_BM_INT_EN_CMP_C_SHIFT (2U)
43#define EPWM_BM_INT_EN_CMP_B_SHIFT (1U)
44#define EPWM_BM_INT_EN_CMP_A_SHIFT (0U)
46#define EPWM_BM_ERR_INT_STA_CMP_D_REG_UPD_TWICE_SHIFT (23U)
47#define EPWM_BM_ERR_INT_STA_CMP_C_REG_UPD_TWICE_SHIFT (22U)
48#define EPWM_BM_ERR_INT_STA_CMP_B_REG_UPD_TWICE_SHIFT (21U)
49#define EPWM_BM_ERR_INT_STA_CMP_A_REG_UPD_TWICE_SHIFT (20U)
50#define EPWM_BM_ERR_INT_STA_CMP_D_REG_NO_UPD_SHIFT (19U)
51#define EPWM_BM_ERR_INT_STA_CMP_C_REG_NO_UPD_SHIFT (18U)
52#define EPWM_BM_ERR_INT_STA_CMP_B_REG_NO_UPD_SHIFT (17U)
53#define EPWM_BM_ERR_INT_STA_CMP_A_REG_NO_UPD_SHIFT (16U)
54#define EPWM_BM_ERR_INT_STA_CMP_D_FAULT_EVENT_SHIFT (15U)
55#define EPWM_BM_ERR_INT_STA_CMP_C_FAULT_EVENT_SHIFT (14U)
56#define EPWM_BM_ERR_INT_STA_CMP_B_FAULT_EVENT_SHIFT (13U)
57#define EPWM_BM_ERR_INT_STA_CMP_A_FAULT_EVENT_SHIFT (12U)
58#define EPWM_BM_ERR_INT_STA_CMP_D0_FAULT_SHIFT (11U)
59#define EPWM_BM_ERR_INT_STA_CMP_C0_FAULT_SHIFT (10U)
60#define EPWM_BM_ERR_INT_STA_CMP_B0_FAULT_SHIFT (9U)
61#define EPWM_BM_ERR_INT_STA_CMP_A0_FAULT_SHIFT (8U)
62#define EPWM_BM_ERR_INT_STA_FIFO_D_UNDERRUN_SHIFT (3U)
63#define EPWM_BM_ERR_INT_STA_FIFO_C_UNDERRUN_SHIFT (2U)
64#define EPWM_BM_ERR_INT_STA_FIFO_B_UNDERRUN_SHIFT (1U)
65#define EPWM_BM_ERR_INT_STA_FIFO_A_UNDERRUN_SHIFT (0U)
67#define EPWM_BM_CHN_D_DMA_REQ (1 << EPWM_BM_INT_EN_CHN_D_DMA_REQ_SHIFT)
68#define EPWM_BM_CHN_C_DMA_REQ (1 << EPWM_BM_INT_EN_CHN_C_DMA_REQ_SHIFT)
69#define EPWM_BM_CHN_B_DMA_REQ (1 << EPWM_BM_INT_EN_CHN_B_DMA_REQ_SHIFT)
70#define EPWM_BM_CHN_A_DMA_REQ (1 << EPWM_BM_INT_EN_CHN_A_DMA_REQ_SHIFT)
71#define EPWM_BM_CNT_G0_OVF (1 << EPWM_BM_INT_EN_CNT_G0_OVF_SHIFT)
72#define EPWM_BM_CNT_G1_OVF (1 << EPWM_BM_INT_EN_CNT_G1_OVF_SHIFT)
73#define EPWM_BM_CMP_D (1 << EPWM_BM_INT_EN_CMP_D_SHIFT)
74#define EPWM_BM_CMP_C (1 << EPWM_BM_INT_EN_CMP_C_SHIFT)
75#define EPWM_BM_CMP_B (1 << EPWM_BM_INT_EN_CMP_B_SHIFT)
76#define EPWM_BM_CMP_A (1 << EPWM_BM_INT_EN_CMP_A_SHIFT)
78#define EPWM_BM_CMP_D_REG_UPD_TWICE \
79 (1 << EPWM_BM_ERR_INT_STA_CMP_D_REG_UPD_TWICE_SHIFT)
80#define EPWM_BM_CMP_C_REG_UPD_TWICE \
81 (1 << EPWM_BM_ERR_INT_STA_CMP_C_REG_UPD_TWICE_SHIFT)
82#define EPWM_BM_CMP_B_REG_UPD_TWICE \
83 (1 << EPWM_BM_ERR_INT_STA_CMP_B_REG_UPD_TWICE_SHIFT)
84#define EPWM_BM_CMP_A_REG_UPD_TWICE \
85 (1 << EPWM_BM_ERR_INT_STA_CMP_A_REG_UPD_TWICE_SHIFT)
86#define EPWM_BM_CMP_D_REG_NO_UPD \
87 (1 << EPWM_BM_ERR_INT_STA_CMP_D_REG_NO_UPD_SHIFT)
88#define EPWM_BM_CMP_C_REG_NO_UPD \
89 (1 << EPWM_BM_ERR_INT_STA_CMP_C_REG_NO_UPD_SHIFT)
90#define EPWM_BM_CMP_B_REG_NO_UPD \
91 (1 << EPWM_BM_ERR_INT_STA_CMP_B_REG_NO_UPD_SHIFT)
92#define EPWM_BM_CMP_A_REG_NO_UPD \
93 (1 << EPWM_BM_ERR_INT_STA_CMP_A_REG_NO_UPD_SHIFT)
94#define EPWM_BM_CMP_D_FAULT_EVENT \
95 (1 << EPWM_BM_ERR_INT_STA_CMP_D_FAULT_EVENT_SHIFT)
96#define EPWM_BM_CMP_C_FAULT_EVENT \
97 (1 << EPWM_BM_ERR_INT_STA_CMP_C_FAULT_EVENT_SHIFT)
98#define EPWM_BM_CMP_B_FAULT_EVENT \
99 (1 << EPWM_BM_ERR_INT_STA_CMP_B_FAULT_EVENT_SHIFT)
100#define EPWM_BM_CMP_A_FAULT_EVENT \
101 (1 << EPWM_BM_ERR_INT_STA_CMP_A_FAULT_EVENT_SHIFT)
102#define EPWM_BM_CMP_D0_FAULT (1 << EPWM_BM_ERR_INT_STA_CMP_D0_FAULT_SHIFT)
103#define EPWM_BM_CMP_C0_FAULT (1 << EPWM_BM_ERR_INT_STA_CMP_C0_FAULT_SHIFT)
104#define EPWM_BM_CMP_B0_FAULT (1 << EPWM_BM_ERR_INT_STA_CMP_B0_FAULT_SHIFT)
105#define EPWM_BM_CMP_A0_FAULT (1 << EPWM_BM_ERR_INT_STA_CMP_A0_FAULT_SHIFT)
106#define EPWM_BM_FIFO_D_UNDERRUN (1 << EPWM_BM_ERR_INT_STA_FIFO_D_UNDERRUN_SHIFT)
107#define EPWM_BM_FIFO_C_UNDERRUN (1 << EPWM_BM_ERR_INT_STA_FIFO_C_UNDERRUN_SHIFT)
108#define EPWM_BM_FIFO_B_UNDERRUN (1 << EPWM_BM_ERR_INT_STA_FIFO_B_UNDERRUN_SHIFT)
109#define EPWM_BM_FIFO_A_UNDERRUN (1 << EPWM_BM_ERR_INT_STA_FIFO_A_UNDERRUN_SHIFT)
112#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_D_CMP11 (0x01U << 15U)
113#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_D_CMP10 (0x01U << 14U)
114#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_D_CMP01 (0x01U << 13U)
115#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_D_CMP00 (0x01U << 12U)
116#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_C_CMP11 (0x01U << 11U)
117#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_C_CMP10 (0x01U << 10U)
118#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_C_CMP01 (0x01U << 9U)
119#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_C_CMP00 (0x01U << 8U)
120#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_B_CMP11 (0x01U << 7U)
121#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_B_CMP10 (0x01U << 6U)
122#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_B_CMP01 (0x01U << 5U)
123#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_B_CMP00 (0x01U << 4U)
124#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_A_CMP11 (0x01U << 3U)
125#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_A_CMP10 (0x01U << 2U)
126#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_A_CMP01 (0x01U << 1U)
127#define EPWM_BM_CENTER_ALIGN_CMP_INT_STA_CMP_A_CMP00 (0x01U << 0U)
244 bool center_align_mode;
419 sdrv_epwm_event_trigger_mode_e cnt_clr_trig_sel,
420 sdrv_epwm_input_sel_trig_e clr_sel);
434 sdrv_epwm_cnt_cfg_set_upd_sel_e set_mode_sel,
435 sdrv_epwm_event_trigger_mode_e cnt_set_trig_sel,
436 sdrv_epwm_input_sel_trig_e set_sel);
460 const uint32_t dti_val);
473 uint32_t sse_reg_val);
495 sdrv_epwm_t *dev, sdrv_epwm_chn_dma_ctrl_cmp_x_dat_format_e dat_format);
507 uint16_t init_offset);
560 sdrv_epwm_cmp_fault_event_ctrl_t *fault_cfg,
594 uint32_t right_point);
606 uint32_t right_point);
638 uint8_t set_trig, uint8_t clr_trig);
672 sdrv_epwm_output_e subchnl,
674 uint32_t right_point);
687 uint32_t cmp0_left_point,
688 uint32_t cmp0_right_point,
689 uint32_t cmp1_left_point,
690 uint32_t cmp1_right_point);
702void sdrv_epwm_center_align_mode_en(
sdrv_epwm_t *dev,
bool en);
712void sdrv_epwm_cmp_center_align_val_upd_bcd(
sdrv_epwm_t *dev,
int32_t status_t
Type used for all status and error return values.
Definition: sdrv_common.h:82
struct epwm_cmp_cfg epwm_cmp_cfg_t
epwm_cmp_cfg.
enum epwm_cmp_cfg_con_mode epwm_cmp_cfg_con_mode_e
epwm_cmp_cfg_con_mode.
void sdrv_epwm_cmp_val_upd_a(sdrv_epwm_t *dev, uint32_t trig_point)
compare value chnl_a upload (unit is cnt val)
void sdrv_epwm_dti(sdrv_epwm_t *dev, sdrv_epwm_cmp_prefin_pol_t *prefin_pol, const uint32_t dti_val)
configure epwm death time
enum epwm_cmp_out_mode epwm_cmp_out_mode_e
epwm_cmp_out_mode.
struct epwm_dma_cfg epwm_dma_cfg_t
epwm_dma_cfg.
status_t sdrv_epwm_multi_cmp_mode(sdrv_epwm_t *dev, pwm_state_t *state, epwm_multi_cmp_val_t *multi_cmp)
configure multi compare mode
void sdrv_epwm_mfc(sdrv_epwm_t *dev, uint8_t val)
configure modulation frequency control
void sdrv_epwm_start(sdrv_epwm_t *dev)
Start ePWM channel output.
struct sdrv_epwm sdrv_epwm_t
ePWM controller.
epwm_cfg_ctrl_dma_trig_sel
epwm_cfg_ctrl_dma_trig_sel.
Definition: sdrv_epwm.h:149
@ EPWM_CNT_G1_CE
Definition: sdrv_epwm.h:155
@ EPWM_CMP_B_CE
Definition: sdrv_epwm.h:151
@ EPWM_CMP_C_CE
Definition: sdrv_epwm.h:152
@ EPWM_CNT_G0_CE
Definition: sdrv_epwm.h:154
@ EPWM_CMP_D_CE
Definition: sdrv_epwm.h:153
@ EPWM_CMP_A_CE
Definition: sdrv_epwm.h:150
void sdrv_epwm_val_chnl_bcd_upd_split(sdrv_epwm_t *dev, sdrv_epwm_output_e subchnl, uint32_t left_point, uint32_t right_point)
epwm upload chnl_b/c/d [X]0/1 compare value
epwm_cmp_out_mode
epwm_cmp_out_mode.
Definition: sdrv_epwm.h:141
@ EPWM_ONLY_COMP0_OUTPUT
Definition: sdrv_epwm.h:142
@ EPWM_BOTH_COMP0_AND_COMP1_OUTPUT
Definition: sdrv_epwm.h:143
void sdrv_epwm_fault_flt(sdrv_epwm_t *dev, sdrv_epwm_fault_flt_t *flt_cfg)
filter input fault source signals
void sdrv_epwm_cmp_multi_chnl(sdrv_epwm_t *dev, bool full_en)
configure compare multi channels
uint8_t sdrv_epwm_set_callback(sdrv_epwm_t *dev, pwm_callback_t callback)
epwm setup callback function
status_t sdrv_epwm_config(sdrv_epwm_t *dev, const pwm_state_t *state)
ePWM channel config.
void(* pwm_callback_t)(void *arg, uint32_t irq_status)
Definition: sdrv_epwm.h:214
void sdrv_epwm_cmp_data_format(sdrv_epwm_t *dev, sdrv_epwm_chn_dma_ctrl_cmp_x_dat_format_e dat_format)
configure compare data format
uint32_t sdrv_epwm_val_to_ns(uint32_t clk, uint32_t val, uint32_t div)
sdrv epwm val transfer to ns.
void sdrv_epwm_cmp_input(sdrv_epwm_t *dev, sdrv_epwm_input_sel_t *input_sel, uint8_t set_trig, uint8_t clr_trig)
compare clr/set configure
epwm_cmp_cfg_con_mode
epwm_cmp_cfg_con_mode.
Definition: sdrv_epwm.h:133
@ EPWM_CONSECUTIVE_MODE
Definition: sdrv_epwm.h:134
@ EPWM_ONLY_EXECUTE_ONE_TIME
Definition: sdrv_epwm.h:135
void sdrv_epwm_cnt_ovf_upd(sdrv_epwm_t *dev, uint32_t period)
cnt overflow value upload (unit is ns)
struct epwm_fs_state epwm_fs_state_t
epwm_fs_sta.
void sdrv_epwm_ce_ctrl(sdrv_epwm_t *dev, bool src_sel)
configure compare event/cnt overflow event
void sdrv_epwm_cmp_val_upd_bcd(sdrv_epwm_t *dev, uint32_t left_point, uint32_t right_point)
compare value chnl_b/c/d upload (unit is cnt val)
void sdrv_epwm_cnt_en(sdrv_epwm_t *dev, bool en)
counter enable.
void sdrv_epwm_ce_dma_trig(sdrv_epwm_t *dev, uint8_t sel_trig)
configure dma request except fifo wml trig
struct epwm_multi_cmp_val epwm_multi_cmp_val_t
epwm_cmpxx_val NS.
void sdrv_epwm_stop(sdrv_epwm_t *dev)
Stop ePWM channel output.
void sdrv_epwm_sw_trig(sdrv_epwm_t *dev, sdrv_epwm_sw_trig_ctrl_e trig)
software trigger
void sdrv_epwm_val_chnl_bcd_upd_split_both(sdrv_epwm_t *dev, uint32_t cmp0_left_point, uint32_t cmp0_right_point, uint32_t cmp1_left_point, uint32_t cmp1_right_point)
epwm upload chnl_b/c/d [X]0/1 compare value
struct epwm_eid_val epwm_eid_val_t
epwm_eid_val.
struct epwm_dual_duty_state epwm_dual_duty_state_t
epwm_dual_duty_state.
uint32_t sdrv_epwm_ns_to_val(uint32_t clk, uint32_t ns, uint32_t div)
sdrv epwm ns transfer to val.
void sdrv_epwm_fault_event(sdrv_epwm_t *dev, uint8_t fault_src, sdrv_epwm_cmp_fault_event_ctrl_t *fault_cfg, epwm_fs_state_t *fs_state)
configure input fault event
void sdrv_epwm_cmp_en(sdrv_epwm_t *dev, bool en)
compare channel enable.
enum epwm_cfg_ctrl_dma_trig_sel epwm_cfg_ctrl_dma_trig_sel_e
epwm_cfg_ctrl_dma_trig_sel.
void sdrv_epwm_sse(sdrv_epwm_t *dev, sdrv_epwm_cmp_sse_ctrl_t *sse_cfg, uint32_t sse_reg_val)
configure sse epwm output
void sdrv_epwm_cmp_bcd_update(sdrv_epwm_t *dev, uint32_t left_point, uint32_t right_point)
upload chnl_b/c/d compare value with dual mode 100% duty check(unit is cnt val)
void sdrv_epwm_init_sta(sdrv_epwm_t *dev, bool cmp0_init, bool cmp1_init)
epwm initial status.
void sdrv_epwm_fault_event_clr(sdrv_epwm_t *dev, uint8_t fault_src)
input fault event clr
void sdrv_epwm_cnt_clr_cfg(sdrv_epwm_t *dev, sdrv_epwm_event_trigger_mode_e cnt_clr_trig_sel, sdrv_epwm_input_sel_trig_e clr_sel)
configure epwm counter clear
void sdrv_epwm_cnt_ovf_dir_upd(sdrv_epwm_t *dev, uint32_t period_cnt)
cnt overflow value upload directly (unit is cnt val)
void sdrv_epwm_cnt_ovf_upd_cfg(sdrv_epwm_t *dev, sdrv_epwm_cnt_cfg_set_upd_sel_e set_mode_sel, sdrv_epwm_event_trigger_mode_e cnt_set_trig_sel, sdrv_epwm_input_sel_trig_e set_sel)
configure epwm counter overflow upload cfg
uint32_t sdrv_epwm_ns_to_val_1(uint32_t clk, uint32_t ns, uint32_t div)
sdrv epwm ns transfer to val and minus 1.
status_t sdrv_epwm_cmp_val_upd(sdrv_epwm_t *dev, const pwm_state_t *state)
compare value upload
void sdrv_epwm_cmp_a_eid(sdrv_epwm_t *dev, epwm_eid_val_t *eid_val)
configure compare a event id
void sdrv_epwm_cmp_dither(sdrv_epwm_t *dev, uint8_t clip_rslt, uint16_t init_offset)
configure compare dither mode
struct pwm_status pwm_state_t
pwm_status.
void sdrv_epwm_cmp_sw_rld(sdrv_epwm_t *dev)
compare software reload
epwm_cmp_cfg.
Definition: sdrv_epwm.h:219
sdrv_epwm_cmp_pulse_wid1_t cmp_pulse_wid1
Definition: sdrv_epwm.h:233
sdrv_epwm_cmp_mode_e cmp_mode
Definition: sdrv_epwm.h:227
sdrv_epwm_cmp_event_out_t out_mode
Definition: sdrv_epwm.h:229
epwm_dma_cfg_t dma_cfg
Definition: sdrv_epwm.h:239
bool sw_rld_mode
Definition: sdrv_epwm.h:241
sdrv_epwm_cnt_gx_e cmp_cnt_sel
Definition: sdrv_epwm.h:221
sdrv_epwm_cmp_pulse_wid0_t cmp_pulse_wid0
Definition: sdrv_epwm.h:231
bool audio_enable
Definition: sdrv_epwm.h:237
epwm_cmp_out_mode_e chnl_out_mode
Definition: sdrv_epwm.h:223
epwm_cmp_cfg_con_mode_e con_mode
Definition: sdrv_epwm.h:225
uint8_t refresh_intval
Definition: sdrv_epwm.h:235
epwm_dma_cfg.
Definition: sdrv_epwm.h:197
uint8_t fifo_wml
Definition: sdrv_epwm.h:199
bool dma_enable
Definition: sdrv_epwm.h:198
epwm_dual_duty_state.
Definition: sdrv_epwm.h:181
uint32_t left_point
Definition: sdrv_epwm.h:182
uint32_t right_point
Definition: sdrv_epwm.h:183
epwm_eid_val.
Definition: sdrv_epwm.h:171
uint8_t eid00
Definition: sdrv_epwm.h:172
uint8_t eid10
Definition: sdrv_epwm.h:174
uint8_t eid11
Definition: sdrv_epwm.h:175
uint8_t eid01
Definition: sdrv_epwm.h:173
epwm_fs_sta.
Definition: sdrv_epwm.h:189
bool cmp1_fs_state
Definition: sdrv_epwm.h:191
bool cmp0_fs_state
Definition: sdrv_epwm.h:190
epwm_cmpxx_val NS.
Definition: sdrv_epwm.h:161
uint32_t cmp00_val
Definition: sdrv_epwm.h:162
uint32_t cmp01_val
Definition: sdrv_epwm.h:163
uint32_t cmp10_val
Definition: sdrv_epwm.h:164
uint32_t cmp11_val
Definition: sdrv_epwm.h:165
pwm_status.
Definition: sdrv_epwm.h:206
uint32_t duty2
Definition: sdrv_epwm.h:209
uint32_t period
Definition: sdrv_epwm.h:207
uint32_t duty1
Definition: sdrv_epwm.h:208
Definition: sdrv_epwm.h:268
uint32_t base
Definition: sdrv_epwm.h:270
sdrv_epwm_clk_config_src_clk_sel_e clk_src
Definition: sdrv_epwm.h:278
uint16_t clk_div
Definition: sdrv_epwm.h:280
sdrv_epwm_t * epwm_bank[SDRV_EPWM_CHANNEL_NR]
Definition: sdrv_epwm.h:282
uint32_t irq_id
Definition: sdrv_epwm.h:276
uint8_t irq
Definition: sdrv_epwm.h:272
ePWM controller.
Definition: sdrv_epwm.h:252
sdrv_epwm_controller_t * controller
Definition: sdrv_epwm.h:264
epwm_cmp_cfg_t cmp_cfg
Definition: sdrv_epwm.h:258
sdrv_epwm_channel_e chnl
Definition: sdrv_epwm.h:260
paddr_t base
Definition: sdrv_epwm.h:254
pwm_callback_t cb
Definition: sdrv_epwm.h:256
epwm_dual_duty_state_t pre_duty
Definition: sdrv_epwm.h:262