1 /******************************************************************************
2 *Copyright(C)2018, 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 timer3.c
44  **
45  ** Common API of base timer.
46  ** @link Tiemr3 Group Some description @endlink
47  **
48  **   - 2019-04-18  Husj  First Version
49  **
50  ******************************************************************************/
51 
52 /*******************************************************************************
53  * Include files
54  ******************************************************************************/
55 #include "hc32l196_timer3.h"
56 /**
57  *******************************************************************************
58  ** \addtogroup Tim3Group
59  ******************************************************************************/
60 //@{
61 
62 /*******************************************************************************
63  * Local pre-processor symbols/macros ('#define')
64  ******************************************************************************/
65 
66 
67 /*******************************************************************************
68  * Global variable definitions (declared in header file with 'extern')
69  ******************************************************************************/
70 
71 /*******************************************************************************
72  * Local type definitions ('typedef')
73  ******************************************************************************/
74 
75 /*******************************************************************************
76  * Local variable definitions ('static')
77  ******************************************************************************/
78 
79 
80 /*******************************************************************************
81  * Local function prototypes ('static')
82  ******************************************************************************/
83 
84 
85 /*******************************************************************************
86  * Function implementation - global ('extern') and local ('static')
87  ******************************************************************************/
88 
89 /**
90  *****************************************************************************
91  ** \brief Timer3 中断标志获取(模式0/1/23)
92  **
93  **
94  ** \param [in]  enTim3Irq           中断类型
95  **
96  ** \retval TRUE or FALSE
97  *****************************************************************************/
Tim3_GetIntFlag(en_tim3_irq_type_t enTim3Irq)98 boolean_t Tim3_GetIntFlag(en_tim3_irq_type_t enTim3Irq)
99 {
100     boolean_t bRetVal = FALSE;
101     uint32_t u32Val;
102 
103     u32Val = M0P_TIM3_MODE23->IFR;
104     bRetVal = (u32Val>>enTim3Irq) & 0x1;
105 
106     return bRetVal;
107 }
108 
109 /**
110  *****************************************************************************
111  ** \brief Timer3 中断标志清除(模式0/1/23)
112  **
113  **
114  ** \param [in]  enTim3Irq           中断类型
115  **
116  ** \retval Ok or Error
117  *****************************************************************************/
Tim3_ClearIntFlag(en_tim3_irq_type_t enTim3Irq)118 en_result_t Tim3_ClearIntFlag(en_tim3_irq_type_t enTim3Irq)
119 {
120     en_result_t enResult = Ok;
121 
122     M0P_TIM3_MODE23->ICLR = ~(1u<<enTim3Irq);
123 
124     return enResult;
125 }
126 
127 /**
128  *****************************************************************************
129  ** \brief Timer3 中断所有标志清除(模式23)
130  **
131  **
132  **
133  **
134  ** \retval Ok or Error
135  *****************************************************************************/
Tim3_ClearAllIntFlag(void)136 en_result_t Tim3_ClearAllIntFlag(void)
137 {
138     en_result_t enResult = Ok;
139 
140     M0P_TIM3_MODE23->ICLR = 0;
141 
142     return enResult;
143 }
144 
145 /**
146  *****************************************************************************
147  ** \brief Timer3 中断使能(模式0)
148  **
149  **
150  ** \param [in]  none
151  **
152  ** \retval Ok or Error
153  *****************************************************************************/
Tim3_Mode0_EnableIrq(void)154 en_result_t Tim3_Mode0_EnableIrq(void)
155 {
156     en_result_t enResult = Ok;
157 
158     M0P_TIM3_MODE0->M0CR_f.UIE = TRUE;
159 
160     return enResult;
161 }
162 
163 /**
164  *****************************************************************************
165  ** \brief Timer3 中断禁止(模式0)
166  **
167  **
168  ** \param [in]  none
169  **
170  ** \retval Ok or Error
171  *****************************************************************************/
Tim3_Mode0_DisableIrq(void)172 en_result_t Tim3_Mode0_DisableIrq(void)
173 {
174     en_result_t enResult = Ok;
175 
176     M0P_TIM3_MODE0->M0CR_f.UIE = FALSE;
177 
178     return enResult;
179 }
180 
181 /**
182  *****************************************************************************
183  ** \brief Timer3 中断使能(模式1)
184  **
185  **
186  ** \param [in]  enTim3Irq           中断类型
187  **
188  ** \retval Ok or Error
189  *****************************************************************************/
Tim3_Mode1_EnableIrq(en_tim3_irq_type_t enTim3Irq)190 en_result_t Tim3_Mode1_EnableIrq (en_tim3_irq_type_t enTim3Irq)
191 {
192     en_result_t enResult = Ok;
193 
194 
195     switch (enTim3Irq)
196     {
197         case Tim3UevIrq:
198             M0P_TIM3_MODE1->M1CR_f.UIE = TRUE;
199             break;
200         case Tim3CA0Irq:
201             M0P_TIM3_MODE1->CR0_f.CIEA = TRUE;
202             break;
203         default:
204             enResult = Error;
205             break;
206     }
207 
208     return enResult;
209 }
210 
211 /**
212  *****************************************************************************
213  ** \brief Timer3 中断禁止(模式1)
214  **
215  **
216  ** \param [in]  enTim3Irq           中断类型
217  **
218  ** \retval Ok or Error
219  *****************************************************************************/
Tim3_Mode1_DisableIrq(en_tim3_irq_type_t enTim3Irq)220 en_result_t Tim3_Mode1_DisableIrq (en_tim3_irq_type_t enTim3Irq)
221 {
222     en_result_t enResult = Ok;
223 
224 
225     switch (enTim3Irq)
226     {
227         case Tim3UevIrq:
228             M0P_TIM3_MODE1->M1CR_f.UIE = FALSE;
229             break;
230         case Tim3CA0Irq:
231             M0P_TIM3_MODE1->CR0_f.CIEA = FALSE;
232             break;
233         default:
234             enResult = Error;
235             break;
236     }
237 
238     return enResult;
239 }
240 
241 /**
242  *****************************************************************************
243  ** \brief Timer3 中断使能(模式23)
244  **
245  **
246  ** \param [in]  enTim3Irq           中断类型
247  **
248  ** \retval Ok or Error
249  *****************************************************************************/
Tim3_Mode23_EnableIrq(en_tim3_irq_type_t enTim3Irq)250 en_result_t Tim3_Mode23_EnableIrq (en_tim3_irq_type_t enTim3Irq)
251 {
252     en_result_t enResult = Ok;
253 
254 
255     switch (enTim3Irq)
256     {
257         case Tim3UevIrq:
258             M0P_TIM3_MODE23->M23CR_f.UIE = TRUE;
259             break;
260         case Tim3CA0Irq:
261             M0P_TIM3_MODE23->CRCH0_f.CIEA = TRUE;
262             break;
263         case Tim3CB0Irq:
264             M0P_TIM3_MODE23->CRCH0_f.CIEB = TRUE;
265             break;
266         case Tim3CA1Irq:
267             M0P_TIM3_MODE23->CRCH1_f.CIEA = TRUE;
268             break;
269         case Tim3CB1Irq:
270             M0P_TIM3_MODE23->CRCH1_f.CIEB = TRUE;
271             break;
272         case Tim3CA2Irq:
273             M0P_TIM3_MODE23->CRCH2_f.CIEA = TRUE;
274             break;
275         case Tim3CB2Irq:
276             M0P_TIM3_MODE23->CRCH2_f.CIEB = TRUE;
277             break;
278         case Tim3BkIrq:
279             M0P_TIM3_MODE23->M23CR_f.BIE = TRUE;
280             break;
281         case Tim3TrigIrq:
282             M0P_TIM3_MODE23->M23CR_f.TIE = TRUE;
283             break;
284         default:
285             enResult = Error;
286             break;
287     }
288 
289     return enResult;
290 }
291 
292 /**
293  *****************************************************************************
294  ** \brief Timer3 中断禁止(模式23)
295  **
296  **
297  ** \param [in]  enTim3Irq           中断类型
298  **
299  ** \retval Ok or Error
300  *****************************************************************************/
Tim3_Mode23_DisableIrq(en_tim3_irq_type_t enTim3Irq)301 en_result_t Tim3_Mode23_DisableIrq (en_tim3_irq_type_t enTim3Irq)
302 {
303     en_result_t enResult = Ok;
304 
305 
306     switch (enTim3Irq)
307     {
308         case Tim3UevIrq:
309             M0P_TIM3_MODE23->M23CR_f.UIE = FALSE;
310             break;
311         case Tim3CA0Irq:
312             M0P_TIM3_MODE23->CRCH0_f.CIEA = FALSE;
313             break;
314         case Tim3CB0Irq:
315             M0P_TIM3_MODE23->CRCH0_f.CIEB = FALSE;
316             break;
317         case Tim3CA1Irq:
318             M0P_TIM3_MODE23->CRCH1_f.CIEA = FALSE;
319             break;
320         case Tim3CB1Irq:
321             M0P_TIM3_MODE23->CRCH1_f.CIEB = FALSE;
322             break;
323         case Tim3CA2Irq:
324             M0P_TIM3_MODE23->CRCH2_f.CIEA = FALSE;
325             break;
326         case Tim3CB2Irq:
327             M0P_TIM3_MODE23->CRCH2_f.CIEB = FALSE;
328             break;
329         case Tim3BkIrq:
330             M0P_TIM3_MODE23->M23CR_f.BIE = FALSE;
331             break;
332         case Tim3TrigIrq:
333             M0P_TIM3_MODE23->M23CR_f.TIE = FALSE;
334             break;
335         default:
336             enResult = Error;
337             break;
338     }
339 
340     return enResult;
341 }
342 
343 /**
344  *****************************************************************************
345  ** \brief Timer3 初始化配置(模式0)
346  **
347  **
348  ** \param [in]  pstcCfg       初始化配置结构体指针
349  **
350  ** \retval Ok or Error
351  *****************************************************************************/
Tim3_Mode0_Init(stc_tim3_mode0_cfg_t * pstcCfg)352 en_result_t Tim3_Mode0_Init(stc_tim3_mode0_cfg_t* pstcCfg)
353 {
354     en_result_t enResult = Ok;
355 
356     M0P_TIM3_MODE0->M0CR_f.MODE   = pstcCfg->enWorkMode;
357     M0P_TIM3_MODE0->M0CR_f.GATEP  = pstcCfg->enGateP;
358     M0P_TIM3_MODE0->M0CR_f.GATE   = pstcCfg->bEnGate;
359     M0P_TIM3_MODE0->M0CR_f.PRS    = pstcCfg->enPRS;
360     M0P_TIM3_MODE0->M0CR_f.TOGEN  = pstcCfg->bEnTog;
361     M0P_TIM3_MODE0->M0CR_f.CT     = pstcCfg->enCT;
362     M0P_TIM3_MODE0->M0CR_f.MD     = pstcCfg->enCntMode;
363 
364     return enResult;
365 }
366 
367 /**
368  *****************************************************************************
369  ** \brief Timer3 启动运行(模式0)
370  **
371  **
372  ** \param [in]  none
373  **
374  ** \retval Ok or Error
375  *****************************************************************************/
Tim3_M0_Run(void)376 en_result_t Tim3_M0_Run(void)
377 {
378     en_result_t enResult = Ok;
379 
380     M0P_TIM3_MODE0->M0CR_f.CTEN = TRUE;
381 
382     return enResult;
383 }
384 
385 /**
386  *****************************************************************************
387  ** \brief Timer3 停止运行(模式0)
388  **
389  **
390  ** \param [in]  none
391  **
392  ** \retval Ok or Error
393  *****************************************************************************/
Tim3_M0_Stop(void)394 en_result_t Tim3_M0_Stop(void)
395 {
396     en_result_t enResult = Ok;
397 
398     M0P_TIM3_MODE0->M0CR_f.CTEN = FALSE;
399 
400     return enResult;
401 }
402 
403 /**
404  *****************************************************************************
405  ** \brief Timer3 端口输出使能/禁止设定(模式0)
406  **
407  **
408  ** \param [in]  bEnOutput          翻转输出设定 TRUE:使能, FALSE:禁止
409  **
410  ** \retval Ok or Error
411  *****************************************************************************/
Tim3_M0_Enable_Output(boolean_t bEnOutput)412 en_result_t Tim3_M0_Enable_Output(boolean_t bEnOutput)
413 {
414     en_result_t enResult = Ok;
415 
416 
417     M0P_TIM3_MODE0->DTR_f.MOE = bEnOutput;
418 
419     return enResult;
420 }
421 
422 /**
423  *****************************************************************************
424  ** \brief Timer3 翻转使能/禁止(低电平)设定(模式0)
425  **
426  **
427  ** \param [in]  bEnTOG          翻转输出设定 TRUE:使能, FALSE:禁止
428  **
429  ** \retval Ok or Error
430  *****************************************************************************/
Tim3_M0_EnTOG(boolean_t bEnTOG)431 en_result_t Tim3_M0_EnTOG(boolean_t bEnTOG)
432 {
433     en_result_t enResult = Ok;
434 
435     M0P_TIM3_MODE0->M0CR_f.TOGEN = bEnTOG;
436 
437     return enResult;
438 }
439 
440 /**
441  *****************************************************************************
442  ** \brief Timer3 16位计数器初值设置(模式0)
443  **
444  **
445  ** \param [in]  u16Data          CNT 16位初值
446  **
447  ** \retval Ok or Error
448  *****************************************************************************/
Tim3_M0_Cnt16Set(uint16_t u16Data)449 en_result_t Tim3_M0_Cnt16Set(uint16_t u16Data)
450 {
451     en_result_t enResult = Ok;
452 
453     M0P_TIM3_MODE0->CNT_f.CNT = u16Data;
454 
455     return enResult;
456 }
457 
458 /**
459  *****************************************************************************
460  ** \brief Timer3 16位计数值获取(模式0)
461  **
462  **
463  ** \param [in]  none
464  **
465  ** \retval 16bits计数值
466  *****************************************************************************/
Tim3_M0_Cnt16Get(void)467 uint16_t Tim3_M0_Cnt16Get(void)
468 {
469     uint16_t    u16CntData = 0;
470 
471     u16CntData = M0P_TIM3_MODE0->CNT_f.CNT;
472 
473     return u16CntData;
474 }
475 
476 /**
477  *****************************************************************************
478  ** \brief Timer3 重载值设置(模式0)
479  **
480  **
481  ** \param [in]  u16Data          16bits重载值
482  **
483  ** \retval Ok or Error
484  *****************************************************************************/
Tim3_M0_ARRSet(uint16_t u16Data)485 en_result_t Tim3_M0_ARRSet(uint16_t u16Data)
486 {
487     en_result_t enResult = Ok;
488 
489     M0P_TIM3_MODE0->ARR_f.ARR = u16Data;
490 
491     return enResult;
492 }
493 
494 /**
495  *****************************************************************************
496  ** \brief Timer3 32位计数器初值设置(模式0)
497  **
498  **
499  ** \param [in]  u32Data          32位初值
500  **
501  ** \retval Ok or Error
502  *****************************************************************************/
Tim3_M0_Cnt32Set(uint32_t u32Data)503 en_result_t Tim3_M0_Cnt32Set(uint32_t u32Data)
504 {
505     en_result_t enResult = Ok;
506 
507     M0P_TIM3_MODE0->CNT32_f.CNT32 = u32Data;
508 
509     return enResult;
510 }
511 
512 /**
513  *****************************************************************************
514  ** \brief Timer3 32位计数值获取(模式0)
515  **
516  **
517  ** \param [in]  none
518  **
519  ** \retval 32bits计数值
520  *****************************************************************************/
Tim3_M0_Cnt32Get(void)521 uint32_t Tim3_M0_Cnt32Get(void)
522 {
523     uint32_t    u32CntData = 0;
524 
525     u32CntData = M0P_TIM3_MODE0->CNT32_f.CNT32;
526 
527     return u32CntData;
528 }
529 
530 /**
531  *****************************************************************************
532  ** \brief Timer3 初始化配置(模式1)
533  **
534  **
535  ** \param [in]  pstcCfg       初始化配置结构体指针
536  **
537  ** \retval Ok or Error
538  *****************************************************************************/
Tim3_Mode1_Init(stc_tim3_mode1_cfg_t * pstcCfg)539 en_result_t Tim3_Mode1_Init(stc_tim3_mode1_cfg_t* pstcCfg)
540 {
541     en_result_t enResult = Ok;
542 
543     M0P_TIM3_MODE1->M1CR_f.MODE    = pstcCfg->enWorkMode;
544     M0P_TIM3_MODE1->M1CR_f.PRS     = pstcCfg->enPRS;
545     M0P_TIM3_MODE1->M1CR_f.CT      = pstcCfg->enCT;
546     M0P_TIM3_MODE1->M1CR_f.ONESHOT = pstcCfg->enOneShot;
547 
548     return enResult;
549 }
550 
551 /**
552  *****************************************************************************
553  ** \brief Timer3 PWC 输入配置(模式1)
554  **
555  **
556  ** \param [in]  pstcCfg       初始化配置结构体指针
557  **
558  ** \retval Ok or Error
559  *****************************************************************************/
Tim3_M1_Input_Cfg(stc_tim3_pwc_input_cfg_t * pstcCfg)560 en_result_t Tim3_M1_Input_Cfg(stc_tim3_pwc_input_cfg_t* pstcCfg)
561 {
562     en_result_t enResult = Ok;
563 
564     M0P_TIM3_MODE1->MSCR_f.TS    = pstcCfg->enTsSel;
565     M0P_TIM3_MODE1->MSCR_f.IA0S  = pstcCfg->enIA0Sel;
566     M0P_TIM3_MODE1->MSCR_f.IB0S  = pstcCfg->enIB0Sel;
567     M0P_TIM3_MODE1->FLTR_f.ETP   = pstcCfg->enETRPhase;
568     M0P_TIM3_MODE1->FLTR_f.FLTET = pstcCfg->enFltETR;
569     M0P_TIM3_MODE1->FLTR_f.FLTA0 = pstcCfg->enFltIA0;
570     M0P_TIM3_MODE1->FLTR_f.FLTB0 = pstcCfg->enFltIB0;
571 
572     return enResult;
573 }
574 
575 /**
576  *****************************************************************************
577  ** \brief Timer3 PWC测量边沿起始结束选择(模式1)
578  **
579  **
580  ** \param [in]  enEdgeSel           pwc测量起始终止电平
581  **
582  ** \retval Ok or Error
583  *****************************************************************************/
Tim3_M1_PWC_Edge_Sel(en_tim3_m1cr_Edge_t enEdgeSel)584 en_result_t Tim3_M1_PWC_Edge_Sel(en_tim3_m1cr_Edge_t enEdgeSel)
585 {
586     en_result_t enResult = Ok;
587 
588     switch (enEdgeSel)
589     {
590         case 0:                                 ///< 上升沿到上升沿(周期)
591             M0P_TIM3_MODE1->M1CR_f.EDG1ST = 0;  //上升沿
592             M0P_TIM3_MODE1->M1CR_f.EDG2ND = 0;  //上升沿
593             break;
594         case 1:                                 ///< 下降沿到上升沿(低电平)
595             M0P_TIM3_MODE1->M1CR_f.EDG1ST = 1;  //下降沿
596             M0P_TIM3_MODE1->M1CR_f.EDG2ND = 0;  //上升沿
597             break;
598         case 2:                                 ///< 上升沿到下降沿(高电平)
599             M0P_TIM3_MODE1->M1CR_f.EDG1ST = 0;  //上升沿
600             M0P_TIM3_MODE1->M1CR_f.EDG2ND = 1;  //下降沿
601             break;
602         case 3:                                 ///< 下降沿到下降沿(周期)
603             M0P_TIM3_MODE1->M1CR_f.EDG1ST = 1;  //下降沿
604             M0P_TIM3_MODE1->M1CR_f.EDG2ND = 1;  //下降沿
605             break;
606         default:
607             ;
608             break;
609     }
610 
611     return enResult;
612 }
613 
614 /**
615  *****************************************************************************
616  ** \brief Timer3 启动运行(模式1)
617  **
618  **
619  ** \param [in]  none
620  **
621  ** \retval Ok or Error
622  *****************************************************************************/
Tim3_M1_Run(void)623 en_result_t Tim3_M1_Run(void)
624 {
625     en_result_t enResult = Ok;
626 
627     M0P_TIM3_MODE1->M1CR_f.CTEN = TRUE;
628 
629     return enResult;
630 }
631 
632 /**
633  *****************************************************************************
634  ** \brief Timer3 停止运行(模式1)
635  **
636  **
637  ** \param [in]  none
638  **
639  ** \retval Ok or Error
640  *****************************************************************************/
Tim3_M1_Stop(void)641 en_result_t Tim3_M1_Stop(void)
642 {
643     en_result_t enResult = Ok;
644 
645     M0P_TIM3_MODE1->M1CR_f.CTEN = FALSE;
646 
647     return enResult;
648 }
649 
650 /**
651  *****************************************************************************
652  ** \brief Timer3 16位计数器初值设置(模式1)
653  **
654  **
655  ** \param [in]  u16Data          16位初值
656  **
657  ** \retval Ok or Error
658  *****************************************************************************/
Tim3_M1_Cnt16Set(uint16_t u16Data)659 en_result_t Tim3_M1_Cnt16Set(uint16_t u16Data)
660 {
661     en_result_t enResult = Ok;
662 
663     M0P_TIM3_MODE1->CNT_f.CNT = u16Data;
664 
665     return enResult;
666 }
667 
668 /**
669  *****************************************************************************
670  ** \brief Timer3 16位计数值获取(模式1)
671  **
672  **
673  ** \param [in]  none
674  **
675  ** \retval 16bits计数值
676  *****************************************************************************/
Tim3_M1_Cnt16Get(void)677 uint16_t Tim3_M1_Cnt16Get(void)
678 {
679     uint16_t    u16CntData = 0;
680 
681     u16CntData = M0P_TIM3_MODE1->CNT_f.CNT;
682 
683     return u16CntData;
684 }
685 
686 /**
687  *****************************************************************************
688  ** \brief Timer3 脉冲宽度测量结果数值获取(模式1)
689  **
690  **
691  ** \param [in]  none
692  **
693  ** \retval 16bits脉冲宽度测量结果
694  *****************************************************************************/
Tim3_M1_PWC_CapValueGet(void)695 uint16_t Tim3_M1_PWC_CapValueGet(void)
696 {
697     uint16_t    u16CapData = 0;
698 
699     u16CapData = M0P_TIM3_MODE1->CCR0A_f.CCR0A;
700 
701     return u16CapData;
702 }
703 
704 /**
705  *****************************************************************************
706  ** \brief Timer3 初始化配置(模式23)
707  **
708  **
709  ** \param [in]  pstcCfg       初始化配置结构体指针
710  **
711  ** \retval Ok or Error
712  *****************************************************************************/
Tim3_Mode23_Init(stc_tim3_mode23_cfg_t * pstcCfg)713 en_result_t Tim3_Mode23_Init(stc_tim3_mode23_cfg_t* pstcCfg)
714 {
715     en_result_t enResult = Ok;
716 
717     M0P_TIM3_MODE23->M23CR_f.MODE    = pstcCfg->enWorkMode;
718 
719     M0P_TIM3_MODE23->M23CR_f.PRS     = pstcCfg->enPRS;
720     M0P_TIM3_MODE23->M23CR_f.CT      = pstcCfg->enCT;
721     M0P_TIM3_MODE23->M23CR_f.COMP    = pstcCfg->enPWMTypeSel;
722     M0P_TIM3_MODE23->M23CR_f.PWM2S   = pstcCfg->enPWM2sSel;
723     M0P_TIM3_MODE23->M23CR_f.ONESHOT = pstcCfg->bOneShot;
724     M0P_TIM3_MODE23->M23CR_f.URS     = pstcCfg->bURSSel;
725     M0P_TIM3_MODE23->M23CR_f.DIR     = pstcCfg->enCntDir;
726 
727     return enResult;
728 }
729 
730 /**
731  *****************************************************************************
732  ** \brief Timer3 PWM输出使能(模式23)
733  **
734  **
735  ** \param [in]  bEnOutput          PWM输出使能/禁止设定
736  ** \param [in]  bEnAutoOutput      PWM自动输出使能/禁止设定
737  **
738  ** \retval Ok or Error
739  *****************************************************************************/
Tim3_M23_EnPWM_Output(boolean_t bEnOutput,boolean_t bEnAutoOutput)740 en_result_t Tim3_M23_EnPWM_Output(boolean_t bEnOutput, boolean_t bEnAutoOutput)
741 {
742     en_result_t enResult = Ok;
743 
744     M0P_TIM3_MODE23->DTR_f.MOE = bEnOutput;
745     M0P_TIM3_MODE23->DTR_f.AOE = bEnAutoOutput;
746 
747     return enResult;
748 }
749 
750 
751 /**
752  *****************************************************************************
753  ** \brief Timer3 启动运行(模式23)
754  **
755  **
756  ** \param [in]  none
757  **
758  ** \retval Ok or Error
759  *****************************************************************************/
Tim3_M23_Run(void)760 en_result_t Tim3_M23_Run(void)
761 {
762     en_result_t enResult = Ok;
763 
764     M0P_TIM3_MODE23->M23CR_f.CTEN = TRUE;
765 
766     return enResult;
767 }
768 
769 /**
770  *****************************************************************************
771  ** \brief Timer3 停止运行(模式23)
772  **
773  **
774  ** \param [in]  none
775  **
776  ** \retval Ok or Error
777  *****************************************************************************/
Tim3_M23_Stop(void)778 en_result_t Tim3_M23_Stop(void)
779 {
780     en_result_t enResult = Ok;
781 
782     M0P_TIM3_MODE23->M23CR_f.CTEN = FALSE;
783 
784     return enResult;
785 }
786 
787 /**
788  *****************************************************************************
789  ** \brief Timer3 重载值设置(模式23)
790  **
791  **
792  ** \param [in]  u16Data          16bits重载值
793  ** \param [in]  bArrBufEn        ARR重载缓存使能TRUE/禁止FALSE
794  **
795  ** \retval Ok or Error
796  *****************************************************************************/
Tim3_M23_ARRSet(uint16_t u16Data,boolean_t bArrBufEn)797 en_result_t Tim3_M23_ARRSet(uint16_t u16Data, boolean_t bArrBufEn)
798 {
799     en_result_t enResult = Ok;
800 
801      M0P_TIM3_MODE23->ARR_f.ARR       = u16Data;
802      M0P_TIM3_MODE23->M23CR_f.BUFPEN  = bArrBufEn;
803 
804     return enResult;
805 }
806 
807 /**
808  *****************************************************************************
809  ** \brief Timer3 16位计数器初值设置(模式23)
810  **
811  **
812  ** \param [in]  u16Data          16位初值
813  **
814  ** \retval Ok or Error
815  *****************************************************************************/
Tim3_M23_Cnt16Set(uint16_t u16Data)816 en_result_t Tim3_M23_Cnt16Set(uint16_t u16Data)
817 {
818     en_result_t enResult = Ok;
819 
820     M0P_TIM3_MODE23->CNT_f.CNT = u16Data;
821 
822     return enResult;
823 }
824 
825 /**
826  *****************************************************************************
827  ** \brief Timer3 16位计数值获取(模式23)
828  **
829  **
830  ** \param [in]  none
831  **
832  ** \retval 16bits计数值
833  *****************************************************************************/
Tim3_M23_Cnt16Get(void)834 uint16_t Tim3_M23_Cnt16Get(void)
835 {
836     uint16_t    u16CntData = 0;
837 
838     u16CntData = M0P_TIM3_MODE23->CNT_f.CNT;
839 
840     return u16CntData;
841 }
842 
843 /**
844  *****************************************************************************
845  ** \brief Timer3 比较捕获寄存器CCRxA/CCRxB设置(模式23)
846  **
847  **
848  ** \param [in]  enCCRSel           CCRxA/CCRxB设定
849  ** \param [in]  u16Data            CCRxA/CCRxB 16位初始值
850  **
851  ** \retval Ok or Error
852  *****************************************************************************/
Tim3_M23_CCR_Set(en_tim3_m23_ccrx_t enCCRSel,uint16_t u16Data)853 en_result_t Tim3_M23_CCR_Set(en_tim3_m23_ccrx_t enCCRSel, uint16_t u16Data)
854 {
855     en_result_t enResult = Ok;
856 
857     if(Tim3CCR0A == enCCRSel)
858     {
859         M0P_TIM3_MODE23->CCR0A_f.CCR0A = u16Data;
860     }
861     else if(Tim3CCR0B == enCCRSel)
862     {
863         M0P_TIM3_MODE23->CCR0B_f.CCR0B = u16Data;
864     }
865     else if(Tim3CCR1A == enCCRSel)
866     {
867         M0P_TIM3_MODE23->CCR1A_f.CCR1A = u16Data;
868     }
869     else if(Tim3CCR1B == enCCRSel)
870     {
871         M0P_TIM3_MODE23->CCR1B_f.CCR1B = u16Data;
872     }
873     else if(Tim3CCR2A == enCCRSel)
874     {
875         M0P_TIM3_MODE23->CCR2A_f.CCR2A = u16Data;
876     }
877     else if(Tim3CCR2B == enCCRSel)
878     {
879         M0P_TIM3_MODE23->CCR2B_f.CCR2B = u16Data;
880     }
881     else
882     {
883         enResult = Error;
884     }
885 
886     return enResult;
887 }
888 
889 /**
890  *****************************************************************************
891  ** \brief Timer3 比较捕获寄存器CCRxA/CCRxB读取(模式23)
892  **
893  **
894  ** \param [in]  enCCRSel           CCRxA/CCRxB设定
895  **
896  ** \retval 16bitsCCRxA/CCRxB捕获值
897  *****************************************************************************/
Tim3_M23_CCR_Get(en_tim3_m23_ccrx_t enCCRSel)898 uint16_t Tim3_M23_CCR_Get(en_tim3_m23_ccrx_t enCCRSel)
899 {
900     uint16_t    u16Data = 0;
901 
902     if(Tim3CCR0A == enCCRSel)
903     {
904         u16Data = M0P_TIM3_MODE23->CCR0A_f.CCR0A;
905     }
906     else if(Tim3CCR0B == enCCRSel)
907     {
908         u16Data = M0P_TIM3_MODE23->CCR0B_f.CCR0B;
909     }
910     else if(Tim3CCR1A == enCCRSel)
911     {
912         u16Data = M0P_TIM3_MODE23->CCR1A_f.CCR1A;
913     }
914     else if(Tim3CCR1B == enCCRSel)
915     {
916         u16Data = M0P_TIM3_MODE23->CCR1B_f.CCR1B;
917     }
918     else if(Tim3CCR2A == enCCRSel)
919     {
920         u16Data = M0P_TIM3_MODE23->CCR2A_f.CCR2A;
921     }
922     else if(Tim3CCR2B == enCCRSel)
923     {
924         u16Data = M0P_TIM3_MODE23->CCR2B_f.CCR2B;
925     }
926     else
927     {
928         u16Data = 0;
929     }
930 
931     return u16Data;
932 }
933 
934 /**
935  *****************************************************************************
936  ** \brief Timer3 PWM互补输出模式下,GATE功能选择(模式23)
937  **
938  **
939  ** \param [in]  pstcCfg       初始化配置结构体指针
940  **
941  ** \retval Ok or Error
942  *****************************************************************************/
Tim3_M23_GateFuncSel(stc_tim3_m23_gate_cfg_t * pstcCfg)943 en_result_t Tim3_M23_GateFuncSel(stc_tim3_m23_gate_cfg_t* pstcCfg)
944 {
945     en_result_t enResult = Ok;
946 
947     M0P_TIM3_MODE23->M23CR_f.CSG = pstcCfg->enGateFuncSel;
948     M0P_TIM3_MODE23->M23CR_f.CRG = pstcCfg->bGateRiseCap;
949     M0P_TIM3_MODE23->M23CR_f.CFG = pstcCfg->bGateFallCap;
950 
951     return enResult;
952 }
953 
954 /**
955  *****************************************************************************
956  ** \brief Timer3 主从模式配置(模式23)
957  **
958  **
959  ** \param [in]  pstcCfg       初始化配置结构体指针
960  **
961  ** \retval Ok or Error
962  *****************************************************************************/
Tim3_M23_MasterSlave_Set(stc_tim3_m23_master_slave_cfg_t * pstcCfg)963 en_result_t Tim3_M23_MasterSlave_Set(stc_tim3_m23_master_slave_cfg_t* pstcCfg)
964 {
965     en_result_t enResult = Ok;
966 
967     M0P_TIM3_MODE23->MSCR_f.MSM = pstcCfg->enMasterSlaveSel;
968     M0P_TIM3_MODE23->MSCR_f.MMS = pstcCfg->enMasterSrc;
969     M0P_TIM3_MODE23->MSCR_f.SMS = pstcCfg->enSlaveModeSel;
970     M0P_TIM3_MODE23->MSCR_f.TS  = pstcCfg->enTsSel;
971 
972     return enResult;
973 }
974 
975 /**
976  *****************************************************************************
977  ** \brief Timer3 CHxA/CHxB比较通道控制(模式23)
978  **
979  **
980  ** \param [in]  pstcCfg          初始化配置结构体指针
981  ** \param [in]  enTim3Chx        Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
982  **
983  ** \retval Ok or Error
984  *****************************************************************************/
Tim3_M23_PortOutput_Cfg(en_tim3_channel_t enTim3Chx,stc_tim3_m23_compare_cfg_t * pstcCfg)985 en_result_t Tim3_M23_PortOutput_Cfg(en_tim3_channel_t enTim3Chx, stc_tim3_m23_compare_cfg_t* pstcCfg)
986 {
987     en_result_t enResult = Ok;
988 
989     switch (enTim3Chx)
990     {
991         case Tim3CH0:
992             M0P_TIM3_MODE23->CRCH0_f.CSA         = 0;
993             M0P_TIM3_MODE23->FLTR_f.OCMA0_FLTA0  = pstcCfg->enCHxACmpCtrl;
994             M0P_TIM3_MODE23->FLTR_f.CCPA0        = pstcCfg->enCHxAPolarity;
995             M0P_TIM3_MODE23->CRCH0_f.BUFEA       = pstcCfg->bCHxACmpBufEn;
996             M0P_TIM3_MODE23->M23CR_f.CIS         = pstcCfg->enCHxACmpIntSel;
997 
998             M0P_TIM3_MODE23->CRCH0_f.CSB         = 0;
999             M0P_TIM3_MODE23->FLTR_f.OCMB0_FLTB0  = pstcCfg->enCHxBCmpCtrl;
1000             M0P_TIM3_MODE23->FLTR_f.CCPB0        = pstcCfg->enCHxBPolarity;
1001             M0P_TIM3_MODE23->CRCH0_f.BUFEB       = pstcCfg->bCHxBCmpBufEn;
1002             M0P_TIM3_MODE23->CRCH0_f.CISB        = pstcCfg->enCHxBCmpIntSel;
1003           break;
1004         case Tim3CH1:
1005             M0P_TIM3_MODE23->CRCH1_f.CSA         = 0;
1006             M0P_TIM3_MODE23->FLTR_f.OCMA1_FLTA1  = pstcCfg->enCHxACmpCtrl;
1007             M0P_TIM3_MODE23->FLTR_f.CCPA1        = pstcCfg->enCHxAPolarity;
1008             M0P_TIM3_MODE23->CRCH1_f.BUFEA       = pstcCfg->bCHxACmpBufEn;
1009             M0P_TIM3_MODE23->M23CR_f.CIS         = pstcCfg->enCHxACmpIntSel;
1010 
1011             M0P_TIM3_MODE23->CRCH1_f.CSB         = 0;
1012             M0P_TIM3_MODE23->FLTR_f.OCMB1_FLTB1  = pstcCfg->enCHxBCmpCtrl;
1013             M0P_TIM3_MODE23->FLTR_f.CCPB1        = pstcCfg->enCHxBPolarity;
1014             M0P_TIM3_MODE23->CRCH1_f.BUFEB       = pstcCfg->bCHxBCmpBufEn;
1015             M0P_TIM3_MODE23->CRCH1_f.CISB        = pstcCfg->enCHxBCmpIntSel;
1016           break;
1017         case Tim3CH2:
1018             M0P_TIM3_MODE23->CRCH2_f.CSA         = 0;
1019             M0P_TIM3_MODE23->FLTR_f.OCMA2_FLTA2  = pstcCfg->enCHxACmpCtrl;
1020             M0P_TIM3_MODE23->FLTR_f.CCPA2        = pstcCfg->enCHxAPolarity;
1021             M0P_TIM3_MODE23->CRCH2_f.BUFEA       = pstcCfg->bCHxACmpBufEn;
1022             M0P_TIM3_MODE23->M23CR_f.CIS         = pstcCfg->enCHxACmpIntSel;
1023 
1024             M0P_TIM3_MODE23->CRCH2_f.CSB         = 0;
1025             M0P_TIM3_MODE23->FLTR_f.OCMB2_FLTB2  = pstcCfg->enCHxBCmpCtrl;
1026             M0P_TIM3_MODE23->FLTR_f.CCPB2        = pstcCfg->enCHxBPolarity;
1027             M0P_TIM3_MODE23->CRCH2_f.BUFEB       = pstcCfg->bCHxBCmpBufEn;
1028             M0P_TIM3_MODE23->CRCH2_f.CISB        = pstcCfg->enCHxBCmpIntSel;
1029           break;
1030         default:
1031             enResult = Error;
1032           break;
1033     }
1034 
1035     return enResult;
1036 }
1037 
1038 /**
1039  *****************************************************************************
1040  ** \brief Timer3 CHxA/CHxB输入控制(模式23)
1041  **
1042  **
1043  ** \param [in]  pstcCfg          初始化配置结构体指针
1044  ** \param [in]  enTim3Chx        Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
1045  **
1046  ** \retval Ok or Error
1047  *****************************************************************************/
Tim3_M23_PortInput_Cfg(en_tim3_channel_t enTim3Chx,stc_tim3_m23_input_cfg_t * pstcCfg)1048 en_result_t Tim3_M23_PortInput_Cfg(en_tim3_channel_t enTim3Chx, stc_tim3_m23_input_cfg_t* pstcCfg)
1049 {
1050     en_result_t enResult = Ok;
1051 
1052     switch (enTim3Chx)
1053     {
1054         case Tim3CH0:
1055             M0P_TIM3_MODE23->CRCH0_f.CSA           = 1;
1056             M0P_TIM3_MODE23->CRCH0_f.CFA_CRA_BKSA  = pstcCfg->enCHxACapSel;
1057             M0P_TIM3_MODE23->FLTR_f.OCMA0_FLTA0    = pstcCfg->enCHxAInFlt;
1058             M0P_TIM3_MODE23->FLTR_f.CCPA0          = pstcCfg->enCHxAPolarity;
1059 
1060             M0P_TIM3_MODE23->CRCH0_f.CSB           = 1;
1061             M0P_TIM3_MODE23->CRCH0_f.CFB_CRB_BKSB  = pstcCfg->enCHxBCapSel;
1062             M0P_TIM3_MODE23->FLTR_f.OCMB0_FLTB0    = pstcCfg->enCHxBInFlt;
1063             M0P_TIM3_MODE23->FLTR_f.CCPB0          = pstcCfg->enCHxBPolarity;
1064           break;
1065         case Tim3CH1:
1066             M0P_TIM3_MODE23->CRCH1_f.CSA           = 1;
1067             M0P_TIM3_MODE23->CRCH1_f.CFA_CRA_BKSA  = pstcCfg->enCHxACapSel;
1068             M0P_TIM3_MODE23->FLTR_f.OCMA1_FLTA1    = pstcCfg->enCHxAInFlt;
1069             M0P_TIM3_MODE23->FLTR_f.CCPA1          = pstcCfg->enCHxAPolarity;
1070 
1071             M0P_TIM3_MODE23->CRCH1_f.CSB           = 1;
1072             M0P_TIM3_MODE23->CRCH1_f.CFB_CRB_BKSB  = pstcCfg->enCHxBCapSel;
1073             M0P_TIM3_MODE23->FLTR_f.OCMB1_FLTB1    = pstcCfg->enCHxBInFlt;
1074             M0P_TIM3_MODE23->FLTR_f.CCPB1          = pstcCfg->enCHxBPolarity;
1075           break;
1076         case Tim3CH2:
1077             M0P_TIM3_MODE23->CRCH2_f.CSA           = 1;
1078             M0P_TIM3_MODE23->CRCH2_f.CFA_CRA_BKSA  = pstcCfg->enCHxACapSel;
1079             M0P_TIM3_MODE23->FLTR_f.OCMA2_FLTA2    = pstcCfg->enCHxAInFlt;
1080             M0P_TIM3_MODE23->FLTR_f.CCPA2          = pstcCfg->enCHxAPolarity;
1081 
1082             M0P_TIM3_MODE23->CRCH2_f.CSB           = 1;
1083             M0P_TIM3_MODE23->CRCH2_f.CFB_CRB_BKSB  = pstcCfg->enCHxBCapSel;
1084             M0P_TIM3_MODE23->FLTR_f.OCMB2_FLTB2    = pstcCfg->enCHxBInFlt;
1085             M0P_TIM3_MODE23->FLTR_f.CCPB2          = pstcCfg->enCHxBPolarity;
1086           break;
1087         default:
1088             enResult = Error;
1089           break;
1090     }
1091     return enResult;
1092 }
1093 
1094 /**
1095  *****************************************************************************
1096  ** \brief Timer3 ERT输入控制(模式23)
1097  **
1098  **
1099  ** \param [in]  pstcCfg       初始化配置结构体指针
1100  **
1101  ** \retval Ok or Error
1102  *****************************************************************************/
Tim3_M23_ETRInput_Cfg(stc_tim3_m23_etr_input_cfg_t * pstcCfg)1103 en_result_t Tim3_M23_ETRInput_Cfg(stc_tim3_m23_etr_input_cfg_t* pstcCfg)
1104 {
1105     en_result_t enResult = Ok;
1106 
1107     M0P_TIM3_MODE23->FLTR_f.ETP    = pstcCfg->enETRPolarity;
1108     M0P_TIM3_MODE23->FLTR_f.FLTET  = pstcCfg->enETRFlt;
1109 
1110     return enResult;
1111 }
1112 
1113 /**
1114  *****************************************************************************
1115  ** \brief Timer3 刹车BK输入控制(模式23)
1116  **
1117  **
1118  ** \param [in]  pstcBkCfg      初始化配置结构体指针
1119  **
1120  ** \retval Ok or Error
1121  *****************************************************************************/
Tim3_M23_BrakeInput_Cfg(stc_tim3_m23_bk_input_cfg_t * pstcBkCfg)1122 en_result_t Tim3_M23_BrakeInput_Cfg(stc_tim3_m23_bk_input_cfg_t* pstcBkCfg)
1123 {
1124     en_result_t enResult = Ok;
1125 
1126     M0P_TIM3_MODE23->DTR_f.BKE             = pstcBkCfg->bEnBrake;
1127     M0P_TIM3_MODE23->DTR_f.VCE             = pstcBkCfg->bEnVCBrake;
1128     M0P_TIM3_MODE23->DTR_f.SAFEEN          = pstcBkCfg->bEnSafetyBk;
1129     M0P_TIM3_MODE23->DTR_f.BKSEL           = pstcBkCfg->bEnBKSync;
1130     M0P_TIM3_MODE23->CRCH0_f.CFA_CRA_BKSA  = pstcBkCfg->enBkCH0AStat;
1131     M0P_TIM3_MODE23->CRCH0_f.CFB_CRB_BKSB  = pstcBkCfg->enBkCH0BStat;
1132     M0P_TIM3_MODE23->CRCH1_f.CFA_CRA_BKSA  = pstcBkCfg->enBkCH1AStat;
1133     M0P_TIM3_MODE23->CRCH1_f.CFB_CRB_BKSB  = pstcBkCfg->enBkCH1BStat;
1134     M0P_TIM3_MODE23->CRCH2_f.CFA_CRA_BKSA  = pstcBkCfg->enBkCH2AStat;
1135     M0P_TIM3_MODE23->CRCH2_f.CFB_CRB_BKSB  = pstcBkCfg->enBkCH2BStat;
1136     M0P_TIM3_MODE23->FLTR_f.BKP            = pstcBkCfg->enBrakePolarity;
1137     M0P_TIM3_MODE23->FLTR_f.FLTBK          = pstcBkCfg->enBrakeFlt;
1138 
1139     return enResult;
1140 }
1141 
1142 /**
1143  *****************************************************************************
1144  ** \brief Base Timer3 触发ADC控制(模式23)
1145  **
1146  **
1147  ** \param [in]  pstcCfg       初始化配置结构体指针
1148  **
1149  ** \retval Ok or Error
1150  *****************************************************************************/
Tim3_M23_TrigADC_Cfg(stc_tim3_m23_adc_trig_cfg_t * pstcCfg)1151 en_result_t Tim3_M23_TrigADC_Cfg(stc_tim3_m23_adc_trig_cfg_t* pstcCfg)
1152 {
1153     en_result_t enResult = Ok;
1154 
1155     M0P_TIM3_MODE23->ADTR_f.ADTE   = pstcCfg->bEnTrigADC;
1156     M0P_TIM3_MODE23->ADTR_f.UEVE   = pstcCfg->bEnUevTrigADC;
1157     M0P_TIM3_MODE23->ADTR_f.CMA0E  = pstcCfg->bEnCH0ACmpTrigADC;
1158     M0P_TIM3_MODE23->ADTR_f.CMB0E  = pstcCfg->bEnCH0BCmpTrigADC;
1159     M0P_TIM3_MODE23->ADTR_f.CMA1E  = pstcCfg->bEnCH1ACmpTrigADC;
1160     M0P_TIM3_MODE23->ADTR_f.CMB1E  = pstcCfg->bEnCH1BCmpTrigADC;
1161     M0P_TIM3_MODE23->ADTR_f.CMA2E  = pstcCfg->bEnCH2ACmpTrigADC;
1162     M0P_TIM3_MODE23->ADTR_f.CMB2E  = pstcCfg->bEnCH2BCmpTrigADC;
1163     return enResult;
1164 }
1165 
1166 /**
1167  *****************************************************************************
1168 ** \brief Timer3 死区功能(模式23)
1169  **
1170  **
1171  ** \param [in]  pstcCfg       初始化配置结构体指针
1172  **
1173  ** \retval Ok or Error
1174  *****************************************************************************/
Tim3_M23_DT_Cfg(stc_tim3_m23_dt_cfg_t * pstcCfg)1175 en_result_t Tim3_M23_DT_Cfg(stc_tim3_m23_dt_cfg_t* pstcCfg)
1176 {
1177     en_result_t enResult = Ok;
1178 
1179     M0P_TIM3_MODE23->DTR_f.DTEN = pstcCfg->bEnDeadTime;
1180     M0P_TIM3_MODE23->DTR_f.DTR  = pstcCfg->u8DeadTimeValue;
1181 
1182     return enResult;
1183 }
1184 
1185 /**
1186  *****************************************************************************
1187 ** \brief Timer3 重复周期设置(模式23)
1188  **
1189  **
1190  ** \param [in]  u8ValidPeriod       重复周期值
1191  **
1192  ** \retval Ok or Error
1193  *****************************************************************************/
Tim3_M23_SetValidPeriod(uint8_t u8ValidPeriod)1194 en_result_t Tim3_M23_SetValidPeriod(uint8_t u8ValidPeriod)
1195 {
1196     en_result_t enResult = Ok;
1197 
1198     M0P_TIM3_MODE23->RCR_f.RCR = u8ValidPeriod;
1199 
1200     return enResult;
1201 }
1202 
1203 /**
1204  *****************************************************************************
1205  ** \brief Timer3 OCREF清除功能(模式23)
1206  **
1207  **
1208  ** \param [in]  pstcCfg       初始化配置结构体指针
1209  **
1210  ** \retval Ok or Error
1211  *****************************************************************************/
Tim3_M23_OCRefClr(stc_tim3_m23_OCREF_Clr_cfg_t * pstcCfg)1212 en_result_t Tim3_M23_OCRefClr(stc_tim3_m23_OCREF_Clr_cfg_t* pstcCfg)
1213 {
1214     en_result_t enResult = Ok;
1215 
1216     M0P_TIM3_MODE23->M23CR_f.OCCS = pstcCfg->enOCRefClrSrcSel;
1217     M0P_TIM3_MODE23->M23CR_f.OCCE = pstcCfg->bVCClrEn;
1218 
1219     return enResult;
1220 }
1221 
1222 /**
1223  *****************************************************************************
1224  ** \brief Timer3 使能DMA传输(模式23)
1225  **
1226  **
1227  ** \param [in]  pstcCfg       初始化配置结构体指针
1228  **
1229  ** \retval Ok or Error
1230  *****************************************************************************/
Tim3_M23_EnDMA(stc_tim3_m23_trig_dma_cfg_t * pstcCfg)1231 en_result_t Tim3_M23_EnDMA(stc_tim3_m23_trig_dma_cfg_t* pstcCfg)
1232 {
1233     en_result_t enResult = Ok;
1234 
1235     M0P_TIM3_MODE23->M23CR_f.UDE  = pstcCfg->bUevTrigDMA;
1236     M0P_TIM3_MODE23->M23CR_f.TDE  = pstcCfg->bTITrigDMA;
1237     M0P_TIM3_MODE23->CRCH0_f.CDEA = pstcCfg->bCmpA0TrigDMA;
1238     M0P_TIM3_MODE23->CRCH0_f.CDEB = pstcCfg->bCmpB0TrigDMA;
1239     M0P_TIM3_MODE23->CRCH1_f.CDEA = pstcCfg->bCmpA1TrigDMA;
1240     M0P_TIM3_MODE23->CRCH1_f.CDEB = pstcCfg->bCmpB1TrigDMA;
1241     M0P_TIM3_MODE23->CRCH2_f.CDEA = pstcCfg->bCmpA2TrigDMA;
1242     M0P_TIM3_MODE23->CRCH2_f.CDEB = pstcCfg->bCmpB2TrigDMA;
1243     M0P_TIM3_MODE23->MSCR_f.CCDS  = pstcCfg->enCmpUevTrigDMA;
1244 
1245     return enResult;
1246 }
1247 
1248 /**
1249  *****************************************************************************
1250  ** \brief Timer3 捕获比较A软件触发(模式23)
1251  **
1252  **
1253  ** \param [in]  enTim3Chx           Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
1254  **
1255  ** \retval Ok or Error
1256  *****************************************************************************/
Tim3_M23_EnSwTrigCapCmpA(en_tim3_channel_t enTim3Chx)1257 en_result_t Tim3_M23_EnSwTrigCapCmpA(en_tim3_channel_t enTim3Chx)
1258 {
1259     en_result_t enResult = Ok;
1260     if(Tim3CH0 == enTim3Chx)
1261     {
1262         M0P_TIM3_MODE23->CRCH0_f.CCGA = TRUE;
1263     }
1264     else if(Tim3CH1 == enTim3Chx)
1265     {
1266         M0P_TIM3_MODE23->CRCH1_f.CCGA = TRUE;
1267     }
1268     else if(Tim3CH2 == enTim3Chx)
1269     {
1270         M0P_TIM3_MODE23->CRCH2_f.CCGA = TRUE;
1271     }
1272     else
1273     {
1274         enResult = Error;
1275     }
1276     return enResult;
1277 }
1278 
1279 /**
1280  *****************************************************************************
1281  ** \brief Timer3 捕获比较B软件触发(模式23)
1282  **
1283  **
1284  ** \param [in]  enTim3Chx           Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
1285  **
1286  ** \retval Ok or Error
1287  *****************************************************************************/
Tim3_M23_EnSwTrigCapCmpB(en_tim3_channel_t enTim3Chx)1288 en_result_t Tim3_M23_EnSwTrigCapCmpB(en_tim3_channel_t enTim3Chx)
1289 {
1290     en_result_t enResult = Ok;
1291     if(Tim3CH0 == enTim3Chx)
1292     {
1293         M0P_TIM3_MODE23->CRCH0_f.CCGB = TRUE;
1294     }
1295     else if(Tim3CH1 == enTim3Chx)
1296     {
1297         M0P_TIM3_MODE23->CRCH1_f.CCGB = TRUE;
1298     }
1299     else if(Tim3CH2 == enTim3Chx)
1300     {
1301         M0P_TIM3_MODE23->CRCH2_f.CCGB = TRUE;
1302     }
1303     else
1304     {
1305         enResult = Error;
1306     }
1307     return enResult;
1308 }
1309 
1310 /**
1311  *****************************************************************************
1312  ** \brief Timer3 软件更新使能(模式23)
1313  **
1314  **
1315  ** \param [in]  none
1316  **
1317  ** \retval Ok or Error
1318  *****************************************************************************/
Tim3_M23_EnSwUev(void)1319 en_result_t Tim3_M23_EnSwUev(void)
1320 {
1321     en_result_t enResult = Ok;
1322 
1323     M0P_TIM3_MODE23->M23CR_f.UG = TRUE;
1324 
1325     return enResult;
1326 }
1327 
1328 /**
1329  *****************************************************************************
1330  ** \brief Timer3 软件触发使能(模式23)
1331  **
1332  **
1333  ** \param [in]  none
1334  **
1335  ** \retval Ok or Error
1336  *****************************************************************************/
Tim3_M23_EnSwTrig(void)1337 en_result_t Tim3_M23_EnSwTrig(void)
1338 {
1339     en_result_t enResult = Ok;
1340 
1341     M0P_TIM3_MODE23->M23CR_f.TG = TRUE;
1342 
1343     return enResult;
1344 }
1345 
1346 /**
1347  *****************************************************************************
1348  ** \brief Timer3 软件刹车使能(模式23)
1349  **
1350  **
1351  ** \param [in]  none
1352  **
1353  ** \retval Ok or Error
1354  *****************************************************************************/
Tim3_M23_EnSwBk(void)1355 en_result_t Tim3_M23_EnSwBk(void)
1356 {
1357     en_result_t enResult = Ok;
1358 
1359     M0P_TIM3_MODE23->M23CR_f.BG = TRUE;
1360 
1361     return enResult;
1362 }
1363 
1364 //@} // Tim3Group
1365 
1366 /*******************************************************************************
1367  * EOF (not truncated)
1368  ******************************************************************************/
1369