SemiDrive SSDK Appication Program Interface PTG3.0
sdrv_etimer.h
Go to the documentation of this file.
1
9#ifndef INCLUDE_DRV_SDRV_ETIMER_H
10#define INCLUDE_DRV_SDRV_ETIMER_H
11
12#include <compiler.h>
13#include <types.h>
14
15#include "../source/etimer/sdrv_etimer_lld.h"
16#include "sdrv_common.h"
17#if (CONFIG_E3 || CONFIG_D3)
18#define ETMR_SOURCE_CLK 250
19#else
20#if ((CONFIG_E3106) || (CONFIG_E3104))
21#define ETMR_SOURCE_CLK 150
22#else
23#define ETMR_SOURCE_CLK 198
24#endif
25#endif
26
27/* etimer callback */
28typedef void (*etimer_callback)(void *arg);
29
31
35/* etimer work mode*/
36typedef enum etimer_work_mode {
37 /* idle mode */
39 /* pwm capture mode */
41 /* pwm output mode */
43 /* etimer timer function */
45 /* etimer icu function */
47 /* other mode : quad filter etc*/
50
51
55/* etimer g0 counter work mode */
56typedef enum etimer_g0_mode {
57 /* g0 idle mode */
59 /* g0 work for timer func */
61 /* g0 work for pwm output */
64
68/* etimer work status */
69typedef enum etimer_chn_status {
70 /* channel uninit */
72 /* channel init */
74 /* channel running */
76 /* channel stop */
79
83/* etimer timer : only basic cnt can work for etimer timer function */
89
94 /* etimer timer select */
96 /* etimer timer work mode */
97 sdrv_etimer_cnt_con_mode_e con_mode;
98 /* etimer timer clk select */
99 sdrv_etimer_clk_src_e clk_sel;
100 /* etimer timer clk frequency */
101 uint32_t clk_frq;
102 /* etimer timer clk divider */
103 uint32_t clk_div;
105
109typedef struct sdrv_etimer_tmr_cfg {
110 /* basic timer config */
112 /* timer timeout value */
113 uint32_t time_out;
114 /* tick cnt per us */
115 uint32_t cnt_per_ms;
117
121typedef struct sdrv_etimer_chn {
122 /* module base addr */
123 uint32_t base;
124 /* clk_src and clk_div only take effect for the first time */
125 sdrv_etimer_clk_src_e clk_src;
126 uint16_t clk_div;
127 /* module irq id */
128 uint32_t irq;
129 /* irq enable */
130 /* for pwm capture : irq always enable */
131 bool int_en;
132 /* use g0 counter : pwm generate mode only */
134 /* use center align mode : pwm generate mode only */
136 /* whether to support frequency double output in duty 1 (pwm generate mode
137 * only) */
139 /* channel work mode */
141 /* callback function */
143 /* callback function para */
144 void *arg;
145 /* etimer channel select */
146 sdrv_etimer_chn_id_e channel;
147 /* timer config : etimer timer function only */
149 /* timer/channel work status */
151 /* have read flag : pwm capture mode only */
153 /* is use multicapture function */
155 /* The controller this timer belongs to */
158
163 /* module base addr */
164 uint32_t base;
165 /* irq init flag */
167 /* clk init flag */
169 /* etimer clk src */
170 sdrv_etimer_clk_src_e etimer_clk_src;
171 /* etimer clk divider */
173 /* etimer g0 work mode */
175 /* g0 period : 4 cmp chan share one period */
176 uint32_t g0_period;
177 /* eTimer channels */
178 /* 0 - 3 : cpt ctrl ptr; 4 - 7 : cmp ctrl ptr */
179 sdrv_etimer_t *etimer_bank[SDRV_ETIMR_CHN_NR * 2];
180 /* Counter channels */
182};
183
187typedef struct sdrv_etimer_pwm_state {
188 /* PWM period in nano seconds. */
189 uint32_t period;
190 /* PWM duty cycle in nano seconds. */
191 /* only duty1 can be used to capture pwm signal */
192 uint32_t duty1;
193 /* duty2 only take effect for cmp0_cmp1 out mode */
194 uint32_t duty2;
196
200typedef struct etimer_cmp_cfg {
201 /* pwm out mode select */
202 sdrv_etimer_cmp_out_e chnl_out_mode;
203 /* consecutive or oneshot mode */
204 sdrv_etimer_cmp_con_mode_e con_mode;
205 /* only single and dual compare mode can work for pwm output */
206 /* in center align mode, cmp mode must set to dual mode */
207 sdrv_etimer_cmp_mode_e cmp_mode;
209
213typedef struct etimer_multi_cmp_val {
214 uint32_t cmp00_val;
215 uint32_t cmp01_val;
216 uint32_t cmp10_val;
217 uint32_t cmp11_val;
219
220/* common function */
221
230 void *arg);
231
232/* etimer timer function */
233
242
250
257
265
266/* capture function */
267
274
281
288
297
298/* compare funtion */
299
308 bool cmp0_init, bool cmp1_init);
309
318 sdrv_etimer_cmp_cfg_t *cmp_cfg,
319 const sdrv_etimer_pwm_state_t *state);
320
329 sdrv_etimer_t *etmr, sdrv_etimer_cmp_cfg_t *cmp_cfg,
330 const sdrv_etimer_pwm_state_t *state);
331
339
347 sdrv_etimer_multi_cmp_val_t *multi_cmp);
348
355
362
363/* quad function */
364
371status_t sdrv_etimer_quad_config(sdrv_etimer_t *etmr, quad_ctrl_t *quad_ctrl);
372
379
386
393
400status_t sdrv_etimer_filter_config(sdrv_etimer_t *etmr, flt_config_t *filter_cfg);
401
402/* icu function */
410 sdrv_etimer_cpt_trig_mode_e edge_sel);
411
419
426
433
441
449
450#endif /* INCLUDE_DRV_SDRV_ETIMER_H */
SemiDrive driver common header file.
int32_t status_t
Type used for all status and error return values.
Definition: sdrv_common.h:82
enum sdrv_etimer_basic_cnt_id sdrv_etimer_basic_cnt_id_t
sdrv etimer basic counter num
status_t sdrv_etimer_icu_config(sdrv_etimer_t *etmr, sdrv_etimer_cpt_trig_mode_e edge_sel)
configure etimer icu config
status_t sdrv_etimer_compare_pwm_initial_out_status(sdrv_etimer_t *etmr, bool cmp0_init, bool cmp1_init)
etimer pwm set initial putput status.
struct etimer_multi_cmp_val sdrv_etimer_multi_cmp_val_t
sdrv etimer multi cmp mode cmp val (ns)
status_t sdrv_etimer_compare_multi_mode(sdrv_etimer_t *etmr, sdrv_etimer_multi_cmp_val_t *multi_cmp)
configure multi compare mode.
sdrv_etimer_basic_cnt_id
sdrv etimer basic counter num
Definition: sdrv_etimer.h:84
@ ETIMR_BASIC_TMR_G0
Definition: sdrv_etimer.h:85
@ ETIMR_BASIC_TMR_NUM
Definition: sdrv_etimer.h:87
@ ETIMR_BASIC_TMR_G1
Definition: sdrv_etimer.h:86
status_t sdrv_etimer_capture_init(sdrv_etimer_t *etmr)
init etimer capture chan.
struct sdrv_etimer_tmr_cfg sdrv_etimer_tmr_cfg_t
sdrv tmr config
status_t sdrv_etimer_compare_pwm_config_update(sdrv_etimer_t *etmr, sdrv_etimer_cmp_cfg_t *cmp_cfg, const sdrv_etimer_pwm_state_t *state)
etimer pwm config update.
status_t sdrv_etimer_icu_start(sdrv_etimer_t *etmr)
start etimer icu chan.
status_t sdrv_etimer_compare_pwm_config(sdrv_etimer_t *etmr, sdrv_etimer_cmp_cfg_t *cmp_cfg, const sdrv_etimer_pwm_state_t *state)
etimer pwm state config.
struct sdrv_etimer_pwm_state sdrv_etimer_pwm_state_t
sdrv etimer pwm_status
status_t sdrv_etimer_compare_pwm_stop(sdrv_etimer_t *etmr)
stop to generate etimer pwm signal.
etimer_work_mode
etimer work mode
Definition: sdrv_etimer.h:36
@ ETIMER_PWM_CAPTURE
Definition: sdrv_etimer.h:40
@ ETIMER_TIMER_FUNC
Definition: sdrv_etimer.h:44
@ ETIMER_PWM_GENERATE
Definition: sdrv_etimer.h:42
@ ETIMER_ICU_FUNC
Definition: sdrv_etimer.h:46
@ ETIMER_PWM_OTHERS
Definition: sdrv_etimer.h:48
@ ETIMER_PWM_IDLE
Definition: sdrv_etimer.h:38
status_t sdrv_etimer_icu_dma_en(sdrv_etimer_t *etmr, uint16_t wml)
configure etimer icu dma enable (dma_en must after icu config)
uint32_t sdrv_etimer_icu_get_cnt_val(sdrv_etimer_t *etmr)
stop etimer icu get capture timestamp.
enum etimer_work_mode etimer_work_mode_t
etimer work mode
enum etimer_chn_status etimer_chn_status_t
etimer work status
status_t sdrv_etimer_capture_start(sdrv_etimer_t *etmr)
start etimer capture chan.
etimer_g0_mode
etimer g0 counter mode
Definition: sdrv_etimer.h:56
@ G0_FOR_PWM_GEN
Definition: sdrv_etimer.h:62
@ G0_FOR_TIMER
Definition: sdrv_etimer.h:60
@ G0_IDLE
Definition: sdrv_etimer.h:58
struct sdrv_etimer_chn sdrv_etimer_t
sdrv etimer ctrl
status_t sdrv_etimer_capture_stop(sdrv_etimer_t *etmr)
stop etimer capture chan.
struct etimer_cmp_cfg sdrv_etimer_cmp_cfg_t
sdrv etimer cmp mode ctrl
status_t sdrv_etimer_capture_pwm(sdrv_etimer_t *etmr, sdrv_etimer_pwm_state_t *state)
etimer capture pwm signal.
status_t sdrv_etimer_compare_pwm_dma_en(sdrv_etimer_t *etmr, uint16_t wml)
configure etimer pwm output dma enable (dma_en must after pwm config)
bool sdrv_etimer_icu_get_level(sdrv_etimer_t *etmr)
stop etimer icu get channel level status.
status_t sdrv_etimer_filter_config(sdrv_etimer_t *etmr, flt_config_t *filter_cfg)
configure etimer filter config
struct sdrv_etimer_basic_cnt_cfg sdrv_etimer_basic_cnt_cfg_t
sdrv etimer tmr config
status_t sdrv_etimer_icu_stop(sdrv_etimer_t *etmr)
stop etimer icu chan.
status_t sdrv_etimer_compare_pwm_start(sdrv_etimer_t *etmr)
start to generate etimer pwm signal.
status_t sdrv_etimer_quad_start(sdrv_etimer_t *etmr)
start etimer quad.
status_t sdrv_etimer_timer_init(sdrv_etimer_t *etmr, sdrv_etimer_basic_cnt_cfg_t *cnt_cfg)
etimer timer init
uint32_t sdrv_etimer_timer_get_current_time(sdrv_etimer_t *etmr)
etimer timer get current time val (us)
uint8_t sdrv_etimer_set_callback(sdrv_etimer_t *etmr, etimer_callback callback, void *arg)
etimer setup callback funciton
status_t sdrv_etimer_timer_start(sdrv_etimer_t *etmr, uint32_t time_out)
etimer timer start
void(* etimer_callback)(void *arg)
Definition: sdrv_etimer.h:28
enum etimer_g0_mode etimer_g0_mode_t
etimer g0 counter mode
status_t sdrv_etimer_timer_stop(sdrv_etimer_t *etmr)
etimer timer stop
etimer_chn_status
etimer work status
Definition: sdrv_etimer.h:69
@ ETIMER_CHAN_UNINIT
Definition: sdrv_etimer.h:71
@ ETIMER_CHAN_STOP
Definition: sdrv_etimer.h:77
@ ETIMER_CHAN_RUNNING
Definition: sdrv_etimer.h:75
@ ETIMER_CHAN_INIT
Definition: sdrv_etimer.h:73
status_t sdrv_etimer_quad_config(sdrv_etimer_t *etmr, quad_ctrl_t *quad_ctrl)
etimer quad config.
status_t sdrv_etimer_quad_stop(sdrv_etimer_t *etmr)
stop etimer quad.
bool sdrv_etimer_quad_dir_up(sdrv_etimer_t *etmr)
get quad dir signal status
sdrv etimer cmp mode ctrl
Definition: sdrv_etimer.h:200
sdrv_etimer_cmp_con_mode_e con_mode
Definition: sdrv_etimer.h:204
sdrv_etimer_cmp_mode_e cmp_mode
Definition: sdrv_etimer.h:207
sdrv_etimer_cmp_out_e chnl_out_mode
Definition: sdrv_etimer.h:202
sdrv etimer multi cmp mode cmp val (ns)
Definition: sdrv_etimer.h:213
uint32_t cmp00_val
Definition: sdrv_etimer.h:214
uint32_t cmp01_val
Definition: sdrv_etimer.h:215
uint32_t cmp10_val
Definition: sdrv_etimer.h:216
uint32_t cmp11_val
Definition: sdrv_etimer.h:217
sdrv etimer tmr config
Definition: sdrv_etimer.h:93
sdrv_etimer_cnt_con_mode_e con_mode
Definition: sdrv_etimer.h:97
uint32_t clk_div
Definition: sdrv_etimer.h:103
sdrv_etimer_clk_src_e clk_sel
Definition: sdrv_etimer.h:99
sdrv_etimer_basic_cnt_id_t tmr_id
Definition: sdrv_etimer.h:95
uint32_t clk_frq
Definition: sdrv_etimer.h:101
sdrv etimer ctrl
Definition: sdrv_etimer.h:121
uint32_t base
Definition: sdrv_etimer.h:123
uint32_t irq
Definition: sdrv_etimer.h:128
bool use_g0_cnt
Definition: sdrv_etimer.h:133
etimer_callback callback
Definition: sdrv_etimer.h:142
bool int_en
Definition: sdrv_etimer.h:131
etimer_chn_status_t crtl_sta
Definition: sdrv_etimer.h:150
bool use_multicpt
Definition: sdrv_etimer.h:154
sdrv_etimer_clk_src_e clk_src
Definition: sdrv_etimer.h:125
uint16_t clk_div
Definition: sdrv_etimer.h:126
sdrv_etimer_controller_t * controller
Definition: sdrv_etimer.h:156
bool fre_double_flag
Definition: sdrv_etimer.h:138
void * arg
Definition: sdrv_etimer.h:144
sdrv_etimer_tmr_cfg_t config
Definition: sdrv_etimer.h:148
bool center_align_mode
Definition: sdrv_etimer.h:135
bool cpt_read_flag
Definition: sdrv_etimer.h:152
sdrv_etimer_chn_id_e channel
Definition: sdrv_etimer.h:146
etimer_work_mode_t mode
Definition: sdrv_etimer.h:140
eTimer hardware contrller
Definition: sdrv_etimer.h:162
uint32_t base
Definition: sdrv_etimer.h:164
etimer_g0_mode_t g0_mode
Definition: sdrv_etimer.h:174
sdrv_etimer_t * etimer_bank[SDRV_ETIMR_CHN_NR *2]
Definition: sdrv_etimer.h:179
sdrv_etimer_t * cnt_bank[ETIMR_BASIC_TMR_NUM]
Definition: sdrv_etimer.h:181
uint32_t g0_period
Definition: sdrv_etimer.h:176
sdrv_etimer_clk_src_e etimer_clk_src
Definition: sdrv_etimer.h:170
bool int_init_flag
Definition: sdrv_etimer.h:166
uint32_t etimer_clk_div
Definition: sdrv_etimer.h:172
bool clk_set_flag
Definition: sdrv_etimer.h:168
sdrv etimer pwm_status
Definition: sdrv_etimer.h:187
uint32_t duty2
Definition: sdrv_etimer.h:194
uint32_t period
Definition: sdrv_etimer.h:189
uint32_t duty1
Definition: sdrv_etimer.h:192
sdrv tmr config
Definition: sdrv_etimer.h:109
uint32_t cnt_per_ms
Definition: sdrv_etimer.h:115
sdrv_etimer_basic_cnt_cfg_t * cnt_cfg
Definition: sdrv_etimer.h:111
uint32_t time_out
Definition: sdrv_etimer.h:113