| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952 |
- /******************************************************************************
- * Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved.
- *
- * This software is owned and published by:
- * Huada Semiconductor Co.,Ltd ("HDSC").
- *
- * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
- * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
- *
- * This software contains source code for use with HDSC
- * components. This software is licensed by HDSC to be adapted only
- * for use in systems utilizing HDSC components. HDSC shall not be
- * responsible for misuse or illegal use of this software for devices not
- * supported herein. HDSC is providing this software "AS IS" and will
- * not be responsible for issues arising from incorrect user implementation
- * of the software.
- *
- * Disclaimer:
- * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
- * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
- * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
- * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
- * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
- * WARRANTY OF NONINFRINGEMENT.
- * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
- * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
- * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
- * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
- * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
- * SAVINGS OR PROFITS,
- * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
- * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
- * FROM, THE SOFTWARE.
- *
- * This software may be replicated in part or whole for the licensed use,
- * with the restriction that this Disclaimer and Copyright notice must be
- * included with each copy of this software, whether used in part or whole,
- * at all times.
- */
- /******************************************************************************/
- /** \file adt.c
- **
- ** Low Voltage Detect driver API.
- ** @link Lvd Group Some description @endlink
- **
- ** - 2018-04-18 Husj First Version
- **
- ******************************************************************************/
- /******************************************************************************
- * Include files
- ******************************************************************************/
- #include "adt.h"
- /**
- ******************************************************************************
- ** \addtogroup AdtGroup
- ******************************************************************************/
- //@{
- /******************************************************************************
- * Local pre-processor symbols/macros ('#define')
- ******************************************************************************/
- /******************************************************************************
- * Global variable definitions (declared in header file with 'extern') *
- ******************************************************************************/
- /******************************************************************************
- * Local type definitions ('typedef')
- ******************************************************************************/
- /******************************************************************************
- * Local function prototypes ('static')
- ******************************************************************************/
- /******************************************************************************
- * Local variable definitions ('static')
- ******************************************************************************/
- static func_ptr_t pfnAdtIrqCbk[3][16] = {NULL};
- /*****************************************************************************
- * Function implementation - global ('extern') and local ('static')
- *****************************************************************************/
- /*************************************************
- * \brief
- * 使能NVIC中ADT中断
- *
- * \param [in] enIrqn 中断号
- *
- * \retval 无
- **************************************************/
- static void AdtEnableNvic(IRQn_Type enIrqn)
- {
- NVIC_ClearPendingIRQ(enIrqn);
- NVIC_EnableIRQ(enIrqn);
- NVIC_SetPriority(enIrqn, DDL_IRQ_LEVEL_DEFAULT);
- }
- /**************************************************
- * \brief
- * 除能NVIC中ADT中断
- *
- * \param [in] enIrqn 中断号
- *
- * \retval 无
- **************************************************/
- static void AdtDisableNvic(IRQn_Type enIrqn)
- {
- NVIC_ClearPendingIRQ(enIrqn);
- NVIC_DisableIRQ(enIrqn);
- NVIC_SetPriority(enIrqn, DDL_IRQ_LEVEL_DEFAULT);
- }
- /***************************************************
- * \brief
- * ADT中断服务程序
- *
- * \param [in] u8Param 未使用
- *
- * \retval 无
- ****************************************************/
- void Adt_IRQHandler(uint8_t u8Param)
- {
- uint8_t u8Adt = u8Param - 4;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*u8Adt);
- if (TRUE == pstcM0PAdt->IFR_f.CMAF)
- {
- if (NULL != pfnAdtIrqCbk[u8Adt][AdtCMAIrq])
- {
- pfnAdtIrqCbk[u8Adt][AdtCMAIrq]();
- }
- pstcM0PAdt->ICLR = ~(1<<AdtCMAIrq);
- }
- if (TRUE == pstcM0PAdt->IFR_f.CMBF)
- {
- if (NULL != pfnAdtIrqCbk[u8Adt][AdtCMBIrq])
- {
- pfnAdtIrqCbk[u8Adt][AdtCMBIrq]();
- }
- pstcM0PAdt->ICLR = ~(1<<AdtCMBIrq);
- }
- if (TRUE == pstcM0PAdt->IFR_f.CMCF)
- {
- if (NULL != pfnAdtIrqCbk[u8Adt][AdtCMCIrq])
- {
- pfnAdtIrqCbk[u8Adt][AdtCMCIrq]();
- }
- pstcM0PAdt->ICLR = ~(1<<AdtCMCIrq);
- }
- if (TRUE == pstcM0PAdt->IFR_f.CMDF)
- {
- if (NULL != pfnAdtIrqCbk[u8Adt][AdtCMDIrq])
- {
- pfnAdtIrqCbk[u8Adt][AdtCMDIrq]();
- }
- pstcM0PAdt->ICLR = ~(1<<AdtCMDIrq);
- }
- if (TRUE == pstcM0PAdt->IFR_f.OVFF)
- {
- if (NULL != pfnAdtIrqCbk[u8Adt][AdtOVFIrq])
- {
- pfnAdtIrqCbk[u8Adt][AdtOVFIrq]();
- }
- pstcM0PAdt->ICLR = ~(1<<AdtOVFIrq);
- }
- if (TRUE == pstcM0PAdt->IFR_f.UDFF)
- {
- if (NULL != pfnAdtIrqCbk[u8Adt][AdtUDFIrq])
- {
- pfnAdtIrqCbk[u8Adt][AdtUDFIrq]();
- }
- pstcM0PAdt->ICLR = ~(1<<AdtUDFIrq);
- }
- if (TRUE == pstcM0PAdt->IFR_f.DTEF)
- {
- if (NULL != pfnAdtIrqCbk[u8Adt][AdtDTEIrq])
- {
- pfnAdtIrqCbk[u8Adt][AdtDTEIrq]();
- }
- pstcM0PAdt->ICLR = ~(1<<AdtDTEIrq);
- }
-
- if (TRUE == pstcM0PAdt->IFR_f.SAMLF)
- {
- if (NULL != pfnAdtIrqCbk[u8Adt][AdtSAMLIrq])
- {
- pfnAdtIrqCbk[u8Adt][AdtSAMLIrq]();
- }
- pstcM0PAdt->ICLR = ~(1<<AdtSAMLIrq);
- }
-
- if (TRUE == pstcM0PAdt->IFR_f.SAMHF)
- {
- if (NULL != pfnAdtIrqCbk[u8Adt][AdtSAMHIrq])
- {
- pfnAdtIrqCbk[u8Adt][AdtSAMHIrq]();
- }
- pstcM0PAdt->ICLR = ~(1<<AdtSAMHIrq);
- }
- }
- /*****************************************************************
- * \brief
- * 配置中断
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtIrq 中断类型
- * \param [in] bEn 中断使能/禁止
- * \param [in] pfnIrqCalbak 回调函数指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ****************************************************************/
- en_result_t Adt_ConfigIrq(en_adt_unit_t enAdtUnit,
- en_adt_irq_type_t enAdtIrq,
- boolean_t bEn,
- func_ptr_t pfnIrqCalbak)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pfnAdtIrqCbk[enAdtUnit][enAdtIrq] = pfnIrqCalbak;
- u32Val = pstcM0PAdt->ICONR;
- if (bEn)
- {
- u32Val |= 1u<<enAdtIrq;
- }
- else
- {
- u32Val &= ~(1u<<enAdtIrq);
- }
- pstcM0PAdt->ICONR = u32Val;
- return Ok;
- }
- /*******************************************************************
- * \brief
- * 获取中断标志
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtIrq 中断类型
- * \param [in] pbFlag 中断标志指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *****************************************************************/
- en_result_t Adt_GetIrqFlag(en_adt_unit_t enAdtUnit,
- en_adt_irq_type_t enAdtIrq,
- boolean_t* pbFlag)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->IFR;
- *pbFlag = (u32Val>>enAdtIrq) & 0x1;
- return Ok;
- }
- /****************************************************************
- * \brief
- * 清除中断标志
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtIrq 中断类型
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ****************************************************************/
- en_result_t Adt_ClearIrqFlag(en_adt_unit_t enAdtUnit,
- en_adt_irq_type_t enAdtIrq)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->ICLR = ~(1u<<enAdtIrq);
- return Ok;
- }
- /**************************************************************
- * \brief
- * 配置硬件递加事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtHwCntUp 硬件递加事件
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ****************************************************************/
- en_result_t Adt_ConfigHwCntUp(en_adt_unit_t enAdtUnit, en_adt_hw_cnt_t enAdtHwCntUp)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (AdtHwCntMax <= enAdtHwCntUp))
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HCUPR;
- pstcM0PAdt->HCUPR = u32Val | (1u<<enAdtHwCntUp);
- return Ok;
- }
- /**************************************************************
- * \brief
- * 清除硬件递加事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ************************************************************/
- en_result_t Adt_ClearHwCntUp(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->HCUPR = 0;
- return Ok;
- }
- /**
- * \brief
- * 配置硬件递减事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtHwCntDwn 硬件递减事件
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- */
- en_result_t Adt_ConfigHwCntDwn(en_adt_unit_t enAdtUnit, en_adt_hw_cnt_t enAdtHwCntDwn)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (AdtHwCntMax <= enAdtHwCntDwn))
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HCDOR;
- pstcM0PAdt->HCDOR = u32Val | (1u<<enAdtHwCntDwn);
- return Ok;
- }
- /******************************************************************
- * \brief
- * 清除硬件递减事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *****************************************************************/
- en_result_t Adt_ClearHwCntDwn(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->HCDOR = 0;
- return Ok;
- }
- /******************************************************************
- * \brief
- * 配置硬件启动事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtHwStart 硬件启动事件
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *******************************************************************/
- en_result_t Adt_ConfigHwStart(en_adt_unit_t enAdtUnit, en_adt_hw_trig_t enAdtHwStart)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (AdtHwTrigEnd <= enAdtHwStart))
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HSTAR;
- pstcM0PAdt->HSTAR = u32Val | (1u<<enAdtHwStart);
- return Ok;
- }
- /************************************************************************
- * \brief
- * 清除硬件启动事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_ClearHwStart(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->HSTAR = 0;
- return Ok;
- }
- /*********************************************************************
- * \brief
- * 使能硬件启动
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *********************************************************************/
- en_result_t Adt_EnableHwStart(en_adt_unit_t enAdtUnit)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HSTAR;
- pstcM0PAdt->HSTAR = u32Val | (1u<<31);
- return Ok;
- }
- /*************************************************************************
- * \brief
- * 除能硬件启动
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ************************************************************************/
- en_result_t Adt_DisableHwStart(en_adt_unit_t enAdtUnit)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HSTAR;
- pstcM0PAdt->HSTAR = u32Val & 0x7FFFFFFF;
- return Ok;
- }
- /****************************************************************
- * \brief
- * 配置硬件停止事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtHwStop 硬件停止事件
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***************************************************************/
- en_result_t Adt_ConfigHwStop(en_adt_unit_t enAdtUnit, en_adt_hw_trig_t enAdtHwStop)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (AdtHwTrigEnd <= enAdtHwStop))
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HSTPR;
- pstcM0PAdt->HSTPR = u32Val | (1u<<enAdtHwStop);
- return Ok;
- }
- /***************************************************************
- * \brief
- * 清除硬件停止事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***************************************************************/
- en_result_t Adt_ClearHwStop(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->HSTPR = 0;
- return Ok;
- }
- /*************************************************************
- * \brief
- * 使能硬件停止
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- **********************************************************/
- en_result_t Adt_EnableHwStop(en_adt_unit_t enAdtUnit)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HSTPR;
- pstcM0PAdt->HSTPR = u32Val | (1u<<31);
- return Ok;
- }
- /*****************************************************************************
- * \brief
- * 除能硬件停止
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***************************************************************************/
- en_result_t Adt_DisableHwStop(en_adt_unit_t enAdtUnit)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HSTPR;
- pstcM0PAdt->HSTPR = u32Val & 0x7FFFFFFF;
- return Ok;
- }
- /**************************************************************************
- * \brief
- * 配置硬件清零事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtHwClear 硬件清零事件
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *************************************************************************/
- en_result_t Adt_ConfigHwClear(en_adt_unit_t enAdtUnit, en_adt_hw_trig_t enAdtHwClear)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (AdtHwTrigEnd <= enAdtHwClear))
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HCELR & (1u<<31);
- pstcM0PAdt->HCELR = u32Val | (1u<<enAdtHwClear);
- return Ok;
- }
- /**************************************************************************
- * \brief
- * 清除硬件清零事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- **************************************************************************/
- en_result_t Adt_ClearHwClear(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->HCELR = 0;
- return Ok;
- }
- /***************************************************************************
- * \brief
- * 使能硬件清零
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *************************************************************************/
- en_result_t Adt_EnableHwClear(en_adt_unit_t enAdtUnit)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HCELR;
- pstcM0PAdt->HCELR = u32Val | (1u<<31);
- return Ok;
- }
- /************************************************************************
- * \brief
- * 除能硬件清零
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- **********************************************************************/
- en_result_t Adt_DisableHwClear(en_adt_unit_t enAdtUnit)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HCELR;
- pstcM0PAdt->HCELR = u32Val & 0x7FFFFFFF;
- return Ok;
- }
- /*******************************************************************
- * \brief
- * 配置硬件捕获A事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtHwCaptureA 硬件捕获A事件选择
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *******************************************************************/
- en_result_t Adt_ConfigHwCaptureA(en_adt_unit_t enAdtUnit, en_adt_hw_trig_t enAdtHwCaptureA)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (AdtHwTrigEnd <= enAdtHwCaptureA))
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HCPAR;
- pstcM0PAdt->HCPAR = u32Val | (1u<<enAdtHwCaptureA);
- pstcM0PAdt->PCONR_f.CAPCA = 1;
- return Ok;
- }
- /************************************************************************
- * \brief
- * 清除硬件捕获A事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_ClearHwCaptureA(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->HCPAR = 0;
- return Ok;
- }
- /*********************************************************************
- * \brief
- * 配置硬件捕获B事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtHwCaptureB 硬件捕获B事件选择
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ********************************************************************/
- en_result_t Adt_ConfigHwCaptureB(en_adt_unit_t enAdtUnit, en_adt_hw_trig_t enAdtHwCaptureB)
- {
- uint32_t u32Val;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (AdtHwTrigEnd <= enAdtHwCaptureB))
- {
- return ErrorInvalidParameter;
- }
- u32Val = pstcM0PAdt->HCPBR;
- pstcM0PAdt->HCPBR = u32Val | (1u<<enAdtHwCaptureB);
- pstcM0PAdt->PCONR_f.CAPCB = 1;
- return Ok;
- }
- /********************************************************************
- * \brief
- * 清除硬件捕获B事件
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *******************************************************************/
- en_result_t Adt_ClearHwCaptureB(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->HCPBR = 0;
- return Ok;
- }
- /*****************************************************************
- * \brief
- * 软件同步开始
- *
- * \param [in] pstcAdtSwSyncStart 软件同步开始指针
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***************************************************************/
- en_result_t Adt_SwSyncStart(stc_adt_sw_sync_t* pstcAdtSwSyncStart)
- {
- uint32_t u32Val = 0;
- if (NULL == pstcAdtSwSyncStart)
- {
- return ErrorInvalidParameter;
- }
- if (pstcAdtSwSyncStart->bAdTim4)
- {
- u32Val |= 0x1;
- }
- if (pstcAdtSwSyncStart->bAdTim5)
- {
- u32Val |= 0x2;
- }
- if (pstcAdtSwSyncStart->bAdTim6)
- {
- u32Val |= 0x4;
- }
- M0P_TIM4->SSTAR = u32Val;
- return Ok;
- }
- /***************************************************************
- * \brief
- * 软件同步停止
- *
- * \param [in] pstcAdtSwSyncStop 软件同步停止指针
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***************************************************************/
- en_result_t Adt_SwSyncStop(stc_adt_sw_sync_t* pstcAdtSwSyncStop)
- {
- uint32_t u32Val = 0;
- if (NULL == pstcAdtSwSyncStop)
- {
- return ErrorInvalidParameter;
- }
- if (pstcAdtSwSyncStop->bAdTim4)
- {
- u32Val |= 0x1;
- }
- if (pstcAdtSwSyncStop->bAdTim5)
- {
- u32Val |= 0x2;
- }
- if (pstcAdtSwSyncStop->bAdTim6)
- {
- u32Val |= 0x4;
- }
- M0P_TIM4->SSTPR = u32Val;
- return Ok;
- }
- /*****************************************************************
- * \brief
- * 软件同步清零
- *
- * \param [in] pstcAdtSwSyncClear 软件同步清零指针
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *******************************************************************/
- en_result_t Adt_SwSyncClear(stc_adt_sw_sync_t* pstcAdtSwSyncClear)
- {
- uint32_t u32Val = 0;
- if (NULL == pstcAdtSwSyncClear)
- {
- return ErrorInvalidParameter;
- }
- if (pstcAdtSwSyncClear->bAdTim4)
- {
- u32Val |= 0x1;
- }
- if (pstcAdtSwSyncClear->bAdTim5)
- {
- u32Val |= 0x2;
- }
- if (pstcAdtSwSyncClear->bAdTim6)
- {
- u32Val |= 0x4;
- }
- M0P_TIM4->SCLRR = u32Val;
- return Ok;
- }
- /*******************************************************************
- * \brief
- * 获取软件同步运行状态
- *
- * \param [in] pstcAdtSwSyncState ADV Timer软件同步运行状态指针
- *
- * \retval en_result_t Ok: 设置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *******************************************************************/
- en_result_t Adt_GetSwSyncState(stc_adt_sw_sync_t* pstcAdtSwSyncState)
- {
- if (NULL == pstcAdtSwSyncState)
- {
- return ErrorInvalidParameter;
- }
- if (M0P_TIM4->SSTAR & 0x1)
- {
- pstcAdtSwSyncState->bAdTim4 = TRUE;
- }
- else
- {
- pstcAdtSwSyncState->bAdTim4 = FALSE;
- }
- if (M0P_TIM4->SSTAR & 0x2)
- {
- pstcAdtSwSyncState->bAdTim5 = TRUE;
- }
- else
- {
- pstcAdtSwSyncState->bAdTim5 = FALSE;
- }
- if (M0P_TIM4->SSTAR & 0x4)
- {
- pstcAdtSwSyncState->bAdTim6 = TRUE;
- }
- else
- {
- pstcAdtSwSyncState->bAdTim6 = FALSE;
- }
- return Ok;
- }
- /************************************************************************
- * \brief
- * AOS触发配置
- *
- * \param [in] pstcAdtAosTrigCfg 触发配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ************************************************************************/
- en_result_t Adt_AosTrigConfig(stc_adt_aos_trig_cfg_t* pstcAdtAosTrigCfg)
- {
- if (NULL == pstcAdtAosTrigCfg)
- {
- return ErrorInvalidParameter;
- }
- M0P_TIM4->ITRIG_f.IAOS0S = pstcAdtAosTrigCfg->enAos0TrigSrc;
- M0P_TIM4->ITRIG_f.IAOS1S = pstcAdtAosTrigCfg->enAos1TrigSrc;
- M0P_TIM4->ITRIG_f.IAOS2S = pstcAdtAosTrigCfg->enAos2TrigSrc;
- M0P_TIM4->ITRIG_f.IAOS3S = pstcAdtAosTrigCfg->enAos3TrigSrc;
- return Ok;
- }
- /**********************************************************************
- * \brief
- * 中断触发配置
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] pstcAdtIrqTrigCfg 触发配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_IrqTrigConfig(en_adt_unit_t enAdtUnit,
- stc_adt_irq_trig_cfg_t* pstcAdtIrqTrigCfg)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (NULL == pstcAdtIrqTrigCfg))
- {
- return ErrorInvalidParameter;
- }
-
- pstcM0PAdt->CR_f.CMAE = pstcAdtIrqTrigCfg->bAdtCntMatchATrigEn;
- pstcM0PAdt->CR_f.CMBE = pstcAdtIrqTrigCfg->bAdtCntMatchBTrigEn;
- pstcM0PAdt->CR_f.CMCE = pstcAdtIrqTrigCfg->bAdtCntMatchCTrigEn;
- pstcM0PAdt->CR_f.CMDE = pstcAdtIrqTrigCfg->bAdtCntMatchDTrigEn;
- pstcM0PAdt->CR_f.OVFE = pstcAdtIrqTrigCfg->bAdtOverFlowTrigEn;
- pstcM0PAdt->CR_f.UDFE = pstcAdtIrqTrigCfg->bAdtUnderFlowTrigEn;
- pstcM0PAdt->CR_f.DMA_G_CMA = pstcAdtIrqTrigCfg->bAdtCntMatchATrigDmaEn;
- pstcM0PAdt->CR_f.DMA_G_CMB = pstcAdtIrqTrigCfg->bAdtCntMatchBTrigDmaEn;
- pstcM0PAdt->CR_f.DMA_G_CMC = pstcAdtIrqTrigCfg->bAdtCntMatchCTrigDmaEn;
- pstcM0PAdt->CR_f.DMA_G_CMD = pstcAdtIrqTrigCfg->bAdtCntMatchDTrigDmaEn;
- pstcM0PAdt->CR_f.DMA_G_OVF = pstcAdtIrqTrigCfg->bAdtOverFlowTrigDmaEn;
- pstcM0PAdt->CR_f.DMA_G_UDF = pstcAdtIrqTrigCfg->bAdtUnderFlowTrigDmaEn;
- pstcM0PAdt->CR_f.DMA_S_CMA = pstcAdtIrqTrigCfg->bAdtSpecilMatchATrigDmaEn;
- pstcM0PAdt->CR_f.DMA_S_CMB = pstcAdtIrqTrigCfg->bAdtSpecilMatchBTrigDmaEn;
-
- return Ok;
- }
- /*************************************************************************
- * \brief
- * 端口触发配置
- *
- * \param [in] enAdtTrigPort 触发端口
- * \param [in] pstcAdtPortTrigCfg 触发配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *************************************************************************/
- en_result_t Adt_PortTrigConfig(en_adt_trig_port_t enAdtTrigPort,
- stc_adt_port_trig_cfg_t* pstcAdtPortTrigCfg)
- {
- if (NULL == pstcAdtPortTrigCfg)
- {
- return ErrorInvalidParameter;
- }
- switch (enAdtTrigPort)
- {
- case AdtTrigA:
- M0P_TIM4->TTRIG_f.TRIGAS = pstcAdtPortTrigCfg->enTrigSrc;
- M0P_TIM4->FCONR_f.NOFIENTA = pstcAdtPortTrigCfg->bFltEn;
- M0P_TIM4->FCONR_f.NOFICKTA = pstcAdtPortTrigCfg->enFltClk;
- break;
- case AdtTrigB:
- M0P_TIM4->TTRIG_f.TRIGBS = pstcAdtPortTrigCfg->enTrigSrc;
- M0P_TIM4->FCONR_f.NOFIENTB = pstcAdtPortTrigCfg->bFltEn;
- M0P_TIM4->FCONR_f.NOFICKTB = pstcAdtPortTrigCfg->enFltClk;
- break;
- case AdtTrigC:
- M0P_TIM4->TTRIG_f.TRIGCS = pstcAdtPortTrigCfg->enTrigSrc;
- M0P_TIM4->FCONR_f.NOFIENTC = pstcAdtPortTrigCfg->bFltEn;
- M0P_TIM4->FCONR_f.NOFICKTC = pstcAdtPortTrigCfg->enFltClk;
- break;
- case AdtTrigD:
- M0P_TIM4->TTRIG_f.TRIGDS = pstcAdtPortTrigCfg->enTrigSrc;
- M0P_TIM4->FCONR_f.NOFIENTD = pstcAdtPortTrigCfg->bFltEn;
- M0P_TIM4->FCONR_f.NOFICKTD = pstcAdtPortTrigCfg->enFltClk;
- break;
- default:
- return ErrorInvalidParameter;
- }
- return Ok;
- }
- /***********************************************************************
- * \brief
- * CHxX端口配置
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtCHxXPort CHxX端口
- * \param [in] pstcAdtCHxXCfg CHxX端口配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *********************************************************************/
- en_result_t Adt_CHxXPortConfig(en_adt_unit_t enAdtUnit,
- en_adt_CHxX_port_t enAdtCHxXPort,
- stc_adt_CHxX_port_cfg_t* pstcAdtCHxXCfg)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (NULL == pstcAdtCHxXCfg))
- {
- return ErrorInvalidParameter;
- }
- switch (enAdtCHxXPort)
- {
- case AdtCHxA:
- pstcM0PAdt->PCONR_f.CAPCA = pstcAdtCHxXCfg->enCap;
- pstcM0PAdt->PCONR_f.STACA = pstcAdtCHxXCfg->enStaOut;
- pstcM0PAdt->PCONR_f.STPCA = pstcAdtCHxXCfg->enStpOut;
- pstcM0PAdt->PCONR_f.STASTPSA = pstcAdtCHxXCfg->enStaStp;
- pstcM0PAdt->PCONR_f.CMPCA = pstcAdtCHxXCfg->enCmpc;
- pstcM0PAdt->PCONR_f.PERCA = pstcAdtCHxXCfg->enPerc;
- pstcM0PAdt->PCONR_f.OUTENA = pstcAdtCHxXCfg->bOutEn;
- pstcM0PAdt->PCONR_f.DISSELA = pstcAdtCHxXCfg->enDisSel;
- pstcM0PAdt->PCONR_f.DISVALA = pstcAdtCHxXCfg->enDisVal;
- pstcM0PAdt->FCONR_f.NOFIENGA = pstcAdtCHxXCfg->bFltEn;
- pstcM0PAdt->FCONR_f.NOFICKGA = pstcAdtCHxXCfg->enFltClk;
- break;
- case AdtCHxB:
- pstcM0PAdt->PCONR_f.CAPCB = pstcAdtCHxXCfg->enCap;
- pstcM0PAdt->PCONR_f.STACB = pstcAdtCHxXCfg->enStaOut;
- pstcM0PAdt->PCONR_f.STPCB = pstcAdtCHxXCfg->enStpOut;
- pstcM0PAdt->PCONR_f.STASTPSB = pstcAdtCHxXCfg->enStaStp;
- pstcM0PAdt->PCONR_f.CMPCB = pstcAdtCHxXCfg->enCmpc;
- pstcM0PAdt->PCONR_f.PERCB = pstcAdtCHxXCfg->enPerc;
- pstcM0PAdt->PCONR_f.OUTENB = pstcAdtCHxXCfg->bOutEn;
- pstcM0PAdt->PCONR_f.DISSELB = pstcAdtCHxXCfg->enDisSel;
- pstcM0PAdt->PCONR_f.DISVALB = pstcAdtCHxXCfg->enDisVal;
- pstcM0PAdt->FCONR_f.NOFIENGB = pstcAdtCHxXCfg->bFltEn;
- pstcM0PAdt->FCONR_f.NOFICKGB = pstcAdtCHxXCfg->enFltClk;
- break;
- default:
- return ErrorInvalidParameter;
- }
- return Ok;
- }
- /************************************************************************
- * \brief
- * 使能端口刹车
- *
- * \param [in] port 端口
- * \param [in] pstcAdtBrkPtCfg 端口刹车配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ************************************************************************/
- en_result_t Adt_EnableBrakePort(uint8_t port, stc_adt_break_port_cfg_t* pstcAdtBrkPtCfg)
- {
- uint32_t u32Val;
- if (NULL == pstcAdtBrkPtCfg)
- {
- return ErrorInvalidParameter;
- }
-
- u32Val = M0P_TIM4->PTBKP;
- u32Val &= ~(1u<<port);
- M0P_TIM4->PTBKP = u32Val | (pstcAdtBrkPtCfg->enPol<<port);
-
- u32Val = M0P_TIM4->PTBKS;
- M0P_TIM4->PTBKS = u32Val | (1u<<port);
- return Ok;
- }
- /**********************************************************************
- * \brief
- * 清除端口刹车
- *
- * \param none
- *
- * \retval none
- **********************************************************************/
- void Adt_ClearBrakePort(void)
- {
- M0P_TIM4->PTBKS = 0;
- }
- /*********************************************************************
- * \brief
- * 无效条件3配置
- *
- * \param [in] pstcAdtDisable3 无效条件3配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ********************************************************************/
- en_result_t Adt_Disable3Cfg(stc_adt_disable_3_cfg_t* pstcAdtDisable3)
- {
- uint8_t i;
- if (NULL == pstcAdtDisable3)
- {
- return ErrorInvalidParameter;
- }
- Adt_ClearBrakePort();
- for (i = 0; i <= 15; i++)
- {
- if (TRUE == pstcAdtDisable3->stcBrkPtCfg[i].bPortEn)
- {
- Adt_EnableBrakePort(i, &pstcAdtDisable3->stcBrkPtCfg[i]);
- }
- }
- M0P_TIM4->AOSSR_f.BFILTEN = pstcAdtDisable3->bFltEn;
- M0P_TIM4->AOSSR_f.BFILTS = pstcAdtDisable3->enFltClk;
- M0P_TIM4->AOSSR_f.SOFTBK = pstcAdtDisable3->bSwBrk;
- return Ok;
- }
- /*******************************************************************
- * \brief
- * 获取端口刹车标志
- *
- * \param none
- *
- * \retval TRUE or FALSE
- ******************************************************************/
- boolean_t Adt_GetPortBrakeFlag(void)
- {
- return M0P_TIM4->AOSSR_f.FBRAKE;
- }
- /******************************************************************
- * \brief
- * 清除端口刹车标志
- *
- * \param none
- *
- * \retval none
- ******************************************************************/
- void Adt_ClearPortBrakeFlag(void)
- {
- M0P_TIM4->AOSCL_f.FBRAKE = 0;
- }
- /********************************************************************
- * \brief
- * 无效条件1配置
- *
- * \param [in] pstcAdtDisable1 无效条件1配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ********************************************************************/
- en_result_t Adt_Disable1Cfg(stc_adt_disable_1_cfg_t* pstcAdtDisable1)
- {
- if (NULL == pstcAdtDisable1)
- {
- return ErrorInvalidParameter;
- }
- M0P_TIM4->AOSSR_f.SMH2 = pstcAdtDisable1->bTim6OutSH;
- M0P_TIM4->AOSSR_f.SMH1 = pstcAdtDisable1->bTim5OutSH;
- M0P_TIM4->AOSSR_f.SMH0 = pstcAdtDisable1->bTim4OutSH;
- M0P_TIM4->AOSSR_f.SML2 = pstcAdtDisable1->bTim6OutSL;
- M0P_TIM4->AOSSR_f.SML1 = pstcAdtDisable1->bTim5OutSL;
- M0P_TIM4->AOSSR_f.SML0 = pstcAdtDisable1->bTim4OutSL;
- return Ok;
- }
- /********************************************************************
- * \brief
- * 获取同高同低刹车标志
- *
- * \param none
- *
- * \retval TRUE or FALSE
- ********************************************************************/
- boolean_t Adt_GetSameBrakeFlag(void)
- {
- return M0P_TIM4->AOSSR_f.FSAME;
- }
- /*********************************************************************
- * \brief
- * 清除同高同低刹车标志
- *
- * \param none
- *
- * \retval none
- *********************************************************************/
- void Adt_ClearSameBrakeFlag(void)
- {
- M0P_TIM4->AOSCL_f.FSAME = 0;
- }
- /********************************************************************
- * \brief
- * PWM展频配置
- *
- * \param [in] pstcAdtPwmDitherCfg PWM展频配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *********************************************************************/
- en_result_t Adt_PwmDitherConfig(en_adt_unit_t enAdtUnit, stc_adt_pwm_dither_cfg_t* pstcAdtPwmDitherCfg)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
-
- if (NULL == pstcAdtPwmDitherCfg)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->CR_f.DITENS = pstcAdtPwmDitherCfg->enAdtPDType;
- pstcM0PAdt->CR_f.DITENB = pstcAdtPwmDitherCfg->bTimxBPDEn;
- pstcM0PAdt->CR_f.DITENA = pstcAdtPwmDitherCfg->bTimxAPDEn;
-
- return Ok;
- }
- /**********************************************************************
- * \brief
- * ADT初始化
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] pstcAdtBaseCntCfg 计数配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- **********************************************************************/
- en_result_t Adt_Init(en_adt_unit_t enAdtUnit, stc_adt_basecnt_cfg_t* pstcAdtBaseCntCfg)
- {
- int32_t i;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (NULL == pstcAdtBaseCntCfg))
- {
- return ErrorInvalidParameter;
- }
- if (AdtTriangleModeB < pstcAdtBaseCntCfg->enCntMode)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->GCONR_f.MODE = pstcAdtBaseCntCfg->enCntMode;
- pstcM0PAdt->GCONR_f.DIR = pstcAdtBaseCntCfg->enCntDir;
- pstcM0PAdt->GCONR_f.CKDIV = pstcAdtBaseCntCfg->enCntClkDiv;
- for (i = 0; i < 16; i++)
- {
- pfnAdtIrqCbk[enAdtUnit][i] = NULL;
- }
- AdtEnableNvic((IRQn_Type)((int32_t)TIM4_IRQn + (int32_t)enAdtUnit));
- return Ok;
- }
- /************************************************************************
- * \brief
- * ADT Deinit
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_DeInit(en_adt_unit_t enAdtUnit)
- {
- int32_t i;
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->GCONR_f.START = 0;
- AdtDisableNvic((IRQn_Type)((int32_t)TIM4_IRQn + (int32_t)enAdtUnit));
- for (i = 0; i < 16; i++)
- {
- pfnAdtIrqCbk[enAdtUnit][i] = NULL;
- }
- return Ok;
- }
- /***********************************************************************
- * \brief
- * 开始计数
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_StartCount(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->GCONR_f.START = 1;
- return Ok;
- }
- /***********************************************************************
- * \brief
- * 停止计数
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- **********************************************************************/
- en_result_t Adt_StopCount(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->GCONR_f.START = 0;
- return Ok;
- }
- /********************************************************************
- * \brief
- * 设置计数值
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] u16Value 计数值
- *
- * \retval en_result_t Ok: 配置成功
- * ErrorInvalidParameter: 无效参数
- *******************************************************************/
- en_result_t Adt_SetCount(en_adt_unit_t enAdtUnit, uint16_t u16Value)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->CNTER_f.CNT = u16Value;
- return Ok;
- }
- /********************************************************************
- * \brief
- * 获取计数值
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] u16Value 计数值
- *
- * \retval en_result_t Ok: 配置成功
- * ErrorInvalidParameter: 无效参数
- *******************************************************************/
- uint16_t Adt_GetCount(en_adt_unit_t enAdtUnit)
- {
- uint16_t u16Value;
-
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- u16Value = pstcM0PAdt->CNTER_f.CNT;
-
- return u16Value;
- }
- /**************************************************************************
- * \brief
- * 清除计数值
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] u16Value 计数值
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- **************************************************************************/
- en_result_t Adt_ClearCount(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->CNTER_f.CNT = 0;
- return Ok;
- }
- /*************************************************************************
- * \brief
- * 获取计数状态
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] pstcAdtCntState 计数状态指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *************************************************************************/
- en_result_t Adt_GetCntState(en_adt_unit_t enAdtUnit, stc_adt_cntstate_cfg_t* pstcAdtCntState)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (NULL == pstcAdtCntState))
- {
- return ErrorInvalidParameter;
- }
- pstcAdtCntState->u16Counter = pstcM0PAdt->CNTER_f.CNT;
- pstcAdtCntState->enCntDir = pstcM0PAdt->STFLR_f.DIRF;
- pstcAdtCntState->u8ValidPeriod = pstcM0PAdt->STFLR_f.VPERNUM;
- pstcAdtCntState->bCMSBDF = pstcM0PAdt->STFLR_f.CMSBDF;
- pstcAdtCntState->bCMSBUF = pstcM0PAdt->STFLR_f.CMSBUF;
- pstcAdtCntState->bCMSADF = pstcM0PAdt->STFLR_f.CMSADF;
- pstcAdtCntState->bCMSAUF = pstcM0PAdt->STFLR_f.CMSAUF;
- pstcAdtCntState->bDTEF = pstcM0PAdt->STFLR_f.DTEF;
- pstcAdtCntState->bUDFF = pstcM0PAdt->STFLR_f.UDFF;
- pstcAdtCntState->bOVFF = pstcM0PAdt->STFLR_f.OVFF;
- pstcAdtCntState->bCMDF = pstcM0PAdt->STFLR_f.CMDF;
- pstcAdtCntState->bCMCF = pstcM0PAdt->STFLR_f.CMCF;
- pstcAdtCntState->bCMBF = pstcM0PAdt->STFLR_f.CMBF;
- pstcAdtCntState->bCMAF = pstcM0PAdt->STFLR_f.CMAF;
- return Ok;
- }
- /***********************************************************************
- * \brief
- * 配置计数周期
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] u16Period 计数周期值
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_SetPeriod(en_adt_unit_t enAdtUnit, uint16_t u16Period)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->PERAR = u16Period;
- return Ok;
- }
- /***********************************************************************
- * \brief
- * 配置计数周期缓冲
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] u16PeriodBuf 计数周期缓冲值
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_SetPeriodBuf(en_adt_unit_t enAdtUnit, uint16_t u16PeriodBuf)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->PERBR = u16PeriodBuf;
- pstcM0PAdt->BCONR_f.BENP = 1u;
- return Ok;
- }
- /**********************************************************************
- * \brief
- * 清除计数周期缓冲
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- **********************************************************************/
- en_result_t Adt_ClearPeriodBuf(en_adt_unit_t enAdtUnit)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->BCONR_f.BENP = 0;
- pstcM0PAdt->PERBR = 0;
- return Ok;
- }
- /***********************************************************************
- * \brief
- * 配置有效计数周期
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] pstcAdtValidPerCfg 有效计数周期配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_SetValidPeriod(en_adt_unit_t enAdtUnit,
- stc_adt_validper_cfg_t* pstcAdtValidPerCfg)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (NULL == pstcAdtValidPerCfg))
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->VPERR_f.PCNTS = pstcAdtValidPerCfg->enValidCnt;
- pstcM0PAdt->VPERR_f.PCNTE = pstcAdtValidPerCfg->enValidCdt;
- pstcM0PAdt->VPERR_f.GEPERID = pstcAdtValidPerCfg->bPeriodD;
- pstcM0PAdt->VPERR_f.GEPERIC = pstcAdtValidPerCfg->bPeriodC;
- pstcM0PAdt->VPERR_f.GEPERIB = pstcAdtValidPerCfg->bPeriodB;
- pstcM0PAdt->VPERR_f.GEPERIA = pstcAdtValidPerCfg->bPeriodA;
- return Ok;
- }
- /************************************************************************
- * \brief
- * 配置比较输出计数基准值
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtCompare 比较基准
- * \param [in] u16Compare 比较基准值
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *************************************************************************/
- en_result_t Adt_SetCompareValue(en_adt_unit_t enAdtUnit,
- en_adt_compare_t enAdtCompare,
- uint16_t u16Compare)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- if (AdtCompareA == enAdtCompare)
- {
- pstcM0PAdt->GCMAR = u16Compare;
- }
- else if (AdtCompareB == enAdtCompare)
- {
- pstcM0PAdt->GCMBR = u16Compare;
- }
- else if (AdtCompareC == enAdtCompare)
- {
- pstcM0PAdt->GCMCR = u16Compare;
- }
- else if (AdtCompareD == enAdtCompare)
- {
- pstcM0PAdt->GCMDR = u16Compare;
- }
- else
- {
- return ErrorInvalidParameter;
- }
- return Ok;
- }
- /************************************************************************
- * \brief
- * 配置专用比较计数基准值
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtSpclCmp 专用比较基准值寄存器
- * \param [in] u16SpclCmp 比较基准值
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *************************************************************************/
- en_result_t Adt_SetSpecilCompareValue(en_adt_unit_t enAdtUnit,
- en_adt_special_compare_t enAdtSpclCmp,
- uint16_t u16SpclCmp)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- if (AdtSpclCompA == enAdtSpclCmp)
- {
- pstcM0PAdt->SCMAR_f.SCMA = u16SpclCmp;
- }
- else if (AdtSpclCompB == enAdtSpclCmp)
- {
- pstcM0PAdt->SCMBR_f.SCMB = u16SpclCmp;
- }
- else
- {
- return ErrorInvalidParameter;
- }
- return Ok;
- }
- /**********************************************************************
- * \brief
- * 配置通用比较值/捕获值缓存传送
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtCHxXPort TIMxX端口
- * \param [in] bCompareBufEn 通用比较值缓存传送使能
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- **********************************************************************/
- en_result_t Adt_EnableValueBuf(en_adt_unit_t enAdtUnit,
- en_adt_CHxX_port_t enAdtCHxXPort,
- boolean_t bCompareBufEn)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- if (AdtCHxA == enAdtCHxXPort)
- {
- pstcM0PAdt->BCONR_f.BENA = bCompareBufEn;
- }
- else if (AdtCHxB == enAdtCHxXPort)
- {
- pstcM0PAdt->BCONR_f.BENB = bCompareBufEn;
- }
- else
- {
- return ErrorInvalidParameter;
- }
- return Ok;
- }
- /***********************************************************************
- * \brief
- * 清除比较输出计数值/捕获值缓存
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtCHxXPort TIMxX端口
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- **********************************************************************/
- en_result_t Adt_ClearValueBuf(en_adt_unit_t enAdtUnit,
- en_adt_CHxX_port_t enAdtCHxXPort)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- if (AdtCHxA == enAdtCHxXPort)
- {
- pstcM0PAdt->GCMCR = 0;
- pstcM0PAdt->BCONR_f.BENA = 0;
- }
- else if (AdtCHxB == enAdtCHxXPort)
- {
- pstcM0PAdt->GCMDR = 0;
- pstcM0PAdt->BCONR_f.BENB = 0;
- }
- else
- {
- return ErrorInvalidParameter;
- }
- return Ok;
- }
- /***********************************************************************
- * \brief
- * 获取捕获值
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtCHxXPort TIMxX端口
- * \param [in] pu16Capture 捕获值指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_GetCaptureValue(en_adt_unit_t enAdtUnit,
- en_adt_CHxX_port_t enAdtCHxXPort,
- uint16_t* pu16Capture)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- if (AdtCHxA == enAdtCHxXPort)
- {
- *pu16Capture = pstcM0PAdt->GCMAR_f.GCMA;
- }
- else if (AdtCHxB == enAdtCHxXPort)
- {
- *pu16Capture = pstcM0PAdt->GCMBR_f.GCMB;
- }
- else
- {
- return ErrorInvalidParameter;
- }
- return Ok;
- }
- /**********************************************************************
- * \brief
- * 获取捕获缓存值
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] enAdtCHxXPort TIMxX端口
- * \param [in] pu16CaptureBuf 捕获缓存值指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_GetCaptureBuf(en_adt_unit_t enAdtUnit,
- en_adt_CHxX_port_t enAdtCHxXPort,
- uint16_t* pu16CaptureBuf)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- if (AdtCHxA == enAdtCHxXPort)
- {
- *pu16CaptureBuf = pstcM0PAdt->GCMCR_f.GCMC;
- }
- else if (AdtCHxB == enAdtCHxXPort)
- {
- *pu16CaptureBuf = pstcM0PAdt->GCMDR_f.GCMD;
- }
- else
- {
- return ErrorInvalidParameter;
- }
- return Ok;
- }
- /***********************************************************************
- * \brief
- * 设置死区时间上基准值
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] u16Value 死区时间上基准值
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ************************************************************************/
- en_result_t Adt_SetDTUA(en_adt_unit_t enAdtUnit,
- uint16_t u16Value)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->DTUAR = u16Value;
- return Ok;
- }
- /***********************************************************************
- * \brief
- * 设置死区时间下基准值
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] u16Value 死区时间下基准值
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- ***********************************************************************/
- en_result_t Adt_SetDTDA(en_adt_unit_t enAdtUnit,
- uint16_t u16Value)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->DTDAR = u16Value;
- return Ok;
- }
- /******************************************************************
- * \brief
- * 配置死区时间功能
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] bDTEn 死区功能使能
- * \param [in] bEqual DTDAR的值和DTUAR的值自动相等
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *****************************************************************/
- en_result_t Adt_ConfigDT(en_adt_unit_t enAdtUnit,
- boolean_t bDTEn,
- boolean_t bEqual)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if (AdtTIM6 < enAdtUnit)
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->DCONR_f.DTCEN = bDTEn;
- pstcM0PAdt->DCONR_f.SEPA = bEqual;
- return Ok;
- }
- /*************************************************************************
- * \brief
- * Z相输入屏蔽设置
- *
- * \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
- * \param [in] pstcAdtZMaskCfg Z相输入屏蔽功能配置指针
- *
- * \retval en_result_t Ok: 配置成功
- * \retval en_result_t ErrorInvalidParameter: 无效参数
- *************************************************************************/
- en_result_t Adt_ConfigZMask(en_adt_unit_t enAdtUnit, stc_adt_zmask_cfg_t* pstcAdtZMaskCfg)
- {
- volatile M0P_TIM4_TypeDef *pstcM0PAdt = (M0P_TIM4_TypeDef *)((uint32_t)M0P_TIM4+0x400*enAdtUnit);
- if ((AdtTIM6 < enAdtUnit) || (NULL == pstcAdtZMaskCfg))
- {
- return ErrorInvalidParameter;
- }
- pstcM0PAdt->GCONR_f.ZMSK = pstcAdtZMaskCfg->enZMaskCycle;
- pstcM0PAdt->GCONR_f.ZMSKPOS = pstcAdtZMaskCfg->bFltPosCntMaksEn;
- pstcM0PAdt->GCONR_f.ZMSKREV = pstcAdtZMaskCfg->bFltRevCntMaksEn;
- return Ok;
- }
- //@} // AdtGroup
- /******************************************************************************
- * EOF (not truncated)
- ******************************************************************************/
|