1 /******************************************************************************
2 *Copyright(C)2017, Huada Semiconductor Co.,Ltd All rights reserved.
3 *
4 * This software is owned and published by:
5 * Huada Semiconductor Co.,Ltd("HDSC").
6 *
7 * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
8 * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
9 *
10 * This software contains source code for use with HDSC
11 * components. This software is licensed by HDSC to be adapted only
12 * for use in systems utilizing HDSC components. HDSC shall not be
13 * responsible for misuse or illegal use of this software for devices not
14 * supported herein. HDSC is providing this software "AS IS" and will
15 * not be responsible for issues arising from incorrect user implementation
16 * of the software.
17 *
18 * Disclaimer:
19 * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
20 * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
21 * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
22 * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
23 * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
24 * WARRANTY OF NONINFRINGEMENT.
25 * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
26 * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
27 * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
28 * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
29 * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
30 * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
31 * SAVINGS OR PROFITS,
32 * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
33 * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
34 * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
35 * FROM, THE SOFTWARE.
36 *
37 * This software may be replicated in part or whole for the licensed use,
38 * with the restriction that this Disclaimer and Copyright notice must be
39 * included with each copy of this software, whether used in part or whole,
40 * at all times.
41 */
42 
43 /** \file pca.c
44  **
45  ** Common API of PCA.
46  ** @link pcaGroup Some description @endlink
47  **
48  **   - 2018-04-16 Husj First version
49  **
50  ******************************************************************************/
51 
52 /*******************************************************************************
53  * Include files
54  ******************************************************************************/
55 #include "pca.h"
56 /**
57  *******************************************************************************
58  ** \addtogroup PcaGroup
59  ******************************************************************************/
60 //@{
61 
62 /*******************************************************************************
63  * Local pre-processor symbols/macros ('#define')
64  ******************************************************************************/
65 #define IS_VALID_MODULE(x)         (Module0 == (x) ||\
66                                     Module1 == (x) ||\
67                                     Module2 == (x) ||\
68                                     Module3 == (x) ||\
69                                     Module4 == (x))
70 
71 /*******************************************************************************
72  * Global variable definitions (declared in header file with 'extern')
73  ******************************************************************************/
74 
75 /*******************************************************************************
76  * Local type definitions ('typedef')
77  ******************************************************************************/
78 
79 /*******************************************************************************
80  * Local variable definitions ('static')
81  ******************************************************************************/
82 
83 /*******************************************************************************
84  * Local function prototypes ('static')
85  ******************************************************************************/
86 static func_ptr_t pfnPcaCallback = NULL;
87 
88 /*******************************************************************************
89  * Function implementation - global ('extern') and local ('static')
90  ******************************************************************************/
91 /**
92  *****************************************************************************
93  ** \brief PCA中断标志获取
94  **
95  **
96  ** \param [in]  enModule           PCA模块选择(Module0、Module1、Module2、Module3、Module4)
97  **
98  ** \retval TRUE or FALSE
99  *****************************************************************************/
Pca_GetIntFlag(en_pca_module_t enModule)100 boolean_t Pca_GetIntFlag(en_pca_module_t enModule)
101 {
102     boolean_t bRetVal = FALSE;
103 
104     ASSERT(IS_VALID_MODULE(enModule));
105 
106     switch (enModule)
107     {
108         case Module0:
109             bRetVal = M0P_PCA->CCON_f.CCF0 ? TRUE : FALSE;
110             break;
111         case Module1:
112             bRetVal = M0P_PCA->CCON_f.CCF1 ? TRUE : FALSE;
113             break;
114         case Module2:
115             bRetVal = M0P_PCA->CCON_f.CCF2 ? TRUE : FALSE;
116             break;
117         case Module3:
118             bRetVal = M0P_PCA->CCON_f.CCF3 ? TRUE : FALSE;
119             break;
120         case Module4:
121             bRetVal = M0P_PCA->CCON_f.CCF4 ? TRUE : FALSE;
122             break;
123         default:
124             bRetVal = FALSE;
125             break;
126     }
127 
128     return bRetVal;
129 }
130 
131 /**
132  *****************************************************************************
133  ** \brief PCA计数中断标志获取
134  **
135  **
136  **
137  ** \retval TRUE or FALSE
138  *****************************************************************************/
Pca_GetCntIntFlag(void)139 boolean_t Pca_GetCntIntFlag(void)
140 {
141     boolean_t bRetVal = FALSE;
142 
143     bRetVal = M0P_PCA->CCON_f.CF ? TRUE : FALSE;
144 
145     return bRetVal;
146 }
147 
148 /**
149  *****************************************************************************
150  ** \brief PCA中断标志清除
151  **
152  **
153  ** \param [in]  enModule           PCA模块选择(Module0、Module1、Module2、Module3、Module4)
154  **
155  ** \retval Ok or Error
156  *****************************************************************************/
Pca_ClearIntFlag(en_pca_module_t enModule)157 en_result_t Pca_ClearIntFlag(en_pca_module_t enModule)
158 {
159     en_result_t enResult = Error;
160 
161     ASSERT(IS_VALID_MODULE(enModule));
162 
163     switch (enModule)
164     {
165         case Module0:
166             M0P_PCA->ICLR_f.CCF0 = FALSE;
167             enResult = Ok;
168             break;
169         case Module1:
170             M0P_PCA->ICLR_f.CCF1 = FALSE;
171             enResult = Ok;
172             break;
173         case Module2:
174             M0P_PCA->ICLR_f.CCF2 = FALSE;
175             enResult = Ok;
176             break;
177         case Module3:
178             M0P_PCA->ICLR_f.CCF3 = FALSE;
179             enResult = Ok;
180             break;
181         case Module4:
182             M0P_PCA->ICLR_f.CCF4 = FALSE;
183             enResult = Ok;
184             break;
185         default:
186             enResult = Error;
187             break;
188     }
189 
190     return enResult;
191 }
192 
193 /**
194  *****************************************************************************
195  ** \brief PCA计数中断标志清除
196  **
197  **
198  **
199  ** \retval Ok or Error
200  *****************************************************************************/
Pca_ClearCntIntFlag(void)201 en_result_t Pca_ClearCntIntFlag(void)
202 {
203     en_result_t enResult = Error;
204 
205     M0P_PCA->ICLR_f.CF = FALSE;
206     enResult = Ok;
207 
208     return enResult;
209 }
210 
211 /**
212  *****************************************************************************
213  ** \brief PCA中断服务程序
214  **
215  **
216  ** \param [in]  u8Param           == 0
217  **
218  *****************************************************************************/
Pca_IRQHandler(uint8_t u8Param)219 void Pca_IRQHandler(uint8_t u8Param)
220 {
221     if(NULL != pfnPcaCallback)
222     {
223         pfnPcaCallback();
224     }
225 }
226 
227 /**
228  *****************************************************************************
229  ** \brief PCA中断使能
230  **
231  **
232  ** \param [in]  enModule           PCA模块选择(Module0、Module1、Module2、Module3、Module4)
233  **
234  ** \retval Ok or Error
235  *****************************************************************************/
Pca_EnableIrq(en_pca_module_t enModule)236 en_result_t Pca_EnableIrq(en_pca_module_t enModule)
237 {
238     en_result_t enResult = Error;
239 
240     ASSERT(IS_VALID_MODULE(enModule));
241 
242     switch (enModule)
243     {
244         case Module0:
245             M0P_PCA->CCAPM0_f.CCIE = TRUE;
246             enResult = Ok;
247             break;
248         case Module1:
249             M0P_PCA->CCAPM1_f.CCIE = TRUE;
250             enResult = Ok;
251             break;
252         case Module2:
253             M0P_PCA->CCAPM2_f.CCIE = TRUE;
254             enResult = Ok;
255             break;
256         case Module3:
257             M0P_PCA->CCAPM3_f.CCIE = TRUE;
258             enResult = Ok;
259             break;
260         case Module4:
261             M0P_PCA->CCAPM4_f.CCIE = TRUE;
262             enResult = Ok;
263             break;
264         default:
265             enResult = Error;
266             break;
267     }
268 
269     return enResult;
270 }
271 
272 /**
273  *****************************************************************************
274  ** \brief PCA计数中断使能
275  **
276  **
277  **
278  **
279  ** \retval Ok or Error
280  *****************************************************************************/
Pca_EnableCntIrq(void)281 en_result_t Pca_EnableCntIrq (void)
282 {
283     en_result_t enResult = Error;
284 
285     M0P_PCA->CMOD_f.CFIE = TRUE;
286     enResult = Ok;
287 
288     return enResult;
289 }
290 
291 /**
292  *****************************************************************************
293  ** \brief PCA中断禁止
294  **
295  **
296  ** \param [in]  enModule           PCA模块选择(Module0、Module1、Module2、Module3、Module4)
297  **
298  ** \retval Ok or Error
299  *****************************************************************************/
Pca_DisableIrq(en_pca_module_t enModule)300 en_result_t Pca_DisableIrq(en_pca_module_t enModule)
301 {
302     en_result_t enResult = Error;
303 
304     ASSERT(IS_VALID_MODULE(enModule));
305 
306     switch (enModule)
307     {
308         case Module0:
309             M0P_PCA->CCAPM0_f.CCIE = FALSE;
310             enResult = Ok;
311             break;
312         case Module1:
313             M0P_PCA->CCAPM1_f.CCIE = FALSE;
314             enResult = Ok;
315             break;
316         case Module2:
317             M0P_PCA->CCAPM2_f.CCIE = FALSE;
318             enResult = Ok;
319             break;
320         case Module3:
321             M0P_PCA->CCAPM3_f.CCIE = FALSE;
322             enResult = Ok;
323             break;
324         case Module4:
325             M0P_PCA->CCAPM4_f.CCIE = FALSE;
326             enResult = Ok;
327             break;
328         default:
329             enResult = Error;
330             break;
331     }
332 
333     return enResult;
334 }
335 
336 /**
337  *****************************************************************************
338  ** \brief PCA计数中断禁止
339  **
340  **
341  **
342  **
343  ** \retval Ok or Error
344  *****************************************************************************/
Pca_DisableCntIrq(void)345 en_result_t Pca_DisableCntIrq(void)
346 {
347     en_result_t enResult = Error;
348 
349     M0P_PCA->CMOD_f.CFIE = FALSE;
350     enResult = Ok;
351 
352     return enResult;
353 }
354 
355 
356 /**
357  *****************************************************************************
358  ** \brief PCA初始化配置
359  **
360  **
361  ** \param [in]  pstcConfig           PCA模块配置结构体指针
362  **
363  ** \retval Ok or Error
364  *****************************************************************************/
Pca_Init(stc_pca_config_t * pstcConfig)365 en_result_t Pca_Init(stc_pca_config_t* pstcConfig)
366 {
367     en_result_t enResult = Error;
368 
369     M0P_PCA->CMOD_f.CIDL = pstcConfig->enCIDL;
370     M0P_PCA->CMOD_f.WDTE = pstcConfig->enWDTE;
371     M0P_PCA->CMOD_f.CPS  = pstcConfig->enCPS;
372 
373     pfnPcaCallback       = pstcConfig->pfnPcaCb;
374 
375     enResult = Ok;
376 
377     return enResult;
378 }
379 
380 /**
381  *****************************************************************************
382  ** \brief PCA模式配置
383  **
384  **
385  ** \param [in]  enModule            PCA模块选择(Module0、Module1、Module2、Module3、Module4)
386  ** \param [in]  pstcCapMod          PCA模式配置结构体指针
387  **
388  ** \retval Ok or Error
389  *****************************************************************************/
Pca_CapModConfig(en_pca_module_t enModule,stc_pca_capmodconfig_t * pstcCapMod)390 en_result_t Pca_CapModConfig(en_pca_module_t enModule, stc_pca_capmodconfig_t* pstcCapMod)
391 {
392     en_result_t enResult = Error;
393 
394     ASSERT(IS_VALID_MODULE(enModule));
395 
396     switch (enModule)
397     {
398         case Module0:
399             {
400                 M0P_PCA->CCAPM0_f.ECOM = pstcCapMod->enECOM;
401                 M0P_PCA->CCAPM0_f.CAPP = pstcCapMod->enCAPP;
402                 M0P_PCA->CCAPM0_f.CAPN = pstcCapMod->enCAPN;
403                 M0P_PCA->CCAPM0_f.MAT  = pstcCapMod->enMAT;
404                 M0P_PCA->CCAPM0_f.TOG  = pstcCapMod->enTOG;
405                 M0P_PCA->CCAPM0_f.PWM  = pstcCapMod->en8bitPWM;
406                 enResult = Ok;
407             }
408             break;
409         case Module1:
410             {
411                 M0P_PCA->CCAPM1_f.ECOM = pstcCapMod->enECOM;
412                 M0P_PCA->CCAPM1_f.CAPP = pstcCapMod->enCAPP;
413                 M0P_PCA->CCAPM1_f.CAPN = pstcCapMod->enCAPN;
414                 M0P_PCA->CCAPM1_f.MAT  = pstcCapMod->enMAT;
415                 M0P_PCA->CCAPM1_f.TOG  = pstcCapMod->enTOG;
416                 M0P_PCA->CCAPM1_f.PWM  = pstcCapMod->en8bitPWM;
417                 enResult = Ok;
418             }
419             break;
420         case Module2:
421             {
422                 M0P_PCA->CCAPM2_f.ECOM = pstcCapMod->enECOM;
423                 M0P_PCA->CCAPM2_f.CAPP = pstcCapMod->enCAPP;
424                 M0P_PCA->CCAPM2_f.CAPN = pstcCapMod->enCAPN;
425                 M0P_PCA->CCAPM2_f.MAT  = pstcCapMod->enMAT;
426                 M0P_PCA->CCAPM2_f.TOG  = pstcCapMod->enTOG;
427                 M0P_PCA->CCAPM2_f.PWM  = pstcCapMod->en8bitPWM;
428                 enResult = Ok;
429             }
430             break;
431         case Module3:
432             {
433                 M0P_PCA->CCAPM3_f.ECOM = pstcCapMod->enECOM;
434                 M0P_PCA->CCAPM3_f.CAPP = pstcCapMod->enCAPP;
435                 M0P_PCA->CCAPM3_f.CAPN = pstcCapMod->enCAPN;
436                 M0P_PCA->CCAPM3_f.MAT  = pstcCapMod->enMAT;
437                 M0P_PCA->CCAPM3_f.TOG  = pstcCapMod->enTOG;
438                 M0P_PCA->CCAPM3_f.PWM  = pstcCapMod->en8bitPWM;
439                 enResult = Ok;
440             }
441             break;
442         case Module4:
443             {
444                 M0P_PCA->CCAPM4_f.ECOM = pstcCapMod->enECOM;
445                 M0P_PCA->CCAPM4_f.CAPP = pstcCapMod->enCAPP;
446                 M0P_PCA->CCAPM4_f.CAPN = pstcCapMod->enCAPN;
447                 M0P_PCA->CCAPM4_f.MAT  = pstcCapMod->enMAT;
448                 M0P_PCA->CCAPM4_f.TOG  = pstcCapMod->enTOG;
449                 M0P_PCA->CCAPM4_f.PWM  = pstcCapMod->en8bitPWM;
450                 enResult = Ok;
451             }
452             break;
453         default:
454             enResult = Error;
455             break;
456     }
457 
458     return enResult;
459 }
460 
461 /**
462  *****************************************************************************
463  ** \brief PCA启动运行
464  **
465  **
466  **
467  **
468  ** \retval Ok or Error
469  *****************************************************************************/
Pca_Run(void)470 en_result_t Pca_Run(void)
471 {
472     en_result_t enResult = Error;
473 
474     M0P_PCA->CCON_f.CR = TRUE;
475     enResult = Ok;
476 
477     return enResult;
478 }
479 
480 /**
481  *****************************************************************************
482  ** \brief PCA停止运行
483  **
484  **
485  **
486  **
487  ** \retval Ok or Error
488  *****************************************************************************/
Pca_Stop(void)489 en_result_t Pca_Stop(void)
490 {
491     en_result_t enResult = Error;
492 
493     M0P_PCA->CCON_f.CR = FALSE;
494     enResult = Ok;
495 
496     return enResult;
497 }
498 
499 /**
500  *****************************************************************************
501  ** \brief PCA16位比较数据设置
502  **
503  **
504  ** \param [in]  enModule            PCA模块选择(Module0、Module1、Module2、Module3、Module4)
505  ** \param [in]  u16Data             PCA捕获数据
506  **
507  ** \retval Ok or Error
508  *****************************************************************************/
Pca_CmpData16Set(en_pca_module_t enModule,uint16_t u16Data)509 en_result_t Pca_CmpData16Set(en_pca_module_t enModule, uint16_t u16Data)
510 {
511     en_result_t enResult = Error;
512 
513     ASSERT(IS_VALID_MODULE(enModule));
514 
515     switch (enModule)
516     {
517         case Module0:
518             M0P_PCA->CCAP0_f.CCAP0 = u16Data;
519             enResult = Ok;
520             break;
521         case Module1:
522             M0P_PCA->CCAP1_f.CCAP1 = u16Data;
523             enResult = Ok;
524             break;
525         case Module2:
526             M0P_PCA->CCAP2_f.CCAP2 = u16Data;
527             enResult = Ok;
528             break;
529         case Module3:
530             M0P_PCA->CCAP3_f.CCAP3 = u16Data;
531             enResult = Ok;
532             break;
533         case Module4:
534             M0P_PCA->CCAP4_f.CCAP4 = u16Data;
535             enResult = Ok;
536             break;
537         default:
538             enResult = Error;
539             break;
540     }
541 
542     return enResult;
543 }
544 
545 
546 /**
547  *****************************************************************************
548  ** \brief PCA16位捕获数据获取
549  **
550  **
551  ** \param [in]  enModule            PCA模块选择(Module0、Module1、Module2、Module3、Module4)
552  **
553  ** \retval u16Data
554  *****************************************************************************/
Pca_CapData16Get(en_pca_module_t enModule)555 uint16_t Pca_CapData16Get(en_pca_module_t enModule)
556 {
557     uint16_t u16Data = 0;
558 
559     ASSERT(IS_VALID_MODULE(enModule));
560 
561     switch (enModule)
562     {
563         case Module0:
564             u16Data = M0P_PCA->CCAP0_f.CCAP0;
565             break;
566         case Module1:
567             u16Data = M0P_PCA->CCAP1_f.CCAP1;
568             break;
569         case Module2:
570             u16Data = M0P_PCA->CCAP2_f.CCAP2;
571             break;
572         case Module3:
573             u16Data = M0P_PCA->CCAP3_f.CCAP3;
574             break;
575         case Module4:
576             u16Data = M0P_PCA->CCAP4_f.CCAP4;
577             break;
578         default:
579             u16Data = 0;
580             break;
581     }
582 
583     return u16Data;
584 }
585 
586 /**
587  *****************************************************************************
588  ** \brief PCA高8位比较数据设置
589  **
590  **
591  ** \param [in]  enModule            PCA模块选择(Module0、Module1、Module2、Module3、Module4)
592  ** \param [in]  u8Data             PCA高8位捕获数据
593  **
594  ** \retval Ok or Error
595  *****************************************************************************/
Pca_CmpDataHSet(en_pca_module_t enModule,uint8_t u8Data)596 en_result_t Pca_CmpDataHSet(en_pca_module_t enModule, uint8_t u8Data)
597 {
598     en_result_t enResult = Error;
599 
600     ASSERT(IS_VALID_MODULE(enModule));
601 
602     switch (enModule)
603     {
604         case Module0:
605             M0P_PCA->CCAP0H_f.CCAP0 = u8Data;
606             enResult = Ok;
607             break;
608         case Module1:
609             M0P_PCA->CCAP1H_f.CCAP1 = u8Data;
610             enResult = Ok;
611             break;
612         case Module2:
613             M0P_PCA->CCAP2H_f.CCAP2 = u8Data;
614             enResult = Ok;
615             break;
616         case Module3:
617             M0P_PCA->CCAP3H_f.CCAP3 = u8Data;
618             enResult = Ok;
619             break;
620         case Module4:
621             M0P_PCA->CCAP4H_f.CCAP4 = u8Data;
622             enResult = Ok;
623             break;
624         default:
625             enResult = Error;
626             break;
627     }
628 
629     return enResult;
630 }
631 
632 /**
633  *****************************************************************************
634  ** \brief PCA低8位比较数据设置
635  **
636  **
637  ** \param [in]  enModule            PCA模块选择(Module0、Module1、Module2、Module3、Module4)
638  ** \param [in]  u8Data              PCA低8位捕获数据
639  **
640  ** \retval Ok or Error
641  *****************************************************************************/
Pca_CmpDataLSet(en_pca_module_t enModule,uint8_t u8Data)642 en_result_t Pca_CmpDataLSet(en_pca_module_t enModule, uint8_t u8Data)
643 {
644     en_result_t enResult = Error;
645 
646     ASSERT(IS_VALID_MODULE(enModule));
647 
648     switch (enModule)
649     {
650         case Module0:
651             M0P_PCA->CCAP0L_f.CCAP0 = u8Data;
652             enResult = Ok;
653             break;
654         case Module1:
655             M0P_PCA->CCAP1L_f.CCAP1 = u8Data;
656             enResult = Ok;
657             break;
658         case Module2:
659             M0P_PCA->CCAP2L_f.CCAP2 = u8Data;
660             enResult = Ok;
661             break;
662         case Module3:
663             M0P_PCA->CCAP3L_f.CCAP3 = u8Data;
664             enResult = Ok;
665             break;
666         case Module4:
667             M0P_PCA->CCAP4L_f.CCAP4 = u8Data;
668             enResult = Ok;
669             break;
670         default:
671             enResult = Error;
672             break;
673     }
674 
675     return enResult;
676 }
677 
678 /**
679  *****************************************************************************
680  ** \brief PCA计数器初值设置
681  **
682  **
683  **
684  ** \param [in]  u16Data              PCA计数器初值
685  **
686  ** \retval Ok or Error
687  *****************************************************************************/
Pca_Cnt16Set(uint16_t u16Data)688 en_result_t Pca_Cnt16Set(uint16_t u16Data)
689 {
690     en_result_t enResult = Error;
691 
692     M0P_PCA->CNT_f.CNT = u16Data;
693     enResult = Ok;
694 
695     return enResult;
696 }
697 
698 /**
699  *****************************************************************************
700  ** \brief PCA16位计数器值获取
701  **
702  **
703  **
704  ** \retval 16位计数器值
705  *****************************************************************************/
Pca_Cnt16Get(void)706 uint16_t Pca_Cnt16Get(void)
707 {
708     uint16_t u16CntData = 0;
709 
710     u16CntData = M0P_PCA->CNT_f.CNT;
711 
712     return u16CntData;
713 }
714 
715 /**
716  *****************************************************************************
717  ** \brief PCA周期重载值设置
718  **
719  **
720  **
721  ** \param [in]  u16Data              PCA周期重载值
722  **
723  ** \retval Ok or Error
724  *****************************************************************************/
Pca_CARRSet(uint16_t u16Data)725 en_result_t Pca_CARRSet(uint16_t u16Data)
726 {
727     en_result_t enResult = Error;
728 
729     M0P_PCA->CARR_f.CARR = u16Data;
730     enResult = Ok;
731 
732     return enResult;
733 }
734 
735 /**
736  *****************************************************************************
737  ** \brief PCA周期重载值获取
738  **
739  **
740  **
741  ** \retval PCA周期重载值
742  *****************************************************************************/
Pca_CARRGet(void)743 uint16_t Pca_CARRGet(void)
744 {
745     uint16_t u16CntData = 0;
746 
747     u16CntData = M0P_PCA->CARR_f.CARR;
748 
749     return u16CntData;
750 }
751 
752 /**
753  *****************************************************************************
754  ** \brief PCA增强PWM 使能
755  **
756  **
757  **
758  **
759  ** \retval Ok or Error
760  *****************************************************************************/
Pca_Enable16bitPWM(void)761 en_result_t Pca_Enable16bitPWM(void)
762 {
763     en_result_t enResult = Error;
764 
765     M0P_PCA->EPWM_f.EPWM = TRUE;
766     enResult = Ok;
767 
768     return enResult;
769 }
770 
771 /**
772  *****************************************************************************
773  ** \brief PCA增强PWM 禁止
774  **
775  **
776  **
777  **
778  ** \retval Ok or Error
779  *****************************************************************************/
Pca_Disable16bitPWM(void)780 en_result_t Pca_Disable16bitPWM(void)
781 {
782     en_result_t enResult = Error;
783 
784     M0P_PCA->EPWM_f.EPWM = FALSE;
785     enResult = Ok;
786 
787     return enResult;
788 }
789 
790 /**
791  *****************************************************************************
792  ** \brief PCA比较高速输出标志获取
793  **
794  **
795  ** \param [in]  enModule            PCA模块选择(Module0、Module1、Module2、Module3、Module4)
796  **
797  ** \retval TRUE or FALSE
798  *****************************************************************************/
Pca_GetCmpHighFlag(en_pca_module_t enModule)799 boolean_t Pca_GetCmpHighFlag(en_pca_module_t enModule)
800 {
801     boolean_t bRetVal = FALSE;
802 
803     ASSERT(IS_VALID_MODULE(enModule));
804 
805     switch (enModule)
806     {
807         case Module0:
808             bRetVal = M0P_PCA->CCAPO_f.CCAPO0 ? TRUE : FALSE;
809             break;
810         case Module1:
811             bRetVal = M0P_PCA->CCAPO_f.CCAPO1 ? TRUE : FALSE;
812             break;
813         case Module2:
814             bRetVal = M0P_PCA->CCAPO_f.CCAPO2 ? TRUE : FALSE;
815             break;
816         case Module3:
817             bRetVal = M0P_PCA->CCAPO_f.CCAPO3 ? TRUE : FALSE;
818             break;
819         case Module4:
820             bRetVal = M0P_PCA->CCAPO_f.CCAPO4 ? TRUE : FALSE;
821             break;
822         default:
823             bRetVal = FALSE;
824             break;
825     }
826 
827     return bRetVal;
828 }
829 
830 //@} // PcaGroup
831 
832 /*******************************************************************************
833  * EOF (not truncated)
834  ******************************************************************************/
835