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