1 /**************************************************************************//**
2 * @file epwm.c
3 * @version V3.00
4 * $Revision: 3 $
5 * @brief EPWM driver source file
6 *
7 * SPDX-License-Identifier: Apache-2.0
8 * @copyright (C) 2021 Nuvoton Technology Corp. All rights reserved.
9 *****************************************************************************/
10 #include "NuMicro.h"
11
12 /** @addtogroup Standard_Driver Standard Driver
13 @{
14 */
15
16 /** @addtogroup EPWM_Driver EPWM Driver
17 @{
18 */
19
20
21 /** @addtogroup EPWM_EXPORTED_FUNCTIONS EPWM Exported Functions
22 @{
23 */
24
25 /**
26 * @brief Configure EPWM capture and get the nearest unit time.
27 * @param[in] epwm The pointer of the specified EPWM module
28 * - EPWM0 : EPWM Group 0
29 * - EPWM1 : EPWM Group 1
30 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
31 * @param[in] u32UnitTimeNsec The unit time of counter
32 * @param[in] u32CaptureEdge The condition to latch the counter. This parameter is not used
33 * @return The nearest unit time in nano second.
34 * @details This function is used to Configure EPWM capture and get the nearest unit time.
35 */
EPWM_ConfigCaptureChannel(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32UnitTimeNsec,uint32_t u32CaptureEdge)36 uint32_t EPWM_ConfigCaptureChannel(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32UnitTimeNsec, uint32_t u32CaptureEdge)
37 {
38 uint32_t u32Src;
39 uint32_t u32EPWMClockSrc;
40 uint32_t u32NearestUnitTimeNsec;
41 uint32_t u16Prescale = 1U, u16CNR = 0xFFFFU;
42
43 if(epwm == EPWM0)
44 {
45 u32Src = CLK->CLKSEL2 & CLK_CLKSEL2_EPWM0SEL_Msk;
46 }
47 else /* (epwm == EPWM1) */
48 {
49 u32Src = CLK->CLKSEL2 & CLK_CLKSEL2_EPWM1SEL_Msk;
50 }
51
52 if(u32Src == 0U)
53 {
54 /* clock source is from PLL clock */
55 u32EPWMClockSrc = CLK_GetPLLClockFreq();
56 }
57 else
58 {
59 /* clock source is from PCLK */
60 SystemCoreClockUpdate();
61 if(epwm == EPWM0)
62 {
63 u32EPWMClockSrc = CLK_GetPCLK0Freq();
64 }
65 else /* (epwm == EPWM1) */
66 {
67 u32EPWMClockSrc = CLK_GetPCLK1Freq();
68 }
69 }
70
71 u32EPWMClockSrc /= 1000U;
72 for(u16Prescale = 1U; u16Prescale <= 0x1000U; u16Prescale++)
73 {
74 uint32_t u32Exit = 0U;
75 u32NearestUnitTimeNsec = (1000000U * u16Prescale) / u32EPWMClockSrc;
76 if(u32NearestUnitTimeNsec < u32UnitTimeNsec)
77 {
78 if(u16Prescale == 0x1000U) /* limit to the maximum unit time(nano second) */
79 {
80 u32Exit = 1U;
81 }
82 else
83 {
84 u32Exit = 0U;
85 }
86 if(!((1000000U * (u16Prescale + 1U) > (u32NearestUnitTimeNsec * u32EPWMClockSrc))))
87 {
88 u32Exit = 1U;
89 }
90 else
91 {
92 u32Exit = 0U;
93 }
94 }
95 else
96 {
97 u32Exit = 1U;
98 }
99 if (u32Exit == 1U)
100 {
101 break;
102 }
103 else {}
104 }
105
106 /* convert to real register value */
107 u16Prescale -= 1U;
108 EPWM_SET_PRESCALER(epwm, u32ChannelNum, u16Prescale);
109
110 /* set EPWM to down count type(edge aligned) */
111 (epwm)->CTL1 = ((epwm)->CTL1 & ~(EPWM_CTL1_CNTTYPE0_Msk << (u32ChannelNum << 1U))) | (1UL << (u32ChannelNum << 1U));
112 /* set EPWM to auto-reload mode */
113 (epwm)->CTL1 &= ~(EPWM_CTL1_CNTMODE0_Msk << u32ChannelNum);
114 EPWM_SET_CNR(epwm, u32ChannelNum, u16CNR);
115
116 return (u32NearestUnitTimeNsec);
117 }
118
119 /**
120 * @brief This function Configure EPWM generator and get the nearest frequency in edge aligned(up counter type) auto-reload mode
121 * @param[in] epwm The pointer of the specified EPWM module
122 * - EPWM0 : EPWM Group 0
123 * - EPWM1 : EPWM Group 1
124 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
125 * @param[in] u32Frequency Target generator frequency
126 * @param[in] u32DutyCycle Target generator duty cycle percentage. Valid range are between 0 ~ 100. 10 means 10%, 20 means 20%...
127 * @return Nearest frequency clock in nano second
128 * @note This function is used for initial stage.
129 * To change duty cycle later, it should get the configured period value and calculate the new comparator value.
130 */
EPWM_ConfigOutputChannel(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Frequency,uint32_t u32DutyCycle)131 uint32_t EPWM_ConfigOutputChannel(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Frequency, uint32_t u32DutyCycle)
132 {
133 uint32_t u32Src;
134 uint32_t u32EPWMClockSrc;
135 uint32_t i;
136 uint32_t u32Prescale = 1U, u32CNR = 0xFFFFU;
137
138 if(epwm == EPWM0)
139 {
140 u32Src = CLK->CLKSEL2 & CLK_CLKSEL2_EPWM0SEL_Msk;
141 }
142 else /* (epwm == EPWM1) */
143 {
144 u32Src = CLK->CLKSEL2 & CLK_CLKSEL2_EPWM1SEL_Msk;
145 }
146
147 if(u32Src == 0U)
148 {
149 /* clock source is from PLL clock */
150 u32EPWMClockSrc = CLK_GetPLLClockFreq();
151 }
152 else
153 {
154 /* clock source is from PCLK */
155 SystemCoreClockUpdate();
156 if(epwm == EPWM0)
157 {
158 u32EPWMClockSrc = CLK_GetPCLK0Freq();
159 }
160 else /* (epwm == EPWM1) */
161 {
162 u32EPWMClockSrc = CLK_GetPCLK1Freq();
163 }
164 }
165
166 for(u32Prescale = 1U; u32Prescale < 0xFFFU; u32Prescale++) /* prescale could be 0~0xFFF */
167 {
168 i = (u32EPWMClockSrc / u32Frequency) / u32Prescale;
169 /* If target value is larger than CNR, need to use a larger prescaler */
170 if(i < (0x10000U))
171 {
172 u32CNR = i;
173 break;
174 }
175 }
176 /* Store return value here 'cos we're gonna change u16Prescale & u16CNR to the real value to fill into register */
177 i = u32EPWMClockSrc / (u32Prescale * u32CNR);
178
179 /* convert to real register value */
180 u32Prescale -= 1U;
181 EPWM_SET_PRESCALER(epwm, (u32ChannelNum), u32Prescale);
182 /* set EPWM to up counter type(edge aligned) and auto-reload mode */
183 (epwm)->CTL1 = ((epwm)->CTL1 & ~((EPWM_CTL1_CNTTYPE0_Msk << (u32ChannelNum << 1U))|((1UL << EPWM_CTL1_CNTMODE0_Pos) << u32ChannelNum)));
184
185 u32CNR -= 1U;
186 EPWM_SET_CNR(epwm, u32ChannelNum, u32CNR);
187 EPWM_SET_CMR(epwm, u32ChannelNum, u32DutyCycle * (u32CNR + 1U) / 100U);
188
189 (epwm)->WGCTL0 = ((epwm)->WGCTL0 & ~((EPWM_WGCTL0_PRDPCTL0_Msk | EPWM_WGCTL0_ZPCTL0_Msk) << (u32ChannelNum << 1U))) | \
190 ((uint32_t)EPWM_OUTPUT_HIGH << ((u32ChannelNum << 1U) + (uint32_t)EPWM_WGCTL0_ZPCTL0_Pos));
191 (epwm)->WGCTL1 = ((epwm)->WGCTL1 & ~((EPWM_WGCTL1_CMPDCTL0_Msk | EPWM_WGCTL1_CMPUCTL0_Msk) << (u32ChannelNum << 1U))) | \
192 ((uint32_t)EPWM_OUTPUT_LOW << ((u32ChannelNum << 1U) + (uint32_t)EPWM_WGCTL1_CMPUCTL0_Pos));
193
194 return(i);
195 }
196
197 /**
198 * @brief Start EPWM module
199 * @param[in] epwm The pointer of the specified EPWM module
200 * - EPWM0 : EPWM Group 0
201 * - EPWM1 : EPWM Group 1
202 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel.
203 * Bit 0 is channel 0, bit 1 is channel 1...
204 * @return None
205 * @details This function is used to start EPWM module.
206 */
EPWM_Start(EPWM_T * epwm,uint32_t u32ChannelMask)207 void EPWM_Start(EPWM_T *epwm, uint32_t u32ChannelMask)
208 {
209 (epwm)->CNTEN |= u32ChannelMask;
210 }
211
212 /**
213 * @brief Stop EPWM module
214 * @param[in] epwm The pointer of the specified EPWM module
215 * - EPWM0 : EPWM Group 0
216 * - EPWM1 : EPWM Group 1
217 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel.
218 * Bit 0 is channel 0, bit 1 is channel 1...
219 * @return None
220 * @details This function is used to stop EPWM module.
221 */
EPWM_Stop(EPWM_T * epwm,uint32_t u32ChannelMask)222 void EPWM_Stop(EPWM_T *epwm, uint32_t u32ChannelMask)
223 {
224 uint32_t i;
225 for(i = 0U; i < EPWM_CHANNEL_NUM; i ++)
226 {
227 if(u32ChannelMask & (1UL << i))
228 {
229 (epwm)->PERIOD[i] = 0U;
230 }
231 }
232 }
233
234 /**
235 * @brief Stop EPWM generation immediately by clear channel enable bit
236 * @param[in] epwm The pointer of the specified EPWM module
237 * - EPWM0 : EPWM Group 0
238 * - EPWM1 : EPWM Group 1
239 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel.
240 * Bit 0 is channel 0, bit 1 is channel 1...
241 * @return None
242 * @details This function is used to stop EPWM generation immediately by clear channel enable bit.
243 */
EPWM_ForceStop(EPWM_T * epwm,uint32_t u32ChannelMask)244 void EPWM_ForceStop(EPWM_T *epwm, uint32_t u32ChannelMask)
245 {
246 (epwm)->CNTEN &= ~u32ChannelMask;
247 }
248
249 /**
250 * @brief Enable selected channel to trigger ADC
251 * @param[in] epwm The pointer of the specified EPWM module
252 * - EPWM0 : EPWM Group 0
253 * - EPWM1 : EPWM Group 1
254 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
255 * @param[in] u32Condition The condition to trigger ADC. Combination of following conditions:
256 * - \ref EPWM_TRG_ADC_EVEN_ZERO
257 * - \ref EPWM_TRG_ADC_EVEN_PERIOD
258 * - \ref EPWM_TRG_ADC_EVEN_ZERO_PERIOD
259 * - \ref EPWM_TRG_ADC_EVEN_COMPARE_UP
260 * - \ref EPWM_TRG_ADC_EVEN_COMPARE_DOWN
261 * - \ref EPWM_TRG_ADC_ODD_ZERO
262 * - \ref EPWM_TRG_ADC_ODD_PERIOD
263 * - \ref EPWM_TRG_ADC_ODD_ZERO_PERIOD
264 * - \ref EPWM_TRG_ADC_ODD_COMPARE_UP
265 * - \ref EPWM_TRG_ADC_ODD_COMPARE_DOWN
266 * - \ref EPWM_TRG_ADC_CH_0_FREE_CMP_UP
267 * - \ref EPWM_TRG_ADC_CH_0_FREE_CMP_DOWN
268 * - \ref EPWM_TRG_ADC_CH_2_FREE_CMP_UP
269 * - \ref EPWM_TRG_ADC_CH_2_FREE_CMP_DOWN
270 * - \ref EPWM_TRG_ADC_CH_4_FREE_CMP_UP
271 * - \ref EPWM_TRG_ADC_CH_4_FREE_CMP_DOWN
272 * @return None
273 * @details This function is used to enable selected channel to trigger ADC.
274 */
EPWM_EnableADCTrigger(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Condition)275 void EPWM_EnableADCTrigger(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Condition)
276 {
277 if(u32ChannelNum < 4U)
278 {
279 (epwm)->EADCTS0 &= ~((EPWM_EADCTS0_TRGSEL0_Msk) << (u32ChannelNum << 3U));
280 (epwm)->EADCTS0 |= ((EPWM_EADCTS0_TRGEN0_Msk | u32Condition) << (u32ChannelNum << 3));
281 }
282 else
283 {
284 (epwm)->EADCTS1 &= ~((EPWM_EADCTS1_TRGSEL4_Msk) << ((u32ChannelNum - 4U) << 3U));
285 (epwm)->EADCTS1 |= ((EPWM_EADCTS1_TRGEN4_Msk | u32Condition) << ((u32ChannelNum - 4U) << 3U));
286 }
287 }
288
289 /**
290 * @brief Disable selected channel to trigger ADC
291 * @param[in] epwm The pointer of the specified EPWM module
292 * - EPWM0 : EPWM Group 0
293 * - EPWM1 : EPWM Group 1
294 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
295 * @return None
296 * @details This function is used to disable selected channel to trigger ADC.
297 */
EPWM_DisableADCTrigger(EPWM_T * epwm,uint32_t u32ChannelNum)298 void EPWM_DisableADCTrigger(EPWM_T *epwm, uint32_t u32ChannelNum)
299 {
300 if(u32ChannelNum < 4U)
301 {
302 (epwm)->EADCTS0 &= ~(EPWM_EADCTS0_TRGEN0_Msk << (u32ChannelNum << 3U));
303 }
304 else
305 {
306 (epwm)->EADCTS1 &= ~(EPWM_EADCTS1_TRGEN4_Msk << ((u32ChannelNum - 4U) << 3U));
307 }
308 }
309
310 /**
311 * @brief Enable and configure trigger ADC prescale
312 * @param[in] epwm The pointer of the specified EPWM module
313 * - EPWM0 : EPWM Group 0
314 * - EPWM1 : EPWM Group 1
315 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
316 * @param[in] u32Prescale ADC prescale. Valid values are between 0 to 0xF.
317 * @param[in] u32PrescaleCnt ADC prescale counter. Valid values are between 0 to 0xF.
318 * @retval 0 Success.
319 * @retval -1 Failed.
320 * @details This function is used to enable and configure trigger ADC prescale.
321 * @note User can configure only when ADC trigger prescale is disabled.
322 * @note ADC prescale counter must less than ADC prescale.
323 */
EPWM_EnableADCTriggerPrescale(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Prescale,uint32_t u32PrescaleCnt)324 int32_t EPWM_EnableADCTriggerPrescale(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Prescale, uint32_t u32PrescaleCnt)
325 {
326 /* User can write only when PSCENn(n = 0 ~ 5) is 0 */
327 if ((epwm)->EADCPSCCTL & (1UL << u32ChannelNum))
328 return (-1);
329
330 if(u32ChannelNum < 4UL)
331 {
332 (epwm)->EADCPSC0 = ((epwm)->EADCPSC0 & ~((EPWM_EADCPSC0_EADCPSC0_Msk) << (u32ChannelNum << 3))) | \
333 (u32Prescale << (u32ChannelNum << 3));
334 (epwm)->EADCPSCNT0 = ((epwm)->EADCPSCNT0 & ~((EPWM_EADCPSCNT0_PSCNT0_Msk) << (u32ChannelNum << 3))) | \
335 (u32PrescaleCnt << (u32ChannelNum << 3));
336 }
337 else
338 {
339 (epwm)->EADCPSC1 = ((epwm)->EADCPSC1 & ~((EPWM_EADCPSC1_EADCPSC4_Msk) << ((u32ChannelNum - 4UL) << 3))) | \
340 (u32Prescale << ((u32ChannelNum - 4UL) << 3));
341 (epwm)->EADCPSCNT1 = ((epwm)->EADCPSCNT1 & ~((EPWM_EADCPSCNT1_PSCNT4_Msk) << ((u32ChannelNum - 4UL) << 3))) | \
342 (u32PrescaleCnt << ((u32ChannelNum - 4UL) << 3));
343 }
344
345 (epwm)->EADCPSCCTL |= EPWM_EADCPSCCTL_PSCEN0_Msk << u32ChannelNum;
346
347 return 0;
348 }
349
350 /**
351 * @brief Disable Trigger ADC prescale function
352 * @param[in] epwm The pointer of the specified EPWM module
353 * - EPWM0 : EPWM Group 0
354 * - EPWM1 : EPWM Group 1
355 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
356 * @return None
357 * @details This function is used to disable trigger ADC prescale.
358 */
EPWM_DisableADCTriggerPrescale(EPWM_T * epwm,uint32_t u32ChannelNum)359 void EPWM_DisableADCTriggerPrescale(EPWM_T *epwm, uint32_t u32ChannelNum)
360 {
361 (epwm)->EADCPSCCTL &= ~(EPWM_EADCPSCCTL_PSCEN0_Msk << u32ChannelNum);
362 }
363
364 /**
365 * @brief Clear selected channel trigger ADC flag
366 * @param[in] epwm The pointer of the specified EPWM module
367 * - EPWM0 : EPWM Group 0
368 * - EPWM1 : EPWM Group 1
369 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
370 * @param[in] u32Condition This parameter is not used
371 * @return None
372 * @details This function is used to clear selected channel trigger ADC flag.
373 */
EPWM_ClearADCTriggerFlag(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Condition)374 void EPWM_ClearADCTriggerFlag(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Condition)
375 {
376 (epwm)->STATUS = (EPWM_STATUS_EADCTRGF0_Msk << u32ChannelNum);
377 }
378
379 /**
380 * @brief Get selected channel trigger ADC flag
381 * @param[in] epwm The pointer of the specified EPWM module
382 * - EPWM0 : EPWM Group 0
383 * - EPWM1 : EPWM Group 1
384 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
385 * @retval 0 The specified channel trigger ADC to start of conversion flag is not set
386 * @retval 1 The specified channel trigger ADC to start of conversion flag is set
387 * @details This function is used to get EPWM trigger ADC to start of conversion flag for specified channel.
388 */
EPWM_GetADCTriggerFlag(EPWM_T * epwm,uint32_t u32ChannelNum)389 uint32_t EPWM_GetADCTriggerFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
390 {
391 return (((epwm)->STATUS & (EPWM_STATUS_EADCTRGF0_Msk << u32ChannelNum))?1UL:0UL);
392 }
393
394 /**
395 * @brief Enable selected channel to trigger DAC
396 * @param[in] epwm The pointer of the specified EPWM module
397 * - EPWM0 : EPWM Group 0
398 * - EPWM1 : EPWM Group 1
399 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
400 * @param[in] u32Condition The condition to trigger DAC. Combination of following conditions:
401 * - \ref EPWM_TRIGGER_DAC_ZERO
402 * - \ref EPWM_TRIGGER_DAC_PERIOD
403 * - \ref EPWM_TRIGGER_DAC_COMPARE_UP
404 * - \ref EPWM_TRIGGER_DAC_COMPARE_DOWN
405 * @return None
406 * @details This function is used to enable selected channel to trigger DAC.
407 */
EPWM_EnableDACTrigger(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Condition)408 void EPWM_EnableDACTrigger(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Condition)
409 {
410 (epwm)->DACTRGEN |= (u32Condition << u32ChannelNum);
411 }
412
413 /**
414 * @brief Disable selected channel to trigger DAC
415 * @param[in] epwm The pointer of the specified EPWM module
416 * - EPWM0 : EPWM Group 0
417 * - EPWM1 : EPWM Group 1
418 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
419 * @return None
420 * @details This function is used to disable selected channel to trigger DAC.
421 */
EPWM_DisableDACTrigger(EPWM_T * epwm,uint32_t u32ChannelNum)422 void EPWM_DisableDACTrigger(EPWM_T *epwm, uint32_t u32ChannelNum)
423 {
424 (epwm)->DACTRGEN &= ~((EPWM_TRIGGER_DAC_ZERO | EPWM_TRIGGER_DAC_PERIOD | EPWM_TRIGGER_DAC_COMPARE_UP | \
425 EPWM_TRIGGER_DAC_COMPARE_DOWN) << u32ChannelNum);
426 }
427
428 /**
429 * @brief Clear selected channel trigger DAC flag
430 * @param[in] epwm The pointer of the specified EPWM module
431 * - EPWM0 : EPWM Group 0
432 * - EPWM1 : EPWM Group 1
433 * @param[in] u32ChannelNum EPWM channel number. This parameter is not used
434 * @param[in] u32Condition The condition to trigger DAC. This parameter is not used
435 * @return None
436 * @details This function is used to clear selected channel trigger DAC flag.
437 */
EPWM_ClearDACTriggerFlag(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Condition)438 void EPWM_ClearDACTriggerFlag(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Condition)
439 {
440 (epwm)->STATUS = EPWM_STATUS_DACTRGF_Msk;
441 }
442
443 /**
444 * @brief Get selected channel trigger DAC flag
445 * @param[in] epwm The pointer of the specified EPWM module
446 * - EPWM0 : EPWM Group 0
447 * - EPWM1 : EPWM Group 1
448 * @param[in] u32ChannelNum EPWM channel number. This parameter is not used
449 * @retval 0 The specified channel trigger DAC to start of conversion flag is not set
450 * @retval 1 The specified channel trigger DAC to start of conversion flag is set
451 * @details This function is used to get selected channel trigger DAC flag.
452 */
EPWM_GetDACTriggerFlag(EPWM_T * epwm,uint32_t u32ChannelNum)453 uint32_t EPWM_GetDACTriggerFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
454 {
455 return (((epwm)->STATUS & EPWM_STATUS_DACTRGF_Msk)?1UL:0UL);
456 }
457
458 /**
459 * @brief This function enable fault brake of selected channel(s)
460 * @param[in] epwm The pointer of the specified EPWM module
461 * - EPWM0 : EPWM Group 0
462 * - EPWM1 : EPWM Group 1
463 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel.
464 * @param[in] u32LevelMask Output high or low while fault brake occurs, each bit represent the level of a channel
465 * while fault brake occurs. Bit 0 represents channel 0, bit 1 represents channel 1...
466 * @param[in] u32BrakeSource Fault brake source, could be one of following source
467 * - \ref EPWM_FB_EDGE_ADCRM
468 * - \ref EPWM_FB_EDGE_ACMP0
469 * - \ref EPWM_FB_EDGE_ACMP1
470 * - \ref EPWM_FB_EDGE_BKP0
471 * - \ref EPWM_FB_EDGE_BKP1
472 * - \ref EPWM_FB_EDGE_SYS_CSS
473 * - \ref EPWM_FB_EDGE_SYS_BOD
474 * - \ref EPWM_FB_EDGE_SYS_RAM
475 * - \ref EPWM_FB_EDGE_SYS_COR
476 * - \ref EPWM_FB_LEVEL_ADCRM
477 * - \ref EPWM_FB_LEVEL_ACMP0
478 * - \ref EPWM_FB_LEVEL_ACMP1
479 * - \ref EPWM_FB_LEVEL_BKP0
480 * - \ref EPWM_FB_LEVEL_BKP1
481 * - \ref EPWM_FB_LEVEL_SYS_CSS
482 * - \ref EPWM_FB_LEVEL_SYS_BOD
483 * - \ref EPWM_FB_LEVEL_SYS_RAM
484 * - \ref EPWM_FB_LEVEL_SYS_COR
485 * @return None
486 * @details This function is used to enable fault brake of selected channel(s).
487 * The write-protection function should be disabled before using this function.
488 */
EPWM_EnableFaultBrake(EPWM_T * epwm,uint32_t u32ChannelMask,uint32_t u32LevelMask,uint32_t u32BrakeSource)489 void EPWM_EnableFaultBrake(EPWM_T *epwm, uint32_t u32ChannelMask, uint32_t u32LevelMask, uint32_t u32BrakeSource)
490 {
491 uint32_t i;
492
493 for(i = 0U; i < EPWM_CHANNEL_NUM; i ++)
494 {
495 if(u32ChannelMask & (1UL << i))
496 {
497 if((u32BrakeSource == EPWM_FB_EDGE_SYS_CSS) || (u32BrakeSource == EPWM_FB_EDGE_SYS_BOD) || \
498 (u32BrakeSource == EPWM_FB_EDGE_SYS_RAM) || (u32BrakeSource == EPWM_FB_EDGE_SYS_COR) || \
499 (u32BrakeSource == EPWM_FB_LEVEL_SYS_CSS) || (u32BrakeSource == EPWM_FB_LEVEL_SYS_BOD) || \
500 (u32BrakeSource == EPWM_FB_LEVEL_SYS_RAM) || (u32BrakeSource == EPWM_FB_LEVEL_SYS_COR))
501 {
502 (epwm)->BRKCTL[i >> 1U] |= (u32BrakeSource & (EPWM_BRKCTL0_1_SYSEBEN_Msk | EPWM_BRKCTL0_1_SYSLBEN_Msk));
503 (epwm)->FAILBRK |= (u32BrakeSource & 0xFU);
504 }
505 else
506 {
507 (epwm)->BRKCTL[i >> 1U] |= u32BrakeSource;
508 }
509 }
510
511 if(u32LevelMask & (1UL << i))
512 {
513 if((i & 0x1U) == 0U)
514 {
515 /* set brake action as high level for even channel */
516 (epwm)->BRKCTL[i >> 1] &= ~EPWM_BRKCTL0_1_BRKAEVEN_Msk;
517 (epwm)->BRKCTL[i >> 1] |= ((3U) << EPWM_BRKCTL0_1_BRKAEVEN_Pos);
518 }
519 else
520 {
521 /* set brake action as high level for odd channel */
522 (epwm)->BRKCTL[i >> 1] &= ~EPWM_BRKCTL0_1_BRKAODD_Msk;
523 (epwm)->BRKCTL[i >> 1] |= ((3U) << EPWM_BRKCTL0_1_BRKAODD_Pos);
524 }
525 }
526 else
527 {
528 if((i & 0x1U) == 0U)
529 {
530 /* set brake action as low level for even channel */
531 (epwm)->BRKCTL[i >> 1U] &= ~EPWM_BRKCTL0_1_BRKAEVEN_Msk;
532 (epwm)->BRKCTL[i >> 1U] |= ((2U) << EPWM_BRKCTL0_1_BRKAEVEN_Pos);
533 }
534 else
535 {
536 /* set brake action as low level for odd channel */
537 (epwm)->BRKCTL[i >> 1U] &= ~EPWM_BRKCTL0_1_BRKAODD_Msk;
538 (epwm)->BRKCTL[i >> 1U] |= ((2U) << EPWM_BRKCTL0_1_BRKAODD_Pos);
539 }
540 }
541 }
542 }
543
544 /**
545 * @brief Enable capture of selected channel(s)
546 * @param[in] epwm The pointer of the specified EPWM module
547 * - EPWM0 : EPWM Group 0
548 * - EPWM1 : EPWM Group 1
549 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel.
550 * Bit 0 is channel 0, bit 1 is channel 1...
551 * @return None
552 * @details This function is used to enable capture of selected channel(s).
553 */
EPWM_EnableCapture(EPWM_T * epwm,uint32_t u32ChannelMask)554 void EPWM_EnableCapture(EPWM_T *epwm, uint32_t u32ChannelMask)
555 {
556 (epwm)->CAPINEN |= u32ChannelMask;
557 (epwm)->CAPCTL |= u32ChannelMask;
558 }
559
560 /**
561 * @brief Disable capture of selected channel(s)
562 * @param[in] epwm The pointer of the specified EPWM module
563 * - EPWM0 : EPWM Group 0
564 * - EPWM1 : EPWM Group 1
565 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel.
566 * Bit 0 is channel 0, bit 1 is channel 1...
567 * @return None
568 * @details This function is used to disable capture of selected channel(s).
569 */
EPWM_DisableCapture(EPWM_T * epwm,uint32_t u32ChannelMask)570 void EPWM_DisableCapture(EPWM_T *epwm, uint32_t u32ChannelMask)
571 {
572 (epwm)->CAPINEN &= ~u32ChannelMask;
573 (epwm)->CAPCTL &= ~u32ChannelMask;
574 }
575
576 /**
577 * @brief Enables EPWM output generation of selected channel(s)
578 * @param[in] epwm The pointer of the specified EPWM module
579 * - EPWM0 : EPWM Group 0
580 * - EPWM1 : EPWM Group 1
581 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel.
582 * Set bit 0 to 1 enables channel 0 output, set bit 1 to 1 enables channel 1 output...
583 * @return None
584 * @details This function is used to enable EPWM output generation of selected channel(s).
585 */
EPWM_EnableOutput(EPWM_T * epwm,uint32_t u32ChannelMask)586 void EPWM_EnableOutput(EPWM_T *epwm, uint32_t u32ChannelMask)
587 {
588 (epwm)->POEN |= u32ChannelMask;
589 }
590
591 /**
592 * @brief Disables EPWM output generation of selected channel(s)
593 * @param[in] epwm The pointer of the specified EPWM module
594 * - EPWM0 : EPWM Group 0
595 * - EPWM1 : EPWM Group 1
596 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel
597 * Set bit 0 to 1 disables channel 0 output, set bit 1 to 1 disables channel 1 output...
598 * @return None
599 * @details This function is used to disable EPWM output generation of selected channel(s).
600 */
EPWM_DisableOutput(EPWM_T * epwm,uint32_t u32ChannelMask)601 void EPWM_DisableOutput(EPWM_T *epwm, uint32_t u32ChannelMask)
602 {
603 (epwm)->POEN &= ~u32ChannelMask;
604 }
605
606 /**
607 * @brief Enables PDMA transfer of selected channel for EPWM capture
608 * @param[in] epwm The pointer of the specified EPWM module
609 * - EPWM0 : EPWM Group 0
610 * - EPWM1 : EPWM Group 1
611 * @param[in] u32ChannelNum EPWM channel number.
612 * @param[in] u32RisingFirst The capture order is rising, falling first. Every two channels share the same setting. Valid values are TRUE and FALSE.
613 * @param[in] u32Mode Captured data transferred by PDMA interrupt type. It could be either
614 * - \ref EPWM_CAPTURE_PDMA_RISING_LATCH
615 * - \ref EPWM_CAPTURE_PDMA_FALLING_LATCH
616 * - \ref EPWM_CAPTURE_PDMA_RISING_FALLING_LATCH
617 * @return None
618 * @details This function is used to enable PDMA transfer of selected channel(s) for EPWM capture.
619 * @note This function can only selects even or odd channel of pairs to do PDMA transfer.
620 */
EPWM_EnablePDMA(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32RisingFirst,uint32_t u32Mode)621 void EPWM_EnablePDMA(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32RisingFirst, uint32_t u32Mode)
622 {
623 uint32_t u32IsOddCh;
624 u32IsOddCh = u32ChannelNum & 0x1U;
625 (epwm)->PDMACTL = ((epwm)->PDMACTL & ~((EPWM_PDMACTL_CHSEL0_1_Msk | EPWM_PDMACTL_CAPORD0_1_Msk | EPWM_PDMACTL_CAPMOD0_1_Msk) << ((u32ChannelNum >> 1U) << 3U))) | \
626 (((u32IsOddCh << EPWM_PDMACTL_CHSEL0_1_Pos) | (u32RisingFirst << EPWM_PDMACTL_CAPORD0_1_Pos) | \
627 u32Mode | EPWM_PDMACTL_CHEN0_1_Msk) << ((u32ChannelNum >> 1U) << 3U));
628 }
629
630 /**
631 * @brief Disables PDMA transfer of selected channel for EPWM capture
632 * @param[in] epwm The pointer of the specified EPWM module
633 * - EPWM0 : EPWM Group 0
634 * - EPWM1 : EPWM Group 1
635 * @param[in] u32ChannelNum EPWM channel number.
636 * @return None
637 * @details This function is used to enable PDMA transfer of selected channel(s) for EPWM capture.
638 */
EPWM_DisablePDMA(EPWM_T * epwm,uint32_t u32ChannelNum)639 void EPWM_DisablePDMA(EPWM_T *epwm, uint32_t u32ChannelNum)
640 {
641 (epwm)->PDMACTL &= ~(EPWM_PDMACTL_CHEN0_1_Msk << ((u32ChannelNum >> 1U) << 3U));
642 }
643
644 /**
645 * @brief Enable Dead zone of selected channel
646 * @param[in] epwm The pointer of the specified EPWM module
647 * - EPWM0 : EPWM Group 0
648 * - EPWM1 : EPWM Group 1
649 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
650 * @param[in] u32Duration Dead zone length in EPWM clock count, valid values are between 0~0xFFF, but 0 means there is no Dead zone.
651 * @return None
652 * @details This function is used to enable Dead zone of selected channel.
653 * The write-protection function should be disabled before using this function.
654 * @note Every two channels share the same setting.
655 */
EPWM_EnableDeadZone(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Duration)656 void EPWM_EnableDeadZone(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Duration)
657 {
658 /* every two channels share the same setting */
659 (epwm)->DTCTL |= (EPWM_DTCTL_RDTEN0_Msk << ((u32ChannelNum) >> 1U)) | (EPWM_DTCTL_FDTEN0_Msk << ((u32ChannelNum) >> 1U));
660 (epwm)->RDTCNT[(u32ChannelNum) >> 1U] = u32Duration;
661 (epwm)->FDTCNT[(u32ChannelNum) >> 1U] = u32Duration;
662 }
663
664 /**
665 * @brief Disable Dead zone of selected channel
666 * @param[in] epwm The pointer of the specified EPWM module
667 * - EPWM0 : EPWM Group 0
668 * - EPWM1 : EPWM Group 1
669 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
670 * @return None
671 * @details This function is used to disable Dead zone of selected channel.
672 * The write-protection function should be disabled before using this function.
673 */
EPWM_DisableDeadZone(EPWM_T * epwm,uint32_t u32ChannelNum)674 void EPWM_DisableDeadZone(EPWM_T *epwm, uint32_t u32ChannelNum)
675 {
676 /* every two channels shares the same setting */
677 (epwm)->DTCTL &= ~((EPWM_DTCTL_RDTEN0_Msk << ((u32ChannelNum) >> 1U)) | (EPWM_DTCTL_FDTEN0_Msk << ((u32ChannelNum) >> 1U)));
678 }
679
680 /**
681 * @brief Enable capture interrupt of selected channel.
682 * @param[in] epwm The pointer of the specified EPWM module
683 * - EPWM0 : EPWM Group 0
684 * - EPWM1 : EPWM Group 1
685 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
686 * @param[in] u32Edge Rising or falling edge to latch counter.
687 * - \ref EPWM_CAPTURE_INT_RISING_LATCH
688 * - \ref EPWM_CAPTURE_INT_FALLING_LATCH
689 * @return None
690 * @details This function is used to enable capture interrupt of selected channel.
691 */
EPWM_EnableCaptureInt(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Edge)692 void EPWM_EnableCaptureInt(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Edge)
693 {
694 (epwm)->CAPIEN |= (u32Edge << u32ChannelNum);
695 }
696
697 /**
698 * @brief Disable capture interrupt of selected channel.
699 * @param[in] epwm The pointer of the specified EPWM module
700 * - EPWM0 : EPWM Group 0
701 * - EPWM1 : EPWM Group 1
702 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
703 * @param[in] u32Edge Rising or falling edge to latch counter.
704 * - \ref EPWM_CAPTURE_INT_RISING_LATCH
705 * - \ref EPWM_CAPTURE_INT_FALLING_LATCH
706 * @return None
707 * @details This function is used to disable capture interrupt of selected channel.
708 */
EPWM_DisableCaptureInt(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Edge)709 void EPWM_DisableCaptureInt(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Edge)
710 {
711 (epwm)->CAPIEN &= ~(u32Edge << u32ChannelNum);
712 }
713
714 /**
715 * @brief Clear capture interrupt of selected channel.
716 * @param[in] epwm The pointer of the specified EPWM module
717 * - EPWM0 : EPWM Group 0
718 * - EPWM1 : EPWM Group 1
719 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
720 * @param[in] u32Edge Rising or falling edge to latch counter.
721 * - \ref EPWM_CAPTURE_INT_RISING_LATCH
722 * - \ref EPWM_CAPTURE_INT_FALLING_LATCH
723 * @return None
724 * @details This function is used to clear capture interrupt of selected channel.
725 */
EPWM_ClearCaptureIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32Edge)726 void EPWM_ClearCaptureIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32Edge)
727 {
728 (epwm)->CAPIF = (u32Edge << u32ChannelNum);
729 }
730
731 /**
732 * @brief Get capture interrupt of selected channel.
733 * @param[in] epwm The pointer of the specified EPWM module
734 * - EPWM0 : EPWM Group 0
735 * - EPWM1 : EPWM Group 1
736 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
737 * @retval 0 No capture interrupt
738 * @retval 1 Rising edge latch interrupt
739 * @retval 2 Falling edge latch interrupt
740 * @retval 3 Rising and falling latch interrupt
741 * @details This function is used to get capture interrupt of selected channel.
742 */
EPWM_GetCaptureIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum)743 uint32_t EPWM_GetCaptureIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
744 {
745 return (((((epwm)->CAPIF & (EPWM_CAPIF_CFLIF0_Msk << u32ChannelNum)) ? 1UL : 0UL) << 1) | \
746 (((epwm)->CAPIF & (EPWM_CAPIF_CRLIF0_Msk << u32ChannelNum)) ? 1UL : 0UL));
747 }
748 /**
749 * @brief Enable duty interrupt of selected channel
750 * @param[in] epwm The pointer of the specified EPWM module
751 * - EPWM0 : EPWM Group 0
752 * - EPWM1 : EPWM Group 1
753 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
754 * @param[in] u32IntDutyType Duty interrupt type, could be either
755 * - \ref EPWM_DUTY_INT_DOWN_COUNT_MATCH_CMP
756 * - \ref EPWM_DUTY_INT_UP_COUNT_MATCH_CMP
757 * @return None
758 * @details This function is used to enable duty interrupt of selected channel.
759 */
EPWM_EnableDutyInt(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32IntDutyType)760 void EPWM_EnableDutyInt(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32IntDutyType)
761 {
762 (epwm)->INTEN0 |= (u32IntDutyType << u32ChannelNum);
763 }
764
765 /**
766 * @brief Disable duty interrupt of selected channel
767 * @param[in] epwm The pointer of the specified EPWM module
768 * - EPWM0 : EPWM Group 0
769 * - EPWM1 : EPWM Group 1
770 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
771 * @return None
772 * @details This function is used to disable duty interrupt of selected channel.
773 */
EPWM_DisableDutyInt(EPWM_T * epwm,uint32_t u32ChannelNum)774 void EPWM_DisableDutyInt(EPWM_T *epwm, uint32_t u32ChannelNum)
775 {
776 (epwm)->INTEN0 &= ~((uint32_t)(EPWM_DUTY_INT_DOWN_COUNT_MATCH_CMP | EPWM_DUTY_INT_UP_COUNT_MATCH_CMP) << u32ChannelNum);
777 }
778
779 /**
780 * @brief Clear duty interrupt flag of selected channel
781 * @param[in] epwm The pointer of the specified EPWM module
782 * - EPWM0 : EPWM Group 0
783 * - EPWM1 : EPWM Group 1
784 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
785 * @return None
786 * @details This function is used to clear duty interrupt flag of selected channel.
787 */
EPWM_ClearDutyIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum)788 void EPWM_ClearDutyIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
789 {
790 (epwm)->INTSTS0 = (EPWM_INTSTS0_CMPUIF0_Msk | EPWM_INTSTS0_CMPDIF0_Msk) << u32ChannelNum;
791 }
792
793 /**
794 * @brief Get duty interrupt flag of selected channel
795 * @param[in] epwm The pointer of the specified EPWM module
796 * - EPWM0 : EPWM Group 0
797 * - EPWM1 : EPWM Group 1
798 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
799 * @return Duty interrupt flag of specified channel
800 * @retval 0 Duty interrupt did not occur
801 * @retval 1 Duty interrupt occurred
802 * @details This function is used to get duty interrupt flag of selected channel.
803 */
EPWM_GetDutyIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum)804 uint32_t EPWM_GetDutyIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
805 {
806 return ((((epwm)->INTSTS0 & ((EPWM_INTSTS0_CMPDIF0_Msk | EPWM_INTSTS0_CMPUIF0_Msk) << u32ChannelNum))) ? 1UL : 0UL);
807 }
808
809 /**
810 * @brief This function enable fault brake interrupt
811 * @param[in] epwm The pointer of the specified EPWM module
812 * @param[in] u32BrakeSource Fault brake source.
813 * - \ref EPWM_FB_EDGE
814 * - \ref EPWM_FB_LEVEL
815 * @return None
816 * @details This function is used to enable fault brake interrupt.
817 * The write-protection function should be disabled before using this function.
818 * @note Every two channels share the same setting.
819 */
EPWM_EnableFaultBrakeInt(EPWM_T * epwm,uint32_t u32BrakeSource)820 void EPWM_EnableFaultBrakeInt(EPWM_T *epwm, uint32_t u32BrakeSource)
821 {
822 (epwm)->INTEN1 |= (0x7UL << u32BrakeSource);
823 }
824
825 /**
826 * @brief This function disable fault brake interrupt
827 * @param[in] epwm The pointer of the specified EPWM module
828 * @param[in] u32BrakeSource Fault brake source.
829 * - \ref EPWM_FB_EDGE
830 * - \ref EPWM_FB_LEVEL
831 * @return None
832 * @details This function is used to disable fault brake interrupt.
833 * The write-protection function should be disabled before using this function.
834 * @note Every two channels share the same setting.
835 */
EPWM_DisableFaultBrakeInt(EPWM_T * epwm,uint32_t u32BrakeSource)836 void EPWM_DisableFaultBrakeInt(EPWM_T *epwm, uint32_t u32BrakeSource)
837 {
838 (epwm)->INTEN1 &= ~(0x7UL << u32BrakeSource);
839 }
840
841 /**
842 * @brief This function clear fault brake interrupt of selected source
843 * @param[in] epwm The pointer of the specified EPWM module
844 * @param[in] u32BrakeSource Fault brake source.
845 * - \ref EPWM_FB_EDGE
846 * - \ref EPWM_FB_LEVEL
847 * @return None
848 * @details This function is used to clear fault brake interrupt of selected source.
849 * The write-protection function should be disabled before using this function.
850 */
EPWM_ClearFaultBrakeIntFlag(EPWM_T * epwm,uint32_t u32BrakeSource)851 void EPWM_ClearFaultBrakeIntFlag(EPWM_T *epwm, uint32_t u32BrakeSource)
852 {
853 (epwm)->INTSTS1 = (0x3fUL << u32BrakeSource);
854 }
855
856 /**
857 * @brief This function get fault brake interrupt flag of selected source
858 * @param[in] epwm The pointer of the specified EPWM module
859 * @param[in] u32BrakeSource Fault brake source, could be either
860 * - \ref EPWM_FB_EDGE
861 * - \ref EPWM_FB_LEVEL
862 * @return Fault brake interrupt flag of specified source
863 * @retval 0 Fault brake interrupt did not occurred
864 * @retval 1 Fault brake interrupt occurred
865 * @details This function is used to get fault brake interrupt flag of selected source.
866 */
EPWM_GetFaultBrakeIntFlag(EPWM_T * epwm,uint32_t u32BrakeSource)867 uint32_t EPWM_GetFaultBrakeIntFlag(EPWM_T *epwm, uint32_t u32BrakeSource)
868 {
869 return (((epwm)->INTSTS1 & (0x3fUL << u32BrakeSource)) ? 1UL : 0UL);
870 }
871
872 /**
873 * @brief Enable period interrupt of selected channel
874 * @param[in] epwm The pointer of the specified EPWM module
875 * - EPWM0 : EPWM Group 0
876 * - EPWM1 : EPWM Group 1
877 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
878 * @param[in] u32IntPeriodType Period interrupt type. This parameter is not used.
879 * @return None
880 * @details This function is used to enable period interrupt of selected channel.
881 */
EPWM_EnablePeriodInt(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32IntPeriodType)882 void EPWM_EnablePeriodInt(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32IntPeriodType)
883 {
884 (epwm)->INTEN0 |= ((1UL << EPWM_INTEN0_PIEN0_Pos) << u32ChannelNum);
885 }
886
887 /**
888 * @brief Disable period interrupt of selected channel
889 * @param[in] epwm The pointer of the specified EPWM module
890 * - EPWM0 : EPWM Group 0
891 * - EPWM1 : EPWM Group 1
892 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
893 * @return None
894 * @details This function is used to disable period interrupt of selected channel.
895 */
EPWM_DisablePeriodInt(EPWM_T * epwm,uint32_t u32ChannelNum)896 void EPWM_DisablePeriodInt(EPWM_T *epwm, uint32_t u32ChannelNum)
897 {
898 (epwm)->INTEN0 &= ~((1UL << EPWM_INTEN0_PIEN0_Pos) << u32ChannelNum);
899 }
900
901 /**
902 * @brief Clear period interrupt of selected channel
903 * @param[in] epwm The pointer of the specified EPWM module
904 * - EPWM0 : EPWM Group 0
905 * - EPWM1 : EPWM Group 1
906 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
907 * @return None
908 * @details This function is used to clear period interrupt of selected channel.
909 */
EPWM_ClearPeriodIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum)910 void EPWM_ClearPeriodIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
911 {
912 (epwm)->INTSTS0 = ((1UL << EPWM_INTSTS0_PIF0_Pos) << u32ChannelNum);
913 }
914
915 /**
916 * @brief Get period interrupt of selected channel
917 * @param[in] epwm The pointer of the specified EPWM module
918 * - EPWM0 : EPWM Group 0
919 * - EPWM1 : EPWM Group 1
920 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
921 * @return Period interrupt flag of specified channel
922 * @retval 0 Period interrupt did not occur
923 * @retval 1 Period interrupt occurred
924 * @details This function is used to get period interrupt of selected channel.
925 */
EPWM_GetPeriodIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum)926 uint32_t EPWM_GetPeriodIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
927 {
928 return ((((epwm)->INTSTS0 & ((1UL << EPWM_INTSTS0_PIF0_Pos) << u32ChannelNum))) ? 1UL : 0UL);
929 }
930
931 /**
932 * @brief Enable zero interrupt of selected channel
933 * @param[in] epwm The pointer of the specified EPWM module
934 * - EPWM0 : EPWM Group 0
935 * - EPWM1 : EPWM Group 1
936 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
937 * @return None
938 * @details This function is used to enable zero interrupt of selected channel.
939 */
EPWM_EnableZeroInt(EPWM_T * epwm,uint32_t u32ChannelNum)940 void EPWM_EnableZeroInt(EPWM_T *epwm, uint32_t u32ChannelNum)
941 {
942 (epwm)->INTEN0 |= ((1UL << EPWM_INTEN0_ZIEN0_Pos) << u32ChannelNum);
943 }
944
945 /**
946 * @brief Disable zero interrupt of selected channel
947 * @param[in] epwm The pointer of the specified EPWM module
948 * - EPWM0 : EPWM Group 0
949 * - EPWM1 : EPWM Group 1
950 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
951 * @return None
952 * @details This function is used to disable zero interrupt of selected channel.
953 */
EPWM_DisableZeroInt(EPWM_T * epwm,uint32_t u32ChannelNum)954 void EPWM_DisableZeroInt(EPWM_T *epwm, uint32_t u32ChannelNum)
955 {
956 (epwm)->INTEN0 &= ~((1UL << EPWM_INTEN0_ZIEN0_Pos) << u32ChannelNum);
957 }
958
959 /**
960 * @brief Clear zero interrupt of selected channel
961 * @param[in] epwm The pointer of the specified EPWM module
962 * - EPWM0 : EPWM Group 0
963 * - EPWM1 : EPWM Group 1
964 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
965 * @return None
966 * @details This function is used to clear zero interrupt of selected channel.
967 */
EPWM_ClearZeroIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum)968 void EPWM_ClearZeroIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
969 {
970 (epwm)->INTSTS0 = ((1UL << EPWM_INTEN0_ZIEN0_Pos) << u32ChannelNum);
971 }
972
973 /**
974 * @brief Get zero interrupt of selected channel
975 * @param[in] epwm The pointer of the specified EPWM module
976 * - EPWM0 : EPWM Group 0
977 * - EPWM1 : EPWM Group 1
978 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
979 * @return Zero interrupt flag of specified channel
980 * @retval 0 Zero interrupt did not occur
981 * @retval 1 Zero interrupt occurred
982 * @details This function is used to get zero interrupt of selected channel.
983 */
EPWM_GetZeroIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum)984 uint32_t EPWM_GetZeroIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
985 {
986 return ((((epwm)->INTSTS0 & ((1UL << EPWM_INTEN0_ZIEN0_Pos) << u32ChannelNum))) ? 1UL : 0UL);
987 }
988
989 /**
990 * @brief Enable interrupt flag accumulator of selected channel
991 * @param[in] epwm The pointer of the specified EPWM module
992 * - EPWM0 : EPWM Group 0
993 * - EPWM1 : EPWM Group 1
994 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
995 * @param[in] u32IntFlagCnt Interrupt flag counter. Valid values are between 0~65535.
996 * @param[in] u32IntAccSrc Interrupt flag accumulator source selection.
997 * - \ref EPWM_IFA_ZERO_POINT
998 * - \ref EPWM_IFA_PERIOD_POINT
999 * - \ref EPWM_IFA_COMPARE_UP_COUNT_POINT
1000 * - \ref EPWM_IFA_COMPARE_DOWN_COUNT_POINT
1001 * @return None
1002 * @details This function is used to enable interrupt flag accumulator of selected channel.
1003 */
EPWM_EnableAcc(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32IntFlagCnt,uint32_t u32IntAccSrc)1004 void EPWM_EnableAcc(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32IntFlagCnt, uint32_t u32IntAccSrc)
1005 {
1006 (epwm)->IFA[u32ChannelNum] = (((epwm)->IFA[u32ChannelNum] & ~((EPWM_IFA0_IFACNT_Msk | EPWM_IFA0_IFASEL_Msk))) | \
1007 (EPWM_IFA0_IFAEN_Msk | (u32IntAccSrc << EPWM_IFA0_IFASEL_Pos) | u32IntFlagCnt) );
1008 }
1009
1010 /**
1011 * @brief Disable interrupt flag accumulator of selected channel
1012 * @param[in] epwm The pointer of the specified EPWM module
1013 * - EPWM0 : EPWM Group 0
1014 * - EPWM1 : EPWM Group 1
1015 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1016 * @return None
1017 * @details This function is used to Disable interrupt flag accumulator of selected channel.
1018 */
EPWM_DisableAcc(EPWM_T * epwm,uint32_t u32ChannelNum)1019 void EPWM_DisableAcc(EPWM_T *epwm, uint32_t u32ChannelNum)
1020 {
1021 (epwm)->IFA[u32ChannelNum] = ((epwm)->IFA[u32ChannelNum] & ~(EPWM_IFA0_IFAEN_Msk));
1022 }
1023
1024 /**
1025 * @brief Enable interrupt flag accumulator interrupt of selected channel
1026 * @param[in] epwm The pointer of the specified EPWM module
1027 * - EPWM0 : EPWM Group 0
1028 * - EPWM1 : EPWM Group 1
1029 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1030 * @return None
1031 * @details This function is used to enable interrupt flag accumulator interrupt of selected channel.
1032 */
EPWM_EnableAccInt(EPWM_T * epwm,uint32_t u32ChannelNum)1033 void EPWM_EnableAccInt(EPWM_T *epwm, uint32_t u32ChannelNum)
1034 {
1035 (epwm)->AINTEN |= (1UL << (u32ChannelNum));
1036 }
1037
1038 /**
1039 * @brief Disable interrupt flag accumulator interrupt of selected channel
1040 * @param[in] epwm The pointer of the specified EPWM module
1041 * - EPWM0 : EPWM Group 0
1042 * - EPWM1 : EPWM Group 1
1043 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1044 * @return None
1045 * @details This function is used to disable interrupt flag accumulator interrupt of selected channel.
1046 */
EPWM_DisableAccInt(EPWM_T * epwm,uint32_t u32ChannelNum)1047 void EPWM_DisableAccInt(EPWM_T *epwm, uint32_t u32ChannelNum)
1048 {
1049 (epwm)->AINTEN &= ~(1UL << (u32ChannelNum));
1050 }
1051
1052 /**
1053 * @brief Clear interrupt flag accumulator interrupt of selected channel
1054 * @param[in] epwm The pointer of the specified EPWM module
1055 * - EPWM0 : EPWM Group 0
1056 * - EPWM1 : EPWM Group 1
1057 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1058 * @return None
1059 * @details This function is used to clear interrupt flag accumulator interrupt of selected channel.
1060 */
EPWM_ClearAccInt(EPWM_T * epwm,uint32_t u32ChannelNum)1061 void EPWM_ClearAccInt(EPWM_T *epwm, uint32_t u32ChannelNum)
1062 {
1063 (epwm)->AINTSTS = (1UL << (u32ChannelNum));
1064 }
1065
1066 /**
1067 * @brief Get interrupt flag accumulator interrupt of selected channel
1068 * @param[in] epwm The pointer of the specified EPWM module
1069 * - EPWM0 : EPWM Group 0
1070 * - EPWM1 : EPWM Group 1
1071 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1072 * @retval 0 Accumulator interrupt did not occur
1073 * @retval 1 Accumulator interrupt occurred
1074 * @details This function is used to Get interrupt flag accumulator interrupt of selected channel.
1075 */
EPWM_GetAccInt(EPWM_T * epwm,uint32_t u32ChannelNum)1076 uint32_t EPWM_GetAccInt(EPWM_T *epwm, uint32_t u32ChannelNum)
1077 {
1078 return (((epwm)->AINTSTS & (1UL << (u32ChannelNum))) ? 1UL : 0UL);
1079 }
1080
1081 /**
1082 * @brief Enable accumulator PDMA of selected channel
1083 * @param[in] epwm The pointer of the specified EPWM module
1084 * - EPWM0 : EPWM Group 0
1085 * - EPWM1 : EPWM Group 1
1086 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1087 * @return None
1088 * @details This function is used to enable accumulator interrupt trigger PDMA of selected channel.
1089 */
EPWM_EnableAccPDMA(EPWM_T * epwm,uint32_t u32ChannelNum)1090 void EPWM_EnableAccPDMA(EPWM_T *epwm, uint32_t u32ChannelNum)
1091 {
1092 (epwm)->APDMACTL |= (1UL << (u32ChannelNum));
1093 }
1094
1095 /**
1096 * @brief Disable accumulator PDMA of selected channel
1097 * @param[in] epwm The pointer of the specified EPWM module
1098 * - EPWM0 : EPWM Group 0
1099 * - EPWM1 : EPWM Group 1
1100 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1101 * @return None
1102 * @details This function is used to disable accumulator interrupt trigger PDMA of selected channel.
1103 */
EPWM_DisableAccPDMA(EPWM_T * epwm,uint32_t u32ChannelNum)1104 void EPWM_DisableAccPDMA(EPWM_T *epwm, uint32_t u32ChannelNum)
1105 {
1106 (epwm)->APDMACTL &= ~(1UL << (u32ChannelNum));
1107 }
1108
1109 /**
1110 * @brief Enable interrupt flag accumulator stop mode of selected channel
1111 * @param[in] epwm The pointer of the specified EPWM module
1112 * - EPWM0 : EPWM Group 0
1113 * - EPWM1 : EPWM Group 1
1114 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1115 * @return None
1116 * @details This function is used to enable interrupt flag accumulator stop mode of selected channel.
1117 */
EPWM_EnableAccStopMode(EPWM_T * epwm,uint32_t u32ChannelNum)1118 void EPWM_EnableAccStopMode(EPWM_T *epwm, uint32_t u32ChannelNum)
1119 {
1120 (epwm)->IFA[u32ChannelNum] |= EPWM_IFA0_STPMOD_Msk;
1121 }
1122
1123 /**
1124 * @brief Disable interrupt flag accumulator stop mode of selected channel
1125 * @param[in] epwm The pointer of the specified EPWM module
1126 * - EPWM0 : EPWM Group 0
1127 * - EPWM1 : EPWM Group 1
1128 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1129 * @return None
1130 * @details This function is used to disable interrupt flag accumulator stop mode of selected channel.
1131 */
EPWM_DisableAccStopMode(EPWM_T * epwm,uint32_t u32ChannelNum)1132 void EPWM_DisableAccStopMode(EPWM_T *epwm, uint32_t u32ChannelNum)
1133 {
1134 (epwm)->IFA[u32ChannelNum] &= ~EPWM_IFA0_STPMOD_Msk;
1135 }
1136
1137 /**
1138 * @brief Clear free trigger duty interrupt flag of selected channel
1139 * @param[in] epwm The pointer of the specified EPWM module
1140 * - EPWM0 : EPWM Group 0
1141 * - EPWM1 : EPWM Group 1
1142 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1143 * @return None
1144 * @details This function is used to clear free trigger duty interrupt flag of selected channel.
1145 */
EPWM_ClearFTDutyIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum)1146 void EPWM_ClearFTDutyIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
1147 {
1148 (epwm)->FTCI = ((EPWM_FTCI_FTCMU0_Msk | EPWM_FTCI_FTCMD0_Msk) << (u32ChannelNum >> 1U));
1149 }
1150
1151 /**
1152 * @brief Get free trigger duty interrupt flag of selected channel
1153 * @param[in] epwm The pointer of the specified EPWM module
1154 * - EPWM0 : EPWM Group 0
1155 * - EPWM1 : EPWM Group 1
1156 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1157 * @return Duty interrupt flag of specified channel
1158 * @retval 0 Free trigger duty interrupt did not occur
1159 * @retval 1 Free trigger duty interrupt occurred
1160 * @details This function is used to get free trigger duty interrupt flag of selected channel.
1161 */
EPWM_GetFTDutyIntFlag(EPWM_T * epwm,uint32_t u32ChannelNum)1162 uint32_t EPWM_GetFTDutyIntFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
1163 {
1164 return (((epwm)->FTCI & ((EPWM_FTCI_FTCMU0_Msk | EPWM_FTCI_FTCMD0_Msk) << (u32ChannelNum >> 1U))) ? 1UL : 0UL);
1165 }
1166
1167 /**
1168 * @brief Enable load mode of selected channel
1169 * @param[in] epwm The pointer of the specified EPWM module
1170 * - EPWM0 : EPWM Group 0
1171 * - EPWM1 : EPWM Group 1
1172 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1173 * @param[in] u32LoadMode EPWM counter loading mode.
1174 * - \ref EPWM_LOAD_MODE_IMMEDIATE
1175 * - \ref EPWM_LOAD_MODE_WINDOW
1176 * - \ref EPWM_LOAD_MODE_CENTER
1177 * @return None
1178 * @details This function is used to enable load mode of selected channel.
1179 */
EPWM_EnableLoadMode(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32LoadMode)1180 void EPWM_EnableLoadMode(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32LoadMode)
1181 {
1182 (epwm)->CTL0 |= (u32LoadMode << u32ChannelNum);
1183 }
1184
1185 /**
1186 * @brief Disable load mode of selected channel
1187 * @param[in] epwm The pointer of the specified EPWM module
1188 * - EPWM0 : EPWM Group 0
1189 * - EPWM1 : EPWM Group 1
1190 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1191 * @param[in] u32LoadMode EPWM counter loading mode.
1192 * - \ref EPWM_LOAD_MODE_IMMEDIATE
1193 * - \ref EPWM_LOAD_MODE_WINDOW
1194 * - \ref EPWM_LOAD_MODE_CENTER
1195 * @return None
1196 * @details This function is used to disable load mode of selected channel.
1197 */
EPWM_DisableLoadMode(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32LoadMode)1198 void EPWM_DisableLoadMode(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32LoadMode)
1199 {
1200 (epwm)->CTL0 &= ~(u32LoadMode << u32ChannelNum);
1201 }
1202
1203 /**
1204 * @brief Configure synchronization phase of selected channel
1205 * @param[in] epwm The pointer of the specified EPWM module
1206 * - EPWM0 : EPWM Group 0
1207 * - EPWM1 : EPWM Group 1
1208 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1209 * @param[in] u32SyncSrc EPWM synchronize source selection.
1210 * - \ref EPWM_SYNC_OUT_FROM_SYNCIN_SWSYNC
1211 * - \ref EPWM_SYNC_OUT_FROM_COUNT_TO_ZERO
1212 * - \ref EPWM_SYNC_OUT_FROM_COUNT_TO_COMPARATOR
1213 * - \ref EPWM_SYNC_OUT_DISABLE
1214 * @param[in] u32Direction Phase direction. Control EPWM counter count decrement or increment after synchronizing.
1215 * - \ref EPWM_PHS_DIR_DECREMENT
1216 * - \ref EPWM_PHS_DIR_INCREMENT
1217 * @param[in] u32StartPhase Synchronous start phase value. Valid values are between 0~65535.
1218 * @return None
1219 * @details This function is used to configure synchronization phase of selected channel.
1220 * @note Every two channels share the same setting.
1221 */
EPWM_ConfigSyncPhase(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32SyncSrc,uint32_t u32Direction,uint32_t u32StartPhase)1222 void EPWM_ConfigSyncPhase(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32SyncSrc, uint32_t u32Direction, uint32_t u32StartPhase)
1223 {
1224 /* every two channels shares the same setting */
1225 u32ChannelNum >>= 1U;
1226 (epwm)->SYNC = (((epwm)->SYNC & ~(((3UL << EPWM_SYNC_SINSRC0_Pos) << (u32ChannelNum << 1U)) | ((1UL << EPWM_SYNC_PHSDIR0_Pos) << u32ChannelNum))) | \
1227 (u32Direction << EPWM_SYNC_PHSDIR0_Pos << u32ChannelNum) | ((u32SyncSrc << EPWM_SYNC_SINSRC0_Pos) << (u32ChannelNum << 1U)));
1228 (epwm)->PHS[(u32ChannelNum)] = u32StartPhase;
1229 }
1230
1231
1232 /**
1233 * @brief Enable SYNC phase of selected channel(s)
1234 * @param[in] epwm The pointer of the specified EPWM module
1235 * - EPWM0 : EPWM Group 0
1236 * - EPWM1 : EPWM Group 1
1237 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel.
1238 * Bit 0 is channel 0, bit 1 is channel 1...
1239 * @return None
1240 * @details This function is used to enable SYNC phase of selected channel(s).
1241 * @note Every two channels share the same setting.
1242 */
EPWM_EnableSyncPhase(EPWM_T * epwm,uint32_t u32ChannelMask)1243 void EPWM_EnableSyncPhase(EPWM_T *epwm, uint32_t u32ChannelMask)
1244 {
1245 uint32_t i;
1246 for(i = 0U; i < EPWM_CHANNEL_NUM; i ++)
1247 {
1248 if(u32ChannelMask & (1UL << i))
1249 {
1250 (epwm)->SYNC |= ((1UL << EPWM_SYNC_PHSEN0_Pos) << (i >> 1U));
1251 }
1252 }
1253 }
1254
1255 /**
1256 * @brief Disable SYNC phase of selected channel(s)
1257 * @param[in] epwm The pointer of the specified EPWM module
1258 * - EPWM0 : EPWM Group 0
1259 * - EPWM1 : EPWM Group 1
1260 * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel.
1261 * Bit 0 is channel 0, bit 1 is channel 1...
1262 * @return None
1263 * @details This function is used to disable SYNC phase of selected channel(s).
1264 * @note Every two channels share the same setting.
1265 */
EPWM_DisableSyncPhase(EPWM_T * epwm,uint32_t u32ChannelMask)1266 void EPWM_DisableSyncPhase(EPWM_T *epwm, uint32_t u32ChannelMask)
1267 {
1268 uint32_t i;
1269 for(i = 0U; i < EPWM_CHANNEL_NUM; i ++)
1270 {
1271 if(u32ChannelMask & (1UL << i))
1272 {
1273 (epwm)->SYNC &= ~((1UL << EPWM_SYNC_PHSEN0_Pos) << (i >> 1U));
1274 }
1275 }
1276 }
1277
1278 /**
1279 * @brief Enable EPWM SYNC_IN noise filter function
1280 * @param[in] epwm The pointer of the specified EPWM module
1281 * - EPWM0 : EPWM Group 0
1282 * - EPWM1 : EPWM Group 1
1283 * @param[in] u32ClkCnt SYNC Edge Detector Filter Count. This controls the counter number of edge detector.
1284 * The valid value is 0~7.
1285 * @param[in] u32ClkDivSel SYNC Edge Detector Filter Clock Selection.
1286 * - \ref EPWM_NF_CLK_DIV_1
1287 * - \ref EPWM_NF_CLK_DIV_2
1288 * - \ref EPWM_NF_CLK_DIV_4
1289 * - \ref EPWM_NF_CLK_DIV_8
1290 * - \ref EPWM_NF_CLK_DIV_16
1291 * - \ref EPWM_NF_CLK_DIV_32
1292 * - \ref EPWM_NF_CLK_DIV_64
1293 * - \ref EPWM_NF_CLK_DIV_128
1294 * @return None
1295 * @details This function is used to enable EPWM SYNC_IN noise filter function.
1296 */
EPWM_EnableSyncNoiseFilter(EPWM_T * epwm,uint32_t u32ClkCnt,uint32_t u32ClkDivSel)1297 void EPWM_EnableSyncNoiseFilter(EPWM_T *epwm, uint32_t u32ClkCnt, uint32_t u32ClkDivSel)
1298 {
1299 (epwm)->SYNC = ((epwm)->SYNC & ~(EPWM_SYNC_SFLTCNT_Msk | EPWM_SYNC_SFLTCSEL_Msk)) | \
1300 ((u32ClkCnt << EPWM_SYNC_SFLTCNT_Pos) | (u32ClkDivSel << EPWM_SYNC_SFLTCSEL_Pos) | EPWM_SYNC_SNFLTEN_Msk);
1301 }
1302
1303 /**
1304 * @brief Disable EPWM SYNC_IN noise filter function
1305 * @param[in] epwm The pointer of the specified EPWM module
1306 * - EPWM0 : EPWM Group 0
1307 * - EPWM1 : EPWM Group 1
1308 * @return None
1309 * @details This function is used to Disable EPWM SYNC_IN noise filter function.
1310 */
EPWM_DisableSyncNoiseFilter(EPWM_T * epwm)1311 void EPWM_DisableSyncNoiseFilter(EPWM_T *epwm)
1312 {
1313 (epwm)->SYNC &= ~EPWM_SYNC_SNFLTEN_Msk;
1314 }
1315
1316 /**
1317 * @brief Enable EPWM SYNC input pin inverse function
1318 * @param[in] epwm The pointer of the specified EPWM module
1319 * - EPWM0 : EPWM Group 0
1320 * - EPWM1 : EPWM Group 1
1321 * @return None
1322 * @details This function is used to enable EPWM SYNC input pin inverse function.
1323 */
EPWM_EnableSyncPinInverse(EPWM_T * epwm)1324 void EPWM_EnableSyncPinInverse(EPWM_T *epwm)
1325 {
1326 (epwm)->SYNC |= EPWM_SYNC_SINPINV_Msk;
1327 }
1328
1329 /**
1330 * @brief Disable EPWM SYNC input pin inverse function
1331 * @param[in] epwm The pointer of the specified EPWM module
1332 * - EPWM0 : EPWM Group 0
1333 * - EPWM1 : EPWM Group 1
1334 * @return None
1335 * @details This function is used to Disable EPWM SYNC input pin inverse function.
1336 */
EPWM_DisableSyncPinInverse(EPWM_T * epwm)1337 void EPWM_DisableSyncPinInverse(EPWM_T *epwm)
1338 {
1339 (epwm)->SYNC &= (~EPWM_SYNC_SINPINV_Msk);
1340 }
1341
1342 /**
1343 * @brief Set EPWM clock source
1344 * @param[in] epwm The pointer of the specified EPWM module
1345 * - EPWM0 : EPWM Group 0
1346 * - EPWM1 : EPWM Group 1
1347 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1348 * @param[in] u32ClkSrcSel EPWM external clock source.
1349 * - \ref EPWM_CLKSRC_EPWM_CLK
1350 * - \ref EPWM_CLKSRC_TIMER0
1351 * - \ref EPWM_CLKSRC_TIMER1
1352 * - \ref EPWM_CLKSRC_TIMER2
1353 * - \ref EPWM_CLKSRC_TIMER3
1354 * @return None
1355 * @details This function is used to set EPWM clock source.
1356 * @note Every two channels share the same setting.
1357 * @note If the clock source of EPWM counter is selected from TIMERn interrupt events, the TRGEPWM(TIMERn_TRGCTL[1], n=0,1..3) bit must be set as 1.
1358 */
EPWM_SetClockSource(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32ClkSrcSel)1359 void EPWM_SetClockSource(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32ClkSrcSel)
1360 {
1361 (epwm)->CLKSRC = ((epwm)->CLKSRC & ~(EPWM_CLKSRC_ECLKSRC0_Msk << ((u32ChannelNum >> 1U) << 3U))) | \
1362 (u32ClkSrcSel << ((u32ChannelNum >> 1U) << 3U));
1363 }
1364
1365 /**
1366 * @brief Enable EPWM brake noise filter function
1367 * @param[in] epwm The pointer of the specified EPWM module
1368 * - EPWM0 : EPWM Group 0
1369 * - EPWM1 : EPWM Group 1
1370 * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1.
1371 * @param[in] u32ClkCnt SYNC Edge Detector Filter Count. This controls the counter number of edge detector
1372 * @param[in] u32ClkDivSel SYNC Edge Detector Filter Clock Selection.
1373 * - \ref EPWM_NF_CLK_DIV_1
1374 * - \ref EPWM_NF_CLK_DIV_2
1375 * - \ref EPWM_NF_CLK_DIV_4
1376 * - \ref EPWM_NF_CLK_DIV_8
1377 * - \ref EPWM_NF_CLK_DIV_16
1378 * - \ref EPWM_NF_CLK_DIV_32
1379 * - \ref EPWM_NF_CLK_DIV_64
1380 * - \ref EPWM_NF_CLK_DIV_128
1381 * @return None
1382 * @details This function is used to enable EPWM brake noise filter function.
1383 */
EPWM_EnableBrakeNoiseFilter(EPWM_T * epwm,uint32_t u32BrakePinNum,uint32_t u32ClkCnt,uint32_t u32ClkDivSel)1384 void EPWM_EnableBrakeNoiseFilter(EPWM_T *epwm, uint32_t u32BrakePinNum, uint32_t u32ClkCnt, uint32_t u32ClkDivSel)
1385 {
1386 (epwm)->BNF = ((epwm)->BNF & ~((EPWM_BNF_BRK0FCNT_Msk | EPWM_BNF_BRK0NFSEL_Msk) << (u32BrakePinNum << 3U))) | \
1387 (((u32ClkCnt << EPWM_BNF_BRK0FCNT_Pos) | (u32ClkDivSel << EPWM_BNF_BRK0NFSEL_Pos) | EPWM_BNF_BRK0NFEN_Msk) << (u32BrakePinNum << 3U));
1388 }
1389
1390 /**
1391 * @brief Disable EPWM brake noise filter function
1392 * @param[in] epwm The pointer of the specified EPWM module
1393 * - EPWM0 : EPWM Group 0
1394 * - EPWM1 : EPWM Group 1
1395 * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1.
1396 * @return None
1397 * @details This function is used to disable EPWM brake noise filter function.
1398 */
EPWM_DisableBrakeNoiseFilter(EPWM_T * epwm,uint32_t u32BrakePinNum)1399 void EPWM_DisableBrakeNoiseFilter(EPWM_T *epwm, uint32_t u32BrakePinNum)
1400 {
1401 (epwm)->BNF &= ~(EPWM_BNF_BRK0NFEN_Msk << (u32BrakePinNum << 3U));
1402 }
1403
1404 /**
1405 * @brief Enable EPWM brake pin inverse function
1406 * @param[in] epwm The pointer of the specified EPWM module
1407 * - EPWM0 : EPWM Group 0
1408 * - EPWM1 : EPWM Group 1
1409 * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1.
1410 * @return None
1411 * @details This function is used to enable EPWM brake pin inverse function.
1412 */
EPWM_EnableBrakePinInverse(EPWM_T * epwm,uint32_t u32BrakePinNum)1413 void EPWM_EnableBrakePinInverse(EPWM_T *epwm, uint32_t u32BrakePinNum)
1414 {
1415 (epwm)->BNF |= (EPWM_BNF_BRK0PINV_Msk << (u32BrakePinNum << 3U));
1416 }
1417
1418 /**
1419 * @brief Disable EPWM brake pin inverse function
1420 * @param[in] epwm The pointer of the specified EPWM module
1421 * - EPWM0 : EPWM Group 0
1422 * - EPWM1 : EPWM Group 1
1423 * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1.
1424 * @return None
1425 * @details This function is used to disable EPWM brake pin inverse function.
1426 */
EPWM_DisableBrakePinInverse(EPWM_T * epwm,uint32_t u32BrakePinNum)1427 void EPWM_DisableBrakePinInverse(EPWM_T *epwm, uint32_t u32BrakePinNum)
1428 {
1429 (epwm)->BNF &= ~(EPWM_BNF_BRK0PINV_Msk << (u32BrakePinNum * (uint32_t)EPWM_BNF_BRK1NFEN_Pos));
1430 }
1431
1432 /**
1433 * @brief Set EPWM brake pin source
1434 * @param[in] epwm The pointer of the specified EPWM module
1435 * - EPWM0 : EPWM Group 0
1436 * - EPWM1 : EPWM Group 1
1437 * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1.
1438 * @param[in] u32SelAnotherModule Select to another module. Valid values are TRUE or FALSE.
1439 * @return None
1440 * @details This function is used to set EPWM brake pin source.
1441 */
EPWM_SetBrakePinSource(EPWM_T * epwm,uint32_t u32BrakePinNum,uint32_t u32SelAnotherModule)1442 void EPWM_SetBrakePinSource(EPWM_T *epwm, uint32_t u32BrakePinNum, uint32_t u32SelAnotherModule)
1443 {
1444 (epwm)->BNF = ((epwm)->BNF & ~(EPWM_BNF_BK0SRC_Msk << (u32BrakePinNum << 3U))) | (u32SelAnotherModule << ((uint32_t)EPWM_BNF_BK0SRC_Pos + (u32BrakePinNum << 3U)));
1445 }
1446
1447 /**
1448 * @brief Set EPWM leading edge blanking function
1449 * @param[in] epwm The pointer of the specified EPWM module
1450 * - EPWM0 : EPWM Group 0
1451 * - EPWM1 : EPWM Group 1
1452 * @param[in] u32TrigSrcSel Leading edge blanking source selection.
1453 * - \ref EPWM_LEBCTL_SRCEN0
1454 * - \ref EPWM_LEBCTL_SRCEN2
1455 * - \ref EPWM_LEBCTL_SRCEN4
1456 * - \ref EPWM_LEBCTL_SRCEN0_2
1457 * - \ref EPWM_LEBCTL_SRCEN0_4
1458 * - \ref EPWM_LEBCTL_SRCEN2_4
1459 * - \ref EPWM_LEBCTL_SRCEN0_2_4
1460 * @param[in] u32TrigType Leading edge blanking trigger type.
1461 * - \ref EPWM_LEBCTL_TRGTYPE_RISING
1462 * - \ref EPWM_LEBCTL_TRGTYPE_FALLING
1463 * - \ref EPWM_LEBCTL_TRGTYPE_RISING_OR_FALLING
1464 * @param[in] u32BlankingCnt Leading Edge Blanking Counter. Valid values are between 1~512.
1465 This counter value decides leading edge blanking window size, and this counter clock base is ECLK.
1466 * @param[in] u32BlankingEnable Enable EPWM leading edge blanking function. Valid values are TRUE (ENABLE) or FALSE (DISABLE).
1467 * - \ref FALSE
1468 * - \ref TRUE
1469 * @return None
1470 * @details This function is used to configure EPWM leading edge blanking function that blank the false trigger from ACMP brake source which may cause by EPWM output transition.
1471 * @note EPWM leading edge blanking function is only used for brake source from ACMP.
1472 */
EPWM_SetLeadingEdgeBlanking(EPWM_T * epwm,uint32_t u32TrigSrcSel,uint32_t u32TrigType,uint32_t u32BlankingCnt,uint32_t u32BlankingEnable)1473 void EPWM_SetLeadingEdgeBlanking(EPWM_T *epwm, uint32_t u32TrigSrcSel, uint32_t u32TrigType, uint32_t u32BlankingCnt, uint32_t u32BlankingEnable)
1474 {
1475 (epwm)->LEBCTL = (u32TrigType) | (u32TrigSrcSel) | (u32BlankingEnable);
1476 /* Blanking window size = LEBCNT + 1, so LEBCNT = u32BlankingCnt - 1 */
1477 (epwm)->LEBCNT = (u32BlankingCnt) - 1U;
1478 }
1479
1480 /**
1481 * @brief Get the time-base counter reached its maximum value flag of selected channel
1482 * @param[in] epwm The pointer of the specified EPWM module
1483 * - EPWM0 : EPWM Group 0
1484 * - EPWM1 : EPWM Group 1
1485 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1486 * @return Count to max interrupt flag of specified channel
1487 * @retval 0 Count to max interrupt did not occur
1488 * @retval 1 Count to max interrupt occurred
1489 * @details This function is used to get the time-base counter reached its maximum value flag of selected channel.
1490 */
EPWM_GetWrapAroundFlag(EPWM_T * epwm,uint32_t u32ChannelNum)1491 uint32_t EPWM_GetWrapAroundFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
1492 {
1493 return (((epwm)->STATUS & (EPWM_STATUS_CNTMAXF0_Msk << u32ChannelNum)) ? 1UL : 0UL);
1494 }
1495
1496 /**
1497 * @brief Clear the time-base counter reached its maximum value flag of selected channel
1498 * @param[in] epwm The pointer of the specified EPWM module
1499 * - EPWM0 : EPWM Group 0
1500 * - EPWM1 : EPWM Group 1
1501 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5
1502 * @return None
1503 * @details This function is used to clear the time-base counter reached its maximum value flag of selected channel.
1504 */
EPWM_ClearWrapAroundFlag(EPWM_T * epwm,uint32_t u32ChannelNum)1505 void EPWM_ClearWrapAroundFlag(EPWM_T *epwm, uint32_t u32ChannelNum)
1506 {
1507 (epwm)->STATUS = (EPWM_STATUS_CNTMAXF0_Msk << u32ChannelNum);
1508 }
1509
1510 /**
1511 * @brief Enable fault detect of selected channel.
1512 * @param[in] epwm The pointer of the specified EPWM module.
1513 * - EPWM0 : EPWM Group 0
1514 * - EPWM1 : EPWM Group 1
1515 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1516 * @param[in] u32AfterPrescaler Fault Detect Clock Source is from prescaler output. Valid values are TRUE (after prescaler) or FALSE (before prescaler).
1517 * @param[in] u32ClkSel Fault Detect Clock Select.
1518 * - \ref EPWM_FDCTL_FDCKSEL_CLK_DIV_1
1519 * - \ref EPWM_FDCTL_FDCKSEL_CLK_DIV_2
1520 * - \ref EPWM_FDCTL_FDCKSEL_CLK_DIV_4
1521 * - \ref EPWM_FDCTL_FDCKSEL_CLK_DIV_8
1522 * @return None
1523 * @details This function is used to enable fault detect of selected channel.
1524 */
EPWM_EnableFaultDetect(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32AfterPrescaler,uint32_t u32ClkSel)1525 void EPWM_EnableFaultDetect(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32AfterPrescaler, uint32_t u32ClkSel)
1526 {
1527 (epwm)->FDEN = ((epwm)->FDEN & ~(EPWM_FDEN_FDCKS0_Msk << (u32ChannelNum))) | \
1528 ((EPWM_FDEN_FDEN0_Msk | ((u32AfterPrescaler) << EPWM_FDEN_FDCKS0_Pos)) << (u32ChannelNum));
1529 (epwm)->FDCTL[(u32ChannelNum)] = ((epwm)->FDCTL[(u32ChannelNum)] & ~EPWM_FDCTL0_FDCKSEL_Msk) | (u32ClkSel);
1530 }
1531
1532 /**
1533 * @brief Disable fault detect of selected channel.
1534 * @param[in] epwm The pointer of the specified EPWM module.
1535 * - EPWM0 : EPWM Group 0
1536 * - EPWM1 : EPWM Group 1
1537 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1538 * @return None
1539 * @details This function is used to disable fault detect of selected channel.
1540 */
EPWM_DisableFaultDetect(EPWM_T * epwm,uint32_t u32ChannelNum)1541 void EPWM_DisableFaultDetect(EPWM_T *epwm, uint32_t u32ChannelNum)
1542 {
1543 (epwm)->FDEN &= ~(EPWM_FDEN_FDEN0_Msk << (u32ChannelNum));
1544 }
1545
1546 /**
1547 * @brief Enable fault detect output of selected channel.
1548 * @param[in] epwm The pointer of the specified EPWM module.
1549 * - EPWM0 : EPWM Group 0
1550 * - EPWM1 : EPWM Group 1
1551 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1552 * @return None
1553 * @details This function is used to enable fault detect output of selected channel.
1554 */
EPWM_EnableFaultDetectOutput(EPWM_T * epwm,uint32_t u32ChannelNum)1555 void EPWM_EnableFaultDetectOutput(EPWM_T *epwm, uint32_t u32ChannelNum)
1556 {
1557 (epwm)->FDEN &= ~(EPWM_FDEN_FDODIS0_Msk << (u32ChannelNum));
1558 }
1559
1560 /**
1561 * @brief Disable fault detect output of selected channel.
1562 * @param[in] epwm The pointer of the specified EPWM module.
1563 * - EPWM0 : EPWM Group 0
1564 * - EPWM1 : EPWM Group 1
1565 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1566 * @return None
1567 * @details This function is used to disable fault detect output of selected channel.
1568 */
EPWM_DisableFaultDetectOutput(EPWM_T * epwm,uint32_t u32ChannelNum)1569 void EPWM_DisableFaultDetectOutput(EPWM_T *epwm, uint32_t u32ChannelNum)
1570 {
1571 (epwm)->FDEN |= (EPWM_FDEN_FDODIS0_Msk << (u32ChannelNum));
1572 }
1573
1574 /**
1575 * @brief Enable fault detect deglitch function of selected channel.
1576 * @param[in] epwm The pointer of the specified EPWM module.
1577 * - EPWM0 : EPWM Group 0
1578 * - EPWM1 : EPWM Group 1
1579 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1580 * @param[in] u32DeglitchSmpCycle Deglitch Sampling Cycle. Valid values are between 0~7.
1581 * @return None
1582 * @details This function is used to enable fault detect deglitch function of selected channel.
1583 */
EPWM_EnableFaultDetectDeglitch(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32DeglitchSmpCycle)1584 void EPWM_EnableFaultDetectDeglitch(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32DeglitchSmpCycle)
1585 {
1586 (epwm)->FDCTL[(u32ChannelNum)] = ((epwm)->FDCTL[(u32ChannelNum)] & (~EPWM_FDCTL0_DGSMPCYC_Msk)) | \
1587 (EPWM_FDCTL0_FDDGEN_Msk | ((u32DeglitchSmpCycle) << EPWM_FDCTL0_DGSMPCYC_Pos));
1588 }
1589
1590 /**
1591 * @brief Disable fault detect deglitch function of selected channel.
1592 * @param[in] epwm The pointer of the specified EPWM module.
1593 * - EPWM0 : EPWM Group 0
1594 * - EPWM1 : EPWM Group 1
1595 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1596 * @return None
1597 * @details This function is used to disable fault detect deglitch function of selected channel.
1598 */
EPWM_DisableFaultDetectDeglitch(EPWM_T * epwm,uint32_t u32ChannelNum)1599 void EPWM_DisableFaultDetectDeglitch(EPWM_T *epwm, uint32_t u32ChannelNum)
1600 {
1601 (epwm)->FDCTL[(u32ChannelNum)] &= ~EPWM_FDCTL0_FDDGEN_Msk;
1602 }
1603
1604 /**
1605 * @brief Enable fault detect mask function of selected channel.
1606 * @param[in] epwm The pointer of the specified EPWM module.
1607 * - EPWM0 : EPWM Group 0
1608 * - EPWM1 : EPWM Group 1
1609 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1610 * @param[in] u32MaskCnt Transition mask counter. Valid values are between 0~0x7F.
1611 * @return None
1612 * @details This function is used to enable fault detect mask function of selected channel.
1613 */
EPWM_EnableFaultDetectMask(EPWM_T * epwm,uint32_t u32ChannelNum,uint32_t u32MaskCnt)1614 void EPWM_EnableFaultDetectMask(EPWM_T *epwm, uint32_t u32ChannelNum, uint32_t u32MaskCnt)
1615 {
1616 (epwm)->FDCTL[(u32ChannelNum)] = ((epwm)->FDCTL[(u32ChannelNum)] & (~EPWM_FDCTL0_TRMSKCNT_Msk)) | (EPWM_FDCTL0_FDMSKEN_Msk | (u32MaskCnt));
1617 }
1618
1619 /**
1620 * @brief Disable fault detect mask function of selected channel.
1621 * @param[in] epwm The pointer of the specified EPWM module.
1622 * - EPWM0 : EPWM Group 0
1623 * - EPWM1 : EPWM Group 1
1624 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1625 * @return None
1626 * @details This function is used to disable fault detect mask function of selected channel.
1627 */
EPWM_DisableFaultDetectMask(EPWM_T * epwm,uint32_t u32ChannelNum)1628 void EPWM_DisableFaultDetectMask(EPWM_T *epwm, uint32_t u32ChannelNum)
1629 {
1630 (epwm)->FDCTL[(u32ChannelNum)] &= ~EPWM_FDCTL0_FDMSKEN_Msk;
1631 }
1632
1633 /**
1634 * @brief Enable fault detect interrupt of selected channel.
1635 * @param[in] epwm The pointer of the specified EPWM module.
1636 * - EPWM0 : EPWM Group 0
1637 * - EPWM1 : EPWM Group 1
1638 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1639 * @return None
1640 * @details This function is used to enable fault detect interrupt of selected channel.
1641 */
EPWM_EnableFaultDetectInt(EPWM_T * epwm,uint32_t u32ChannelNum)1642 void EPWM_EnableFaultDetectInt(EPWM_T *epwm, uint32_t u32ChannelNum)
1643 {
1644 (epwm)->FDIEN |= (EPWM_FDIEN_FDIEN0_Msk << (u32ChannelNum));
1645 }
1646
1647 /**
1648 * @brief Disable fault detect interrupt of selected channel.
1649 * @param[in] epwm The pointer of the specified EPWM module.
1650 * - EPWM0 : EPWM Group 0
1651 * - EPWM1 : EPWM Group 1
1652 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1653 * @return None
1654 * @details This function is used to disable fault detect interrupt of selected channel.
1655 */
EPWM_DisableFaultDetectInt(EPWM_T * epwm,uint32_t u32ChannelNum)1656 void EPWM_DisableFaultDetectInt(EPWM_T *epwm, uint32_t u32ChannelNum)
1657 {
1658 (epwm)->FDIEN &= ~(EPWM_FDIEN_FDIEN0_Msk << (u32ChannelNum));
1659 }
1660
1661 /**
1662 * @brief Clear fault detect interrupt of selected channel.
1663 * @param[in] epwm The pointer of the specified EPWM module.
1664 * - EPWM0 : EPWM Group 0
1665 * - EPWM1 : EPWM Group 1
1666 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1667 * @return None
1668 * @details This function is used to clear fault detect interrupt of selected channel.
1669 */
EPWM_ClearFaultDetectInt(EPWM_T * epwm,uint32_t u32ChannelNum)1670 void EPWM_ClearFaultDetectInt(EPWM_T *epwm, uint32_t u32ChannelNum)
1671 {
1672 (epwm)->FDSTS = (EPWM_FDSTS_FDIF0_Msk << (u32ChannelNum));
1673 }
1674
1675 /**
1676 * @brief Get fault detect interrupt of selected channel.
1677 * @param[in] epwm The pointer of the specified EPWM module.
1678 * - EPWM0 : EPWM Group 0
1679 * - EPWM1 : EPWM Group 1
1680 * @param[in] u32ChannelNum EPWM channel number. Valid values are between 0~5.
1681 * @retval 0 Fault detect interrupt did not occur.
1682 * @retval 1 Fault detect interrupt occurred.
1683 * @details This function is used to Get fault detect interrupt of selected channel.
1684 */
EPWM_GetFaultDetectInt(EPWM_T * epwm,uint32_t u32ChannelNum)1685 uint32_t EPWM_GetFaultDetectInt(EPWM_T *epwm, uint32_t u32ChannelNum)
1686 {
1687 return (((epwm)->FDSTS & (EPWM_FDSTS_FDIF0_Msk << (u32ChannelNum))) ? 1UL : 0UL);
1688 }
1689
1690 /*@}*/ /* end of group EPWM_EXPORTED_FUNCTIONS */
1691
1692 /*@}*/ /* end of group EPWM_Driver */
1693
1694 /*@}*/ /* end of group Standard_Driver */
1695