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