| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345 |
- /******************************************************************************
- * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved.
- *
- * This software component is licensed by XHSC under BSD 3-Clause license
- * (the "License"); You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- *
- ******************************************************************************/
- /******************************************************************************
- * @file timer3.c
- *
- * @brief Source file for TIMER3 functions
- *
- * @author MADS Team
- *
- ******************************************************************************/
- /** \file timer3.c
- **
- ** Common API of base timer.
- ** @link Tiemr3 Group Some description @endlink
- **
- ** - 2019-04-18 Husj First Version
- **
- ******************************************************************************/
- /*******************************************************************************
- * Include files
- ******************************************************************************/
- #include "timer3.h"
- /**
- *******************************************************************************
- ** \addtogroup Tim3Group
- ******************************************************************************/
- //@{
- /*******************************************************************************
- * Local pre-processor symbols/macros ('#define')
- ******************************************************************************/
- /*******************************************************************************
- * Global variable definitions (declared in header file with 'extern')
- ******************************************************************************/
- /*******************************************************************************
- * Local type definitions ('typedef')
- ******************************************************************************/
- /*******************************************************************************
- * Local variable definitions ('static')
- ******************************************************************************/
- /*******************************************************************************
- * Local function prototypes ('static')
- ******************************************************************************/
- /*******************************************************************************
- * Function implementation - global ('extern') and local ('static')
- ******************************************************************************/
- /**
- *****************************************************************************
- ** \brief Timer3 中断标志获取(模式0/1/23)
- **
- **
- ** \param [in] enTim3Irq 中断类型
- **
- ** \retval TRUE or FALSE
- *****************************************************************************/
- boolean_t Tim3_GetIntFlag(en_tim3_irq_type_t enTim3Irq)
- {
- boolean_t bRetVal = FALSE;
- uint32_t u32Val;
-
- u32Val = M0P_TIM3_MODE23->IFR;
- bRetVal = (u32Val>>enTim3Irq) & 0x1;
- return bRetVal;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 中断标志清除(模式0/1/23)
- **
- **
- ** \param [in] enTim3Irq 中断类型
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_ClearIntFlag(en_tim3_irq_type_t enTim3Irq)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->ICLR = ~(1u<<enTim3Irq);
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 中断所有标志清除(模式23)
- **
- **
- **
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_ClearAllIntFlag(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->ICLR = 0;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 中断使能(模式0)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_Mode0_EnableIrq(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->M0CR_f.UIE = TRUE;
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 中断禁止(模式0)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_Mode0_DisableIrq(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->M0CR_f.UIE = FALSE;
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 中断使能(模式1)
- **
- **
- ** \param [in] enTim3Irq 中断类型
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_Mode1_EnableIrq (en_tim3_irq_type_t enTim3Irq)
- {
- en_result_t enResult = Ok;
-
-
- switch (enTim3Irq)
- {
- case Tim3UevIrq:
- M0P_TIM3_MODE1->M1CR_f.UIE = TRUE;
- break;
- case Tim3CA0Irq:
- M0P_TIM3_MODE1->CR0_f.CIEA = TRUE;
- break;
- default:
- enResult = Error;
- break;
- }
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 中断禁止(模式1)
- **
- **
- ** \param [in] enTim3Irq 中断类型
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_Mode1_DisableIrq (en_tim3_irq_type_t enTim3Irq)
- {
- en_result_t enResult = Ok;
-
-
- switch (enTim3Irq)
- {
- case Tim3UevIrq:
- M0P_TIM3_MODE1->M1CR_f.UIE = FALSE;
- break;
- case Tim3CA0Irq:
- M0P_TIM3_MODE1->CR0_f.CIEA = FALSE;
- break;
- default:
- enResult = Error;
- break;
- }
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 中断使能(模式23)
- **
- **
- ** \param [in] enTim3Irq 中断类型
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_Mode23_EnableIrq (en_tim3_irq_type_t enTim3Irq)
- {
- en_result_t enResult = Ok;
-
-
- switch (enTim3Irq)
- {
- case Tim3UevIrq:
- M0P_TIM3_MODE23->M23CR_f.UIE = TRUE;
- break;
- case Tim3CA0Irq:
- M0P_TIM3_MODE23->CRCH0_f.CIEA = TRUE;
- break;
- case Tim3CB0Irq:
- M0P_TIM3_MODE23->CRCH0_f.CIEB = TRUE;
- break;
- case Tim3CA1Irq:
- M0P_TIM3_MODE23->CRCH1_f.CIEA = TRUE;
- break;
- case Tim3CB1Irq:
- M0P_TIM3_MODE23->CRCH1_f.CIEB = TRUE;
- break;
- case Tim3CA2Irq:
- M0P_TIM3_MODE23->CRCH2_f.CIEA = TRUE;
- break;
- case Tim3CB2Irq:
- M0P_TIM3_MODE23->CRCH2_f.CIEB = TRUE;
- break;
- case Tim3BkIrq:
- M0P_TIM3_MODE23->M23CR_f.BIE = TRUE;
- break;
- case Tim3TrigIrq:
- M0P_TIM3_MODE23->M23CR_f.TIE = TRUE;
- break;
- default:
- enResult = Error;
- break;
- }
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 中断禁止(模式23)
- **
- **
- ** \param [in] enTim3Irq 中断类型
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_Mode23_DisableIrq (en_tim3_irq_type_t enTim3Irq)
- {
- en_result_t enResult = Ok;
-
-
- switch (enTim3Irq)
- {
- case Tim3UevIrq:
- M0P_TIM3_MODE23->M23CR_f.UIE = FALSE;
- break;
- case Tim3CA0Irq:
- M0P_TIM3_MODE23->CRCH0_f.CIEA = FALSE;
- break;
- case Tim3CB0Irq:
- M0P_TIM3_MODE23->CRCH0_f.CIEB = FALSE;
- break;
- case Tim3CA1Irq:
- M0P_TIM3_MODE23->CRCH1_f.CIEA = FALSE;
- break;
- case Tim3CB1Irq:
- M0P_TIM3_MODE23->CRCH1_f.CIEB = FALSE;
- break;
- case Tim3CA2Irq:
- M0P_TIM3_MODE23->CRCH2_f.CIEA = FALSE;
- break;
- case Tim3CB2Irq:
- M0P_TIM3_MODE23->CRCH2_f.CIEB = FALSE;
- break;
- case Tim3BkIrq:
- M0P_TIM3_MODE23->M23CR_f.BIE = FALSE;
- break;
- case Tim3TrigIrq:
- M0P_TIM3_MODE23->M23CR_f.TIE = FALSE;
- break;
- default:
- enResult = Error;
- break;
- }
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 初始化配置(模式0)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_Mode0_Init(stc_tim3_mode0_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->M0CR_f.MODE = pstcCfg->enWorkMode;
- M0P_TIM3_MODE0->M0CR_f.GATEP = pstcCfg->enGateP;
- M0P_TIM3_MODE0->M0CR_f.GATE = pstcCfg->bEnGate;
- M0P_TIM3_MODE0->M0CR_f.PRS = pstcCfg->enPRS;
- M0P_TIM3_MODE0->M0CR_f.TOGEN = pstcCfg->bEnTog;
- M0P_TIM3_MODE0->M0CR_f.CT = pstcCfg->enCT;
- M0P_TIM3_MODE0->M0CR_f.MD = pstcCfg->enCntMode;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 启动运行(模式0)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M0_Run(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->M0CR_f.CTEN = TRUE;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 停止运行(模式0)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M0_Stop(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->M0CR_f.CTEN = FALSE;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 端口输出使能/禁止设定(模式0)
- **
- **
- ** \param [in] bEnOutput 翻转输出设定 TRUE:使能, FALSE:禁止
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M0_Enable_Output(boolean_t bEnOutput)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->DTR_f.MOE = bEnOutput;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 翻转使能/禁止(低电平)设定(模式0)
- **
- **
- ** \param [in] bEnTOG 翻转输出设定 TRUE:使能, FALSE:禁止
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M0_EnTOG(boolean_t bEnTOG)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->M0CR_f.TOGEN = bEnTOG;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 16位计数器初值设置(模式0)
- **
- **
- ** \param [in] u16Data CNT 16位初值
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M0_Cnt16Set(uint16_t u16Data)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->CNT_f.CNT = u16Data;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 16位计数值获取(模式0)
- **
- **
- ** \param [in] none
- **
- ** \retval 16bits计数值
- *****************************************************************************/
- uint16_t Tim3_M0_Cnt16Get(void)
- {
- uint16_t u16CntData = 0;
-
- u16CntData = M0P_TIM3_MODE0->CNT_f.CNT;
-
- return u16CntData;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 重载值设置(模式0)
- **
- **
- ** \param [in] u16Data 16bits重载值
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M0_ARRSet(uint16_t u16Data)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->ARR_f.ARR = u16Data;
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 32位计数器初值设置(模式0)
- **
- **
- ** \param [in] u32Data 32位初值
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M0_Cnt32Set(uint32_t u32Data)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE0->CNT32_f.CNT32 = u32Data;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 32位计数值获取(模式0)
- **
- **
- ** \param [in] none
- **
- ** \retval 32bits计数值
- *****************************************************************************/
- uint32_t Tim3_M0_Cnt32Get(void)
- {
- uint32_t u32CntData = 0;
-
- u32CntData = M0P_TIM3_MODE0->CNT32_f.CNT32;
-
- return u32CntData;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 初始化配置(模式1)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_Mode1_Init(stc_tim3_mode1_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE1->M1CR_f.MODE = pstcCfg->enWorkMode;
- M0P_TIM3_MODE1->M1CR_f.PRS = pstcCfg->enPRS;
- M0P_TIM3_MODE1->M1CR_f.CT = pstcCfg->enCT;
- M0P_TIM3_MODE1->M1CR_f.ONESHOT = pstcCfg->enOneShot;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 PWC 输入配置(模式1)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M1_Input_Cfg(stc_tim3_pwc_input_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE1->MSCR_f.TS = pstcCfg->enTsSel;
- M0P_TIM3_MODE1->MSCR_f.IA0S = pstcCfg->enIA0Sel;
- M0P_TIM3_MODE1->MSCR_f.IB0S = pstcCfg->enIB0Sel;
- M0P_TIM3_MODE1->FLTR_f.ETP = pstcCfg->enETRPhase;
- M0P_TIM3_MODE1->FLTR_f.FLTET = pstcCfg->enFltETR;
- M0P_TIM3_MODE1->FLTR_f.FLTA0 = pstcCfg->enFltIA0;
- M0P_TIM3_MODE1->FLTR_f.FLTB0 = pstcCfg->enFltIB0;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 PWC测量边沿起始结束选择(模式1)
- **
- **
- ** \param [in] enEdgeSel pwc测量起始终止电平
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M1_PWC_Edge_Sel(en_tim3_m1cr_Edge_t enEdgeSel)
- {
- en_result_t enResult = Ok;
-
- switch (enEdgeSel)
- {
- case 0: ///< 上升沿到上升沿(周期)
- M0P_TIM3_MODE1->M1CR_f.EDG1ST = 0; //上升沿
- M0P_TIM3_MODE1->M1CR_f.EDG2ND = 0; //上升沿
- break;
- case 1: ///< 下降沿到上升沿(低电平)
- M0P_TIM3_MODE1->M1CR_f.EDG1ST = 1; //下降沿
- M0P_TIM3_MODE1->M1CR_f.EDG2ND = 0; //上升沿
- break;
- case 2: ///< 上升沿到下降沿(高电平)
- M0P_TIM3_MODE1->M1CR_f.EDG1ST = 0; //上升沿
- M0P_TIM3_MODE1->M1CR_f.EDG2ND = 1; //下降沿
- break;
- case 3: ///< 下降沿到下降沿(周期)
- M0P_TIM3_MODE1->M1CR_f.EDG1ST = 1; //下降沿
- M0P_TIM3_MODE1->M1CR_f.EDG2ND = 1; //下降沿
- break;
- default:
- ;
- break;
- }
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 启动运行(模式1)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M1_Run(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE1->M1CR_f.CTEN = TRUE;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 停止运行(模式1)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M1_Stop(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE1->M1CR_f.CTEN = FALSE;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 16位计数器初值设置(模式1)
- **
- **
- ** \param [in] u16Data 16位初值
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M1_Cnt16Set(uint16_t u16Data)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE1->CNT_f.CNT = u16Data;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 16位计数值获取(模式1)
- **
- **
- ** \param [in] none
- **
- ** \retval 16bits计数值
- *****************************************************************************/
- uint16_t Tim3_M1_Cnt16Get(void)
- {
- uint16_t u16CntData = 0;
-
- u16CntData = M0P_TIM3_MODE1->CNT_f.CNT;
-
- return u16CntData;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 脉冲宽度测量结果数值获取(模式1)
- **
- **
- ** \param [in] none
- **
- ** \retval 16bits脉冲宽度测量结果
- *****************************************************************************/
- uint16_t Tim3_M1_PWC_CapValueGet(void)
- {
- uint16_t u16CapData = 0;
-
- u16CapData = M0P_TIM3_MODE1->CCR0A_f.CCR0A;
-
- return u16CapData;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 初始化配置(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_Mode23_Init(stc_tim3_mode23_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->M23CR_f.MODE = pstcCfg->enWorkMode;
-
- M0P_TIM3_MODE23->M23CR_f.PRS = pstcCfg->enPRS;
- M0P_TIM3_MODE23->M23CR_f.CT = pstcCfg->enCT;
- M0P_TIM3_MODE23->M23CR_f.COMP = pstcCfg->enPWMTypeSel;
- M0P_TIM3_MODE23->M23CR_f.PWM2S = pstcCfg->enPWM2sSel;
- M0P_TIM3_MODE23->M23CR_f.ONESHOT = pstcCfg->bOneShot;
- M0P_TIM3_MODE23->M23CR_f.URS = pstcCfg->bURSSel;
- M0P_TIM3_MODE23->M23CR_f.DIR = pstcCfg->enCntDir;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 PWM输出使能(模式23)
- **
- **
- ** \param [in] bEnOutput PWM输出使能/禁止设定
- ** \param [in] bEnAutoOutput PWM自动输出使能/禁止设定
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_EnPWM_Output(boolean_t bEnOutput, boolean_t bEnAutoOutput)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->DTR_f.MOE = bEnOutput;
- M0P_TIM3_MODE23->DTR_f.AOE = bEnAutoOutput;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 启动运行(模式23)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_Run(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->M23CR_f.CTEN = TRUE;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 停止运行(模式23)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_Stop(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->M23CR_f.CTEN = FALSE;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 重载值设置(模式23)
- **
- **
- ** \param [in] u16Data 16bits重载值
- ** \param [in] bArrBufEn ARR重载缓存使能TRUE/禁止FALSE
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_ARRSet(uint16_t u16Data, boolean_t bArrBufEn)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->ARR_f.ARR = u16Data;
- M0P_TIM3_MODE23->M23CR_f.BUFPEN = bArrBufEn;
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 16位计数器初值设置(模式23)
- **
- **
- ** \param [in] u16Data 16位初值
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_Cnt16Set(uint16_t u16Data)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->CNT_f.CNT = u16Data;
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 16位计数值获取(模式23)
- **
- **
- ** \param [in] none
- **
- ** \retval 16bits计数值
- *****************************************************************************/
- uint16_t Tim3_M23_Cnt16Get(void)
- {
- uint16_t u16CntData = 0;
-
- u16CntData = M0P_TIM3_MODE23->CNT_f.CNT;
-
- return u16CntData;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 比较捕获寄存器CCRxA/CCRxB设置(模式23)
- **
- **
- ** \param [in] enCCRSel CCRxA/CCRxB设定
- ** \param [in] u16Data CCRxA/CCRxB 16位初始值
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_CCR_Set(en_tim3_m23_ccrx_t enCCRSel, uint16_t u16Data)
- {
- en_result_t enResult = Ok;
-
- if(Tim3CCR0A == enCCRSel)
- {
- M0P_TIM3_MODE23->CCR0A_f.CCR0A = u16Data;
- }
- else if(Tim3CCR0B == enCCRSel)
- {
- M0P_TIM3_MODE23->CCR0B_f.CCR0B = u16Data;
- }
- else if(Tim3CCR1A == enCCRSel)
- {
- M0P_TIM3_MODE23->CCR1A_f.CCR1A = u16Data;
- }
- else if(Tim3CCR1B == enCCRSel)
- {
- M0P_TIM3_MODE23->CCR1B_f.CCR1B = u16Data;
- }
- else if(Tim3CCR2A == enCCRSel)
- {
- M0P_TIM3_MODE23->CCR2A_f.CCR2A = u16Data;
- }
- else if(Tim3CCR2B == enCCRSel)
- {
- M0P_TIM3_MODE23->CCR2B_f.CCR2B = u16Data;
- }
- else
- {
- enResult = Error;
- }
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 比较捕获寄存器CCRxA/CCRxB读取(模式23)
- **
- **
- ** \param [in] enCCRSel CCRxA/CCRxB设定
- **
- ** \retval 16bitsCCRxA/CCRxB捕获值
- *****************************************************************************/
- uint16_t Tim3_M23_CCR_Get(en_tim3_m23_ccrx_t enCCRSel)
- {
- uint16_t u16Data = 0;
-
- if(Tim3CCR0A == enCCRSel)
- {
- u16Data = M0P_TIM3_MODE23->CCR0A_f.CCR0A;
- }
- else if(Tim3CCR0B == enCCRSel)
- {
- u16Data = M0P_TIM3_MODE23->CCR0B_f.CCR0B;
- }
- else if(Tim3CCR1A == enCCRSel)
- {
- u16Data = M0P_TIM3_MODE23->CCR1A_f.CCR1A;
- }
- else if(Tim3CCR1B == enCCRSel)
- {
- u16Data = M0P_TIM3_MODE23->CCR1B_f.CCR1B;
- }
- else if(Tim3CCR2A == enCCRSel)
- {
- u16Data = M0P_TIM3_MODE23->CCR2A_f.CCR2A;
- }
- else if(Tim3CCR2B == enCCRSel)
- {
- u16Data = M0P_TIM3_MODE23->CCR2B_f.CCR2B;
- }
- else
- {
- u16Data = 0;
- }
-
- return u16Data;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 PWM互补输出模式下,GATE功能选择(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_GateFuncSel(stc_tim3_m23_gate_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->M23CR_f.CSG = pstcCfg->enGateFuncSel;
- M0P_TIM3_MODE23->M23CR_f.CRG = pstcCfg->bGateRiseCap;
- M0P_TIM3_MODE23->M23CR_f.CFG = pstcCfg->bGateFallCap;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 主从模式配置(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_MasterSlave_Set(stc_tim3_m23_master_slave_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->MSCR_f.MSM = pstcCfg->enMasterSlaveSel;
- M0P_TIM3_MODE23->MSCR_f.MMS = pstcCfg->enMasterSrc;
- M0P_TIM3_MODE23->MSCR_f.SMS = pstcCfg->enSlaveModeSel;
- M0P_TIM3_MODE23->MSCR_f.TS = pstcCfg->enTsSel;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 CHxA/CHxB比较通道控制(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- ** \param [in] enTim3Chx Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_PortOutput_Cfg(en_tim3_channel_t enTim3Chx, stc_tim3_m23_compare_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- switch (enTim3Chx)
- {
- case Tim3CH0:
- M0P_TIM3_MODE23->CRCH0_f.CSA = 0;
- M0P_TIM3_MODE23->FLTR_f.OCMA0_FLTA0 = pstcCfg->enCHxACmpCtrl;
- M0P_TIM3_MODE23->FLTR_f.CCPA0 = pstcCfg->enCHxAPolarity;
- M0P_TIM3_MODE23->CRCH0_f.BUFEA = pstcCfg->bCHxACmpBufEn;
- M0P_TIM3_MODE23->M23CR_f.CIS = pstcCfg->enCHxACmpIntSel;
-
- M0P_TIM3_MODE23->CRCH0_f.CSB = 0;
- M0P_TIM3_MODE23->FLTR_f.OCMB0_FLTB0 = pstcCfg->enCHxBCmpCtrl;
- M0P_TIM3_MODE23->FLTR_f.CCPB0 = pstcCfg->enCHxBPolarity;
- M0P_TIM3_MODE23->CRCH0_f.BUFEB = pstcCfg->bCHxBCmpBufEn;
- M0P_TIM3_MODE23->CRCH0_f.CISB = pstcCfg->enCHxBCmpIntSel;
- break;
- case Tim3CH1:
- M0P_TIM3_MODE23->CRCH1_f.CSA = 0;
- M0P_TIM3_MODE23->FLTR_f.OCMA1_FLTA1 = pstcCfg->enCHxACmpCtrl;
- M0P_TIM3_MODE23->FLTR_f.CCPA1 = pstcCfg->enCHxAPolarity;
- M0P_TIM3_MODE23->CRCH1_f.BUFEA = pstcCfg->bCHxACmpBufEn;
- M0P_TIM3_MODE23->M23CR_f.CIS = pstcCfg->enCHxACmpIntSel;
-
- M0P_TIM3_MODE23->CRCH1_f.CSB = 0;
- M0P_TIM3_MODE23->FLTR_f.OCMB1_FLTB1 = pstcCfg->enCHxBCmpCtrl;
- M0P_TIM3_MODE23->FLTR_f.CCPB1 = pstcCfg->enCHxBPolarity;
- M0P_TIM3_MODE23->CRCH1_f.BUFEB = pstcCfg->bCHxBCmpBufEn;
- M0P_TIM3_MODE23->CRCH1_f.CISB = pstcCfg->enCHxBCmpIntSel;
- break;
- case Tim3CH2:
- M0P_TIM3_MODE23->CRCH2_f.CSA = 0;
- M0P_TIM3_MODE23->FLTR_f.OCMA2_FLTA2 = pstcCfg->enCHxACmpCtrl;
- M0P_TIM3_MODE23->FLTR_f.CCPA2 = pstcCfg->enCHxAPolarity;
- M0P_TIM3_MODE23->CRCH2_f.BUFEA = pstcCfg->bCHxACmpBufEn;
- M0P_TIM3_MODE23->M23CR_f.CIS = pstcCfg->enCHxACmpIntSel;
-
- M0P_TIM3_MODE23->CRCH2_f.CSB = 0;
- M0P_TIM3_MODE23->FLTR_f.OCMB2_FLTB2 = pstcCfg->enCHxBCmpCtrl;
- M0P_TIM3_MODE23->FLTR_f.CCPB2 = pstcCfg->enCHxBPolarity;
- M0P_TIM3_MODE23->CRCH2_f.BUFEB = pstcCfg->bCHxBCmpBufEn;
- M0P_TIM3_MODE23->CRCH2_f.CISB = pstcCfg->enCHxBCmpIntSel;
- break;
- default:
- enResult = Error;
- break;
- }
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 CHxA/CHxB输入控制(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- ** \param [in] enTim3Chx Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_PortInput_Cfg(en_tim3_channel_t enTim3Chx, stc_tim3_m23_input_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
- switch (enTim3Chx)
- {
- case Tim3CH0:
- M0P_TIM3_MODE23->CRCH0_f.CSA = 1;
- M0P_TIM3_MODE23->CRCH0_f.CFA_CRA_BKSA = pstcCfg->enCHxACapSel;
- M0P_TIM3_MODE23->FLTR_f.OCMA0_FLTA0 = pstcCfg->enCHxAInFlt;
- M0P_TIM3_MODE23->FLTR_f.CCPA0 = pstcCfg->enCHxAPolarity;
-
- M0P_TIM3_MODE23->CRCH0_f.CSB = 1;
- M0P_TIM3_MODE23->CRCH0_f.CFB_CRB_BKSB = pstcCfg->enCHxBCapSel;
- M0P_TIM3_MODE23->FLTR_f.OCMB0_FLTB0 = pstcCfg->enCHxBInFlt;
- M0P_TIM3_MODE23->FLTR_f.CCPB0 = pstcCfg->enCHxBPolarity;
- break;
- case Tim3CH1:
- M0P_TIM3_MODE23->CRCH1_f.CSA = 1;
- M0P_TIM3_MODE23->CRCH1_f.CFA_CRA_BKSA = pstcCfg->enCHxACapSel;
- M0P_TIM3_MODE23->FLTR_f.OCMA1_FLTA1 = pstcCfg->enCHxAInFlt;
- M0P_TIM3_MODE23->FLTR_f.CCPA1 = pstcCfg->enCHxAPolarity;
-
- M0P_TIM3_MODE23->CRCH1_f.CSB = 1;
- M0P_TIM3_MODE23->CRCH1_f.CFB_CRB_BKSB = pstcCfg->enCHxBCapSel;
- M0P_TIM3_MODE23->FLTR_f.OCMB1_FLTB1 = pstcCfg->enCHxBInFlt;
- M0P_TIM3_MODE23->FLTR_f.CCPB1 = pstcCfg->enCHxBPolarity;
- break;
- case Tim3CH2:
- M0P_TIM3_MODE23->CRCH2_f.CSA = 1;
- M0P_TIM3_MODE23->CRCH2_f.CFA_CRA_BKSA = pstcCfg->enCHxACapSel;
- M0P_TIM3_MODE23->FLTR_f.OCMA2_FLTA2 = pstcCfg->enCHxAInFlt;
- M0P_TIM3_MODE23->FLTR_f.CCPA2 = pstcCfg->enCHxAPolarity;
-
- M0P_TIM3_MODE23->CRCH2_f.CSB = 1;
- M0P_TIM3_MODE23->CRCH2_f.CFB_CRB_BKSB = pstcCfg->enCHxBCapSel;
- M0P_TIM3_MODE23->FLTR_f.OCMB2_FLTB2 = pstcCfg->enCHxBInFlt;
- M0P_TIM3_MODE23->FLTR_f.CCPB2 = pstcCfg->enCHxBPolarity;
- break;
- default:
- enResult = Error;
- break;
- }
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 ERT输入控制(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_ETRInput_Cfg(stc_tim3_m23_etr_input_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->FLTR_f.ETP = pstcCfg->enETRPolarity;
- M0P_TIM3_MODE23->FLTR_f.FLTET = pstcCfg->enETRFlt;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 刹车BK输入控制(模式23)
- **
- **
- ** \param [in] pstcBkCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_BrakeInput_Cfg(stc_tim3_m23_bk_input_cfg_t* pstcBkCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->DTR_f.BKE = pstcBkCfg->bEnBrake;
- M0P_TIM3_MODE23->DTR_f.VCE = pstcBkCfg->bEnVCBrake;
- M0P_TIM3_MODE23->DTR_f.SAFEEN = pstcBkCfg->bEnSafetyBk;
- M0P_TIM3_MODE23->DTR_f.BKSEL = pstcBkCfg->bEnBKSync;
- M0P_TIM3_MODE23->CRCH0_f.CFA_CRA_BKSA = pstcBkCfg->enBkCH0AStat;
- M0P_TIM3_MODE23->CRCH0_f.CFB_CRB_BKSB = pstcBkCfg->enBkCH0BStat;
- M0P_TIM3_MODE23->CRCH1_f.CFA_CRA_BKSA = pstcBkCfg->enBkCH1AStat;
- M0P_TIM3_MODE23->CRCH1_f.CFB_CRB_BKSB = pstcBkCfg->enBkCH1BStat;
- M0P_TIM3_MODE23->CRCH2_f.CFA_CRA_BKSA = pstcBkCfg->enBkCH2AStat;
- M0P_TIM3_MODE23->CRCH2_f.CFB_CRB_BKSB = pstcBkCfg->enBkCH2BStat;
- M0P_TIM3_MODE23->FLTR_f.BKP = pstcBkCfg->enBrakePolarity;
- M0P_TIM3_MODE23->FLTR_f.FLTBK = pstcBkCfg->enBrakeFlt;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Base Timer3 触发ADC控制(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_TrigADC_Cfg(stc_tim3_m23_adc_trig_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->ADTR_f.ADTE = pstcCfg->bEnTrigADC;
- M0P_TIM3_MODE23->ADTR_f.UEVE = pstcCfg->bEnUevTrigADC;
- M0P_TIM3_MODE23->ADTR_f.CMA0E = pstcCfg->bEnCH0ACmpTrigADC;
- M0P_TIM3_MODE23->ADTR_f.CMB0E = pstcCfg->bEnCH0BCmpTrigADC;
- M0P_TIM3_MODE23->ADTR_f.CMA1E = pstcCfg->bEnCH1ACmpTrigADC;
- M0P_TIM3_MODE23->ADTR_f.CMB1E = pstcCfg->bEnCH1BCmpTrigADC;
- M0P_TIM3_MODE23->ADTR_f.CMA2E = pstcCfg->bEnCH2ACmpTrigADC;
- M0P_TIM3_MODE23->ADTR_f.CMB2E = pstcCfg->bEnCH2BCmpTrigADC;
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 死区功能(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_DT_Cfg(stc_tim3_m23_dt_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->DTR_f.DTEN = pstcCfg->bEnDeadTime;
- M0P_TIM3_MODE23->DTR_f.DTR = pstcCfg->u8DeadTimeValue;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 重复周期设置(模式23)
- **
- **
- ** \param [in] u8ValidPeriod 重复周期值
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_SetValidPeriod(uint8_t u8ValidPeriod)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->RCR_f.RCR = u8ValidPeriod;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 OCREF清除功能(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_OCRefClr(stc_tim3_m23_OCREF_Clr_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->M23CR_f.OCCS = pstcCfg->enOCRefClrSrcSel;
- M0P_TIM3_MODE23->M23CR_f.OCCE = pstcCfg->bVCClrEn;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 使能DMA传输(模式23)
- **
- **
- ** \param [in] pstcCfg 初始化配置结构体指针
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_EnDMA(stc_tim3_m23_trig_dma_cfg_t* pstcCfg)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->M23CR_f.UDE = pstcCfg->bUevTrigDMA;
- M0P_TIM3_MODE23->M23CR_f.TDE = pstcCfg->bTITrigDMA;
- M0P_TIM3_MODE23->CRCH0_f.CDEA = pstcCfg->bCmpA0TrigDMA;
- M0P_TIM3_MODE23->CRCH0_f.CDEB = pstcCfg->bCmpB0TrigDMA;
- M0P_TIM3_MODE23->CRCH1_f.CDEA = pstcCfg->bCmpA1TrigDMA;
- M0P_TIM3_MODE23->CRCH1_f.CDEB = pstcCfg->bCmpB1TrigDMA;
- M0P_TIM3_MODE23->CRCH2_f.CDEA = pstcCfg->bCmpA2TrigDMA;
- M0P_TIM3_MODE23->CRCH2_f.CDEB = pstcCfg->bCmpB2TrigDMA;
- M0P_TIM3_MODE23->MSCR_f.CCDS = pstcCfg->enCmpUevTrigDMA;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 捕获比较A软件触发(模式23)
- **
- **
- ** \param [in] enTim3Chx Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_EnSwTrigCapCmpA(en_tim3_channel_t enTim3Chx)
- {
- en_result_t enResult = Ok;
- if(Tim3CH0 == enTim3Chx)
- {
- M0P_TIM3_MODE23->CRCH0_f.CCGA = TRUE;
- }
- else if(Tim3CH1 == enTim3Chx)
- {
- M0P_TIM3_MODE23->CRCH1_f.CCGA = TRUE;
- }
- else if(Tim3CH2 == enTim3Chx)
- {
- M0P_TIM3_MODE23->CRCH2_f.CCGA = TRUE;
- }
- else
- {
- enResult = Error;
- }
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 捕获比较B软件触发(模式23)
- **
- **
- ** \param [in] enTim3Chx Timer3通道(Tim3CH0, Tim3CH1, Tim3CH2)
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_EnSwTrigCapCmpB(en_tim3_channel_t enTim3Chx)
- {
- en_result_t enResult = Ok;
- if(Tim3CH0 == enTim3Chx)
- {
- M0P_TIM3_MODE23->CRCH0_f.CCGB = TRUE;
- }
- else if(Tim3CH1 == enTim3Chx)
- {
- M0P_TIM3_MODE23->CRCH1_f.CCGB = TRUE;
- }
- else if(Tim3CH2 == enTim3Chx)
- {
- M0P_TIM3_MODE23->CRCH2_f.CCGB = TRUE;
- }
- else
- {
- enResult = Error;
- }
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 软件更新使能(模式23)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_EnSwUev(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->M23CR_f.UG = TRUE;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 软件触发使能(模式23)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_EnSwTrig(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->M23CR_f.TG = TRUE;
-
- return enResult;
- }
- /**
- *****************************************************************************
- ** \brief Timer3 软件刹车使能(模式23)
- **
- **
- ** \param [in] none
- **
- ** \retval Ok or Error
- *****************************************************************************/
- en_result_t Tim3_M23_EnSwBk(void)
- {
- en_result_t enResult = Ok;
-
- M0P_TIM3_MODE23->M23CR_f.BG = TRUE;
-
- return enResult;
- }
- //@} // Tim3Group
- /*******************************************************************************
- * EOF (not truncated)
- ******************************************************************************/
|