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