1
6
7
8
9
14
15
16
17
18
19
22
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
80
85
86
89
91
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
125
130
131
134
136
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
168
173
174
177
179
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
211
216
217
220
222
223
224
225
226
227
228
229
230
231
232
233
234
235
238
243
244
247
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
267
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
/* ... */
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include <stdarg.h>
#include "esp_err.h"
#include "driver/mcpwm_types.h"5 includes
#ifdef __cplusplus
extern "C" {
#endif
/* ... */
typedef struct {
int gen_gpio_num;
struct {
uint32_t invert_pwm: 1;
uint32_t io_loop_back: 1;
uint32_t io_od_mode: 1;
uint32_t pull_up: 1;
uint32_t pull_down: 1;
}{ ... } flags;
}{ ... } mcpwm_generator_config_t;
/* ... */
esp_err_t mcpwm_new_generator(mcpwm_oper_handle_t oper, const mcpwm_generator_config_t *config, mcpwm_gen_handle_t *ret_gen);
/* ... */
esp_err_t mcpwm_del_generator(mcpwm_gen_handle_t gen);
/* ... */
esp_err_t mcpwm_generator_set_force_level(mcpwm_gen_handle_t gen, int level, bool hold_on);
/* ... */
typedef struct {
mcpwm_timer_direction_t direction;
mcpwm_timer_event_t event;
mcpwm_generator_action_t action;
}{ ... } mcpwm_gen_timer_event_action_t;
/* ... */
#define MCPWM_GEN_TIMER_EVENT_ACTION(dir, ev, act) \
(mcpwm_gen_timer_event_action_t) { .direction = dir, .event = ev, .action = act }...
#define MCPWM_GEN_TIMER_EVENT_ACTION_END() \
(mcpwm_gen_timer_event_action_t) { .event = MCPWM_TIMER_EVENT_INVALID }...
/* ... */
esp_err_t mcpwm_generator_set_action_on_timer_event(mcpwm_gen_handle_t gen, mcpwm_gen_timer_event_action_t ev_act);
/* ... */
esp_err_t mcpwm_generator_set_actions_on_timer_event(mcpwm_gen_handle_t gen, mcpwm_gen_timer_event_action_t ev_act, ...);
/* ... */
typedef struct {
mcpwm_timer_direction_t direction;
mcpwm_cmpr_handle_t comparator;
mcpwm_generator_action_t action;
}{ ... } mcpwm_gen_compare_event_action_t;
/* ... */
#define MCPWM_GEN_COMPARE_EVENT_ACTION(dir, cmp, act) \
(mcpwm_gen_compare_event_action_t) { .direction = dir, .comparator = cmp, .action = act }...
#define MCPWM_GEN_COMPARE_EVENT_ACTION_END() \
(mcpwm_gen_compare_event_action_t) { .comparator = NULL }...
/* ... */
esp_err_t mcpwm_generator_set_action_on_compare_event(mcpwm_gen_handle_t generator, mcpwm_gen_compare_event_action_t ev_act);
/* ... */
esp_err_t mcpwm_generator_set_actions_on_compare_event(mcpwm_gen_handle_t generator, mcpwm_gen_compare_event_action_t ev_act, ...);
/* ... */
typedef struct {
mcpwm_timer_direction_t direction;
mcpwm_operator_brake_mode_t brake_mode;
mcpwm_generator_action_t action;
}{ ... } mcpwm_gen_brake_event_action_t;
/* ... */
#define MCPWM_GEN_BRAKE_EVENT_ACTION(dir, mode, act) \
(mcpwm_gen_brake_event_action_t) { .direction = dir, .brake_mode = mode, .action = act }...
#define MCPWM_GEN_BRAKE_EVENT_ACTION_END() \
(mcpwm_gen_brake_event_action_t) { .brake_mode = MCPWM_OPER_BRAKE_MODE_INVALID }...
/* ... */
esp_err_t mcpwm_generator_set_action_on_brake_event(mcpwm_gen_handle_t generator, mcpwm_gen_brake_event_action_t ev_act);
/* ... */
esp_err_t mcpwm_generator_set_actions_on_brake_event(mcpwm_gen_handle_t generator, mcpwm_gen_brake_event_action_t ev_act, ...);
/* ... */
typedef struct {
mcpwm_timer_direction_t direction;
mcpwm_fault_handle_t fault;
mcpwm_generator_action_t action;
}{ ... } mcpwm_gen_fault_event_action_t;
/* ... */
#define MCPWM_GEN_FAULT_EVENT_ACTION(dir, flt, act) \
(mcpwm_gen_fault_event_action_t) { .direction = dir, .fault = flt, .action = act }...
/* ... */
esp_err_t mcpwm_generator_set_action_on_fault_event(mcpwm_gen_handle_t generator, mcpwm_gen_fault_event_action_t ev_act);
/* ... */
typedef struct {
mcpwm_timer_direction_t direction;
mcpwm_sync_handle_t sync;
mcpwm_generator_action_t action;
}{ ... } mcpwm_gen_sync_event_action_t;
/* ... */
#define MCPWM_GEN_SYNC_EVENT_ACTION(dir, syn, act) \
(mcpwm_gen_sync_event_action_t) { .direction = dir, .sync = syn, .action = act }...
/* ... */
esp_err_t mcpwm_generator_set_action_on_sync_event(mcpwm_gen_handle_t generator, mcpwm_gen_sync_event_action_t ev_act);
/* ... */
typedef struct {
uint32_t posedge_delay_ticks;
uint32_t negedge_delay_ticks;
struct {
uint32_t invert_output: 1;
}{ ... } flags;
}{ ... } mcpwm_dead_time_config_t;
/* ... */
esp_err_t mcpwm_generator_set_dead_time(mcpwm_gen_handle_t in_generator, mcpwm_gen_handle_t out_generator, const mcpwm_dead_time_config_t *config);
#ifdef __cplusplus
}{...}
#endif