12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520 |
- /***********************************************************************
- * Filename : hal_lpuart.c
- * Description : lpuart driver source file
- * Author(s) : xwl
- * version : V1.0
- * Modify date : 2019-11-19
- ***********************************************************************/
- #include "ACM32Fxx_HAL.h"
- static void TIMER_ETR_SetConfig(TIM_TypeDef* TIMx, uint32_t TIM_ExtTRGPrescaler,
- uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter);
- static void TIMER_TI1FP1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);
- static void TIMER_TI2FP2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);
- static void TIMER_IC1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t filter);
- static void TIMER_IC2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t filter);
- static void TIMER_IC3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t filter);
- static void TIMER_IC4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t filter);
- /*********************************************************************************
- * Function : HAL_TIMER_MSP_Init
- * Description : MSP init, mainly about clock, nvic
- * Input : timer handler
- * Output : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- __weak uint32_t HAL_TIMER_MSP_Init(TIM_HandleTypeDef * htim)
- {
- uint32_t Timer_Instance;
- if (0 == IS_TIMER_INSTANCE(htim->Instance))
- {
- return HAL_ERROR; //instance error
- }
- Timer_Instance = (uint32_t)(htim->Instance);
- switch(Timer_Instance)
- {
- case TIM1_BASE:
- System_Module_Reset(RST_TIM1);
- System_Module_Enable(EN_TIM1);
- NVIC_ClearPendingIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
- NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
- break;
- case TIM3_BASE:
- System_Module_Reset(RST_TIM3);
- System_Module_Enable(EN_TIM3);
- NVIC_ClearPendingIRQ(TIM3_IRQn);
- NVIC_EnableIRQ(TIM3_IRQn);
- break;
- case TIM6_BASE:
- System_Module_Reset(RST_TIM6);
- System_Module_Enable(EN_TIM6);
- NVIC_ClearPendingIRQ(TIM6_IRQn);
- NVIC_EnableIRQ(TIM6_IRQn);
- break;
- case TIM14_BASE:
- System_Module_Reset(RST_TIM14);
- System_Module_Enable(EN_TIM14);
- NVIC_ClearPendingIRQ(TIM14_IRQn);
- NVIC_EnableIRQ(TIM14_IRQn);
- break;
- case TIM15_BASE:
- System_Module_Reset(RST_TIM15);
- System_Module_Enable(EN_TIM15);
- NVIC_ClearPendingIRQ(TIM15_IRQn);
- NVIC_EnableIRQ(TIM15_IRQn);
- break;
- case TIM16_BASE:
- System_Module_Reset(RST_TIM16);
- System_Module_Enable(EN_TIM16);
- NVIC_ClearPendingIRQ(TIM16_IRQn);
- NVIC_EnableIRQ(TIM16_IRQn);
- break;
- case TIM17_BASE:
- System_Module_Reset(RST_TIM17);
- System_Module_Enable(EN_TIM17);
- NVIC_ClearPendingIRQ(TIM17_IRQn);
- NVIC_EnableIRQ(TIM17_IRQn);
- break;
- default:
- return HAL_ERROR;
- }
- return HAL_OK;
- }
- __weak uint32_t HAL_TIMER_Base_MspDeInit(TIM_HandleTypeDef * htim)
- {
- uint32_t Timer_Instance;
- if (0 == IS_TIMER_INSTANCE(htim->Instance))
- {
- return HAL_ERROR; //instance error
- }
- Timer_Instance = (uint32_t)(htim->Instance);
- switch(Timer_Instance)
- {
- case TIM1_BASE:
- System_Module_Disable(EN_TIM1);
- NVIC_ClearPendingIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
- NVIC_DisableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
- break;
- case TIM3_BASE:
- System_Module_Disable(EN_TIM3);
- NVIC_ClearPendingIRQ(TIM3_IRQn);
- NVIC_DisableIRQ(TIM3_IRQn);
- break;
- case TIM6_BASE:
- System_Module_Disable(EN_TIM6);
- NVIC_ClearPendingIRQ(TIM6_IRQn);
- NVIC_DisableIRQ(TIM6_IRQn);
- break;
- case TIM14_BASE:
- System_Module_Disable(EN_TIM14);
- NVIC_ClearPendingIRQ(TIM14_IRQn);
- NVIC_DisableIRQ(TIM14_IRQn);
- break;
- case TIM15_BASE:
- System_Module_Disable(EN_TIM15);
- NVIC_ClearPendingIRQ(TIM15_IRQn);
- NVIC_DisableIRQ(TIM15_IRQn);
- break;
- case TIM16_BASE:
- System_Module_Disable(EN_TIM16);
- NVIC_ClearPendingIRQ(TIM16_IRQn);
- NVIC_DisableIRQ(TIM16_IRQn);
- break;
- case TIM17_BASE:
- System_Module_Disable(EN_TIM17);
- NVIC_ClearPendingIRQ(TIM17_IRQn);
- NVIC_DisableIRQ(TIM17_IRQn);
- break;
- default:
- return HAL_ERROR;
- }
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_Slave_Mode_Config
- * Description : configure timer in slave mode
- * Input :
- htim: timer handler
- sSlaveConfig: slave mode parameter strcture
- SlaveMode: TIM_SLAVE_MODE_DIS, TIM_SLAVE_MODE_ENC1...
- InputTrigger: TIM_TRIGGER_SOURCE_ITR0, TIM_TRIGGER_SOURCE_ITR1...
- TriggerPolarity: TIM_SLAVE_CAPTURE_ACTIVE_RISING, TIM_SLAVE_CAPTURE_ACTIVE_FALLING...
- TriggerPrescaler: TIM_ETR_PRESCALER_1, TIM_ETR_PRESCALER_2...
- * Output : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIMER_Slave_Mode_Config(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig)
- {
- if (0 == IS_TIM_SLAVE_INSTANCE(htim->Instance) )
- {
- return 1; // not supported
- }
- /*reset SMS and TS bits*/
- htim->Instance->SMCR &= (~(BIT0|BIT1|BIT2|BIT4|BIT5|BIT6));
- /*SET SMS bits*/
- htim->Instance->SMCR |= (sSlaveConfig->SlaveMode & (BIT0|BIT1|BIT2) );
- /*SET TS bits*/
- htim->Instance->SMCR |= (sSlaveConfig->InputTrigger & (BIT4|BIT5|BIT6) );
- switch (sSlaveConfig->InputTrigger)
- {
- case TIM_TRIGGER_SOURCE_TI1FP1:
- TIMER_TI1FP1_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);
- break;
- case TIM_TRIGGER_SOURCE_TI2FP2:
- TIMER_TI2FP2_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);
- break;
- case TIM_TRIGGER_SOURCE_ETRF:
- TIMER_ETR_SetConfig(htim->Instance, sSlaveConfig->TriggerPrescaler, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);
- break;
- case TIM_TRIGGER_SOURCE_ITR0:
- case TIM_TRIGGER_SOURCE_ITR1:
- case TIM_TRIGGER_SOURCE_ITR2:
- case TIM_TRIGGER_SOURCE_ITR3:
- // don't need do anything here
- break;
- default:
- return 1;
- }
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_Master_Mode_Config
- * Description : configure timer in master mode
- * Input :
- TIMx: timer instance
- sMasterConfig: master mode parameter structure
- MasterSlaveMode: TIM_TRGO_RESET, TIM_TRGO_ENABLE...
- MasterOutputTrigger: TIM_MASTERSLAVEMODE_DISABLE, TIM_MASTERSLAVEMODE_ENABLE
- * Output : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIMER_Master_Mode_Config(TIM_TypeDef *TIMx, TIM_MasterConfigTypeDef * sMasterConfig)
- {
- /*reset bits*/
- TIMx->SMCR &= (~BIT7);
- TIMx->CR2 &= (~(BIT4|BIT5|BIT6));
- TIMx->SMCR |= sMasterConfig->MasterSlaveMode;
- TIMx->CR2 |= sMasterConfig->MasterOutputTrigger;
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_Output_Config
- * Description : configure output parameter
- * Input :
- TIMx: timer instance
- Output_Config: output configration parameter structure
- OCMode: OUTPUT_MODE_FROZEN, OUTPUT_MODE_MATCH_HIGH...
- Pulse: write to ccrx register
- OCPolarity: OC channel output polarity: OUTPUT_POL_ACTIVE_HIGH, OUTPUT_POL_ACTIVE_LOW
- OCNPolarity: OCN channel output polarity: OUTPUT_POL_ACTIVE_HIGH, OUTPUT_POL_ACTIVE_LOW
- OCFastMode: OUTPUT_FAST_MODE_DISABLE, OUTPUT_FAST_MODE_ENABLE
- OCIdleState: OC channel idle state, OUTPUT_IDLE_STATE_0, OUTPUT_IDLE_STATE_1
- OCNIdleState: OCN channel idle state, OUTPUT_IDLE_STATE_0, OUTPUT_IDLE_STATE_1
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIMER_Output_Config(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef * Output_Config, uint32_t Channel)
- {
- if (0 == IS_TIM_CCX_INSTANCE(TIMx, Channel) )
- {
- return 1; // error parameter
- }
- switch(Channel)
- {
- case TIM_CHANNEL_1:
- TIMx->CCER &= (~BIT0); //disable OC1
- if (OUTPUT_POL_ACTIVE_HIGH == Output_Config->OCPolarity)
- {
- TIMx->CCER &= (~BIT1);
- }
- else
- {
- TIMx->CCER |= (BIT1);
- }
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER &= (~BIT2); //disable OC1N
- if (OUTPUT_POL_ACTIVE_HIGH == Output_Config->OCNPolarity)
- {
- TIMx->CCER &= (~BIT3);
- }
- else
- {
- TIMx->CCER |= (BIT3);
- }
- }
- TIMx->CCMR1 &= (~0x00FFU); // reset low 8 bits
- TIMx->CCR1 = Output_Config->Pulse;
- if (OUTPUT_FAST_MODE_ENABLE == Output_Config->OCFastMode)
- {
- TIMx->CCMR1 |= (BIT2);
- }
- TIMx->CCMR1 |= (BIT3); // preload enable
- if (IS_TIM_BREAK_INSTANCE(TIMx))
- {
- if (OUTPUT_IDLE_STATE_0 == Output_Config->OCIdleState)
- {
- TIMx->CR2 &= (~BIT8);
- }
- else
- {
- TIMx->CR2 |= BIT8;
- }
- if (OUTPUT_IDLE_STATE_0 == Output_Config->OCNIdleState)
- {
- TIMx->CR2 &= (~BIT9);
- }
- else
- {
- TIMx->CR2 |= BIT9;
- }
- }
- TIMx->CCMR1 = (TIMx->CCMR1 & (~(BIT4|BIT5|BIT6))) | (Output_Config->OCMode << 4);
- break;
- case TIM_CHANNEL_2:
- TIMx->CCER &= (~BIT4); //disable OC2
- if (OUTPUT_POL_ACTIVE_HIGH == Output_Config->OCPolarity)
- {
- TIMx->CCER &= (~BIT5);
- }
- else
- {
- TIMx->CCER |= (BIT5);
- }
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER &= (~BIT6); //disable OC2N
- if (OUTPUT_POL_ACTIVE_HIGH == Output_Config->OCNPolarity)
- {
- TIMx->CCER &= (~BIT7);
- }
- else
- {
- TIMx->CCER |= (BIT7);
- }
- }
- TIMx->CCMR1 &= (~0xFF00U); // reset high 8 bits
- TIMx->CCR2 = Output_Config->Pulse; // write value to ccr before preload enable
- if (OUTPUT_FAST_MODE_ENABLE == Output_Config->OCFastMode)
- {
- TIMx->CCMR1 |= (BIT10);
- }
- TIMx->CCMR1 |= (BIT11); // preload enable
- if (IS_TIM_BREAK_INSTANCE(TIMx))
- {
- if (OUTPUT_IDLE_STATE_0 == Output_Config->OCIdleState)
- {
- TIMx->CR2 &= (~BIT10);
- }
- else
- {
- TIMx->CR2 |= BIT10;
- }
- if (OUTPUT_IDLE_STATE_0 == Output_Config->OCNIdleState)
- {
- TIMx->CR2 &= (~BIT11);
- }
- else
- {
- TIMx->CR2 |= BIT11;
- }
- }
- TIMx->CCMR1 = (TIMx->CCMR1 & (~(BIT12|BIT13|BIT14))) | (Output_Config->OCMode << 12);
- break;
- case TIM_CHANNEL_3:
- TIMx->CCER &= (~BIT8); //disable OC3
- if (OUTPUT_POL_ACTIVE_HIGH == Output_Config->OCPolarity)
- {
- TIMx->CCER &= (~BIT9);
- }
- else
- {
- TIMx->CCER |= (BIT9);
- }
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER &= (~BIT10); //disable OC3N
- if (OUTPUT_POL_ACTIVE_HIGH == Output_Config->OCNPolarity)
- {
- TIMx->CCER &= (~BIT11);
- }
- else
- {
- TIMx->CCER |= (BIT11);
- }
- }
- TIMx->CCMR2 &= (~0x00FF); // reset low 8 bits
- TIMx->CCMR2 |= (BIT3); // preload enable
- if (OUTPUT_FAST_MODE_ENABLE == Output_Config->OCFastMode)
- {
- TIMx->CCMR2 |= (BIT2);
- }
- TIMx->CCR3 = Output_Config->Pulse;
- if (IS_TIM_BREAK_INSTANCE(TIMx))
- {
- if (OUTPUT_IDLE_STATE_0 == Output_Config->OCIdleState)
- {
- TIMx->CR2 &= (~BIT12);
- }
- else
- {
- TIMx->CR2 |= BIT12;
- }
- if (OUTPUT_IDLE_STATE_0 == Output_Config->OCNIdleState)
- {
- TIMx->CR2 &= (~BIT13);
- }
- else
- {
- TIMx->CR2 |= BIT13;
- }
- }
- TIMx->CCMR2 = (TIMx->CCMR2 & (~(BIT4|BIT5|BIT6))) | (Output_Config->OCMode << 4);
- break;
- case TIM_CHANNEL_4:
- TIMx->CCER &= (~BIT12); //disable OC4
- if (OUTPUT_POL_ACTIVE_HIGH == Output_Config->OCPolarity)
- {
- TIMx->CCER &= (~BIT13);
- }
- else
- {
- TIMx->CCER |= (BIT13);
- }
- TIMx->CCMR2 &= (~0xFF00); // reset high 8 bits
- TIMx->CCR4 = Output_Config->Pulse;
- if (OUTPUT_FAST_MODE_ENABLE == Output_Config->OCFastMode)
- {
- TIMx->CCMR2 |= (BIT10); // fast mode
- }
- TIMx->CCMR2 |= (BIT11); // preload enable
- if (IS_TIM_BREAK_INSTANCE(TIMx))
- {
- if (OUTPUT_IDLE_STATE_0 == Output_Config->OCIdleState)
- {
- TIMx->CR2 &= (~BIT14);
- }
- else
- {
- TIMx->CR2 |= BIT14;
- }
- }
- TIMx->CCMR2 = (TIMx->CCMR2 & (~(BIT12|BIT13|BIT14))) | (Output_Config->OCMode << 12);
- break;
- default:
- return 1; // error parameter
- }
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_Capture_Config
- * Description : configure capture parameters
- * Input :
- TIMx: timer instance
- Capture_Config: capture configuration parameter strcture
- ICPolarity: TIM_SLAVE_CAPTURE_ACTIVE_RISING, TIM_SLAVE_CAPTURE_ACTIVE_FALLING...
- ICSelection: TIM_ICSELECTION_DIRECTTI, TIM_ICSELECTION_INDIRECTTI
- ICFilter: TIM_IC1_FILTER_LVL(x), TIM_IC2_FILTER_LVL(x), x:0-15
- ICPrescaler: TIM_IC1_PRESCALER_1, TIM_IC2_PRESCALER_1...
- Channel: channel id, TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIMER_Capture_Config(TIM_TypeDef *TIMx, TIM_IC_InitTypeDef * Capture_Config, uint32_t Channel)
- {
- switch(Channel)
- {
- case TIM_CHANNEL_1:
- TIMER_IC1_SetConfig(TIMx, Capture_Config->ICPolarity, Capture_Config->ICSelection, Capture_Config->TIFilter);
- /* Reset the IC1PSC Bits */
- TIMx->CCMR1 &= (~BIT2|BIT3);
- /* Set the IC1PSC value */
- TIMx->CCMR1 |= Capture_Config->ICPrescaler;
- break;
- case TIM_CHANNEL_2:
- TIMER_IC2_SetConfig(TIMx, Capture_Config->ICPolarity, Capture_Config->ICSelection, Capture_Config->TIFilter);
- /* Reset the IC2PSC Bits */
- TIMx->CCMR1 &= (~BIT10|BIT11);
- /* Set the IC2PSC value */
- TIMx->CCMR1 |= Capture_Config->ICPrescaler;
- break;
- case TIM_CHANNEL_3:
- TIMER_IC3_SetConfig(TIMx, Capture_Config->ICPolarity, Capture_Config->ICSelection, Capture_Config->TIFilter);
- /* Reset the IC3PSC Bits */
- TIMx->CCMR2 &= (~BIT2|BIT3);
- /* Set the IC3PSC value */
- TIMx->CCMR2 |= Capture_Config->ICPrescaler;
- break;
- case TIM_CHANNEL_4:
- TIMER_IC4_SetConfig(TIMx, Capture_Config->ICPolarity, Capture_Config->ICSelection, Capture_Config->TIFilter);
- /* Reset the IC4PSC Bits */
- TIMx->CCMR2 &= (~BIT10|BIT11);
- /* Set the IC4PSC value */
- TIMx->CCMR2 |= Capture_Config->ICPrescaler;
- break;
- default:
- return 1;
- }
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_SelectClockSource
- * Description : select timer counter source, internal or external
- * Input:
- htim : timer handler
- sClockSourceConfig: configuration parameters, includes following members:
- ClockSource: TIM_CLOCKSOURCE_INT, TIM_CLOCKSOURCE_ETR...
- ClockPolarity: TIM_SLAVE_CAPTURE_ACTIVE_RISING, TIM_SLAVE_CAPTURE_ACTIVE_FALLING...
- ClockPrescaler: TIM_ETR_PRESCALER_1, TIM_ETR_PRESCALER_2...
- ClockFilter: TIM_ETR_FILTER_LVL(x), TIM_IC1_FILTER_LVL(x), TIM_IC2_FILTER_LVL(x)
- * Output : HAL_ERROR:error, HAL_OK:OK
- * Author : xwl
- **********************************************************************************/
- HAL_StatusTypeDef HAL_TIMER_SelectClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef * sClockSourceConfig)
- {
- htim->Instance->SMCR &= (~(BIT0|BIT1|BIT2));
- switch (sClockSourceConfig->ClockSource)
- {
- case TIM_CLOCKSOURCE_INT:
- {
- // do nothing here
- break;
- }
- case TIM_CLOCKSOURCE_ETR:
- {
- /* Configure the ETR Clock source */
- TIMER_ETR_SetConfig(htim->Instance,
- sClockSourceConfig->ClockPrescaler,
- sClockSourceConfig->ClockPolarity,
- sClockSourceConfig->ClockFilter);
- /* Enable the External clock mode2 */
- htim->Instance->SMCR |= BIT14; // ECE=1,external clock mode 2
- break;
- }
- case TIM_CLOCKSOURCE_TI1FP1:
- {
- TIMER_TI1FP1_ConfigInputStage(htim->Instance,
- sClockSourceConfig->ClockPolarity,
- sClockSourceConfig->ClockFilter);
- htim->Instance->SMCR &= (~(BIT4|BIT5|BIT6)); // trigger selection
- htim->Instance->SMCR |= (5 << 4); // Trigger select TI1FP1
- htim->Instance->SMCR |= (BIT0|BIT1|BIT2); // select external clock mode 1
- break;
- }
- case TIM_CLOCKSOURCE_TI2FP2:
- {
- TIMER_TI2FP2_ConfigInputStage(htim->Instance,
- sClockSourceConfig->ClockPolarity,
- sClockSourceConfig->ClockFilter);
- htim->Instance->SMCR &= (~(BIT4|BIT5|BIT6)); // trigger selection
- htim->Instance->SMCR |= (6 << 4); // Trigger select TI2FP2
- htim->Instance->SMCR |= (BIT0|BIT1|BIT2); // select external clock mode 1
- break;
- }
- case TIM_CLOCKSOURCE_ITR0:
- case TIM_CLOCKSOURCE_ITR1:
- case TIM_CLOCKSOURCE_ITR2:
- case TIM_CLOCKSOURCE_ITR3:
- {
- htim->Instance->SMCR &= (~(BIT4|BIT5|BIT6));
- htim->Instance->SMCR |= ( (sClockSourceConfig->ClockSource - TIM_CLOCKSOURCE_ITR0) << 4);
- htim->Instance->SMCR |= (BIT0|BIT1|BIT2); // select external clock mode 1
- break;
- }
- default:
- return HAL_ERROR;
- }
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_Base_Init
- * Description : timer base initiation
- * Input : timer handler
- * Output : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIMER_Base_Init(TIM_HandleTypeDef * htim)
- {
- if (0 == IS_TIMER_INSTANCE(htim->Instance))
- {
- return 1; //instance error
- }
- htim->Instance->CR1 = BIT2; // CEN=0, URS=1, OPM = 0
- if (htim->Init.ARRPreLoadEn)
- {
- htim->Instance->CR1 |= (BIT7);
- }
- else
- {
- htim->Instance->CR1 &= (~BIT7);
- }
- htim->Instance->ARR = htim->Init.Period;
- htim->Instance->PSC = htim->Init.Prescaler;
- if (IS_TIM_REPETITION_COUNTER_INSTANCE(htim->Instance))
- {
- htim->Instance->RCR = htim->Init.RepetitionCounter;
- }
- htim->Instance->EGR = BIT0; // no UIF generated because URS=1
- if (IS_TIM_CLOCK_DIVISION_INSTANCE(htim->Instance))
- {
- htim->Instance->CR1 = (htim->Instance->CR1 & (~(BIT8|BIT9))) | ((htim->Init.ClockDivision) & (BIT8|BIT9));
- }
- //up/down/center mode
- htim->Instance->CR1 = (htim->Instance->CR1 & (~(BIT4|BIT5|BIT6))) | ((htim->Init.CounterMode) & (BIT4|BIT5|BIT6));
- htim->Instance->CR1 &= (~BIT2); //URS = 0
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_Base_DeInit
- * Description : timer base deinitiation, disable Timer, turn off module clock and nvic
- * Input : timer handler
- * Output : HAL_OK: success; HAL_ERROR:error
- * Author : xwl
- **********************************************************************************/
- HAL_StatusTypeDef HAL_TIMER_Base_DeInit(TIM_HandleTypeDef *htim)
- {
- htim->Instance->CR1 &= (~BIT0);
- HAL_TIMER_Base_MspDeInit(htim);
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_Base_Start
- * Description : start timer
- * Input : timer instance
- * Output : none
- * Author : xwl
- **********************************************************************************/
- void HAL_TIMER_Base_Start(TIM_TypeDef *TIMx)
- {
- if (0 == IS_TIM_SLAVE_INSTANCE(TIMx) )
- {
- TIMx->CR1 |= BIT0;
- return;
- }
- if (TIM_SLAVE_MODE_TRIG != (TIMx->SMCR & (BIT0|BIT1|BIT2) ) )
- {
- TIMx->CR1 |= BIT0;
- return;
- }
- return;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_Base_Stop
- * Description : stop timer
- * Input : timer handler
- * Output : none
- * Author : xwl
- **********************************************************************************/
- HAL_StatusTypeDef HAL_TIMER_Base_Stop(TIM_TypeDef *TIMx)
- {
- TIMx->CR1 &= (~BIT0);
- HAL_TIM_DISABLE_IT_EX(TIMx, TIM_IT_UPDATE);
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_OnePulse_Init
- * Description : start timer with one pulse mode
- * Input :
- htim: timer handler
- mode: 0 means normal mode, 1 means one pulse mode
- * Output : HAL_OK, success; HAL_ERROR, fail
- * Author : xwl
- **********************************************************************************/
- HAL_StatusTypeDef HAL_TIMER_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t mode)
- {
- /* Check the TIM handle allocation */
- if(htim == NULL)
- {
- return HAL_ERROR;
- }
- HAL_TIMER_Base_Init(htim);
- /*reset the OPM Bit */
- htim->Instance->CR1 &= (~BIT3);
- if (0 != mode)
- {
- /*set the OPM Bit */
- htim->Instance->CR1 |= BIT3;
- }
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_TIM_PWM_Output_Start
- * Description : start timer output
- * Input :
- TIMx: timer instance
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIM_PWM_Output_Start(TIM_TypeDef *TIMx, uint32_t Channel)
- {
- if (0 == IS_TIM_CCX_INSTANCE(TIMx, Channel) )
- {
- return 1; // error parameter
- }
- switch(Channel)
- {
- case TIM_CHANNEL_1:
- TIMx->CCER |= BIT0;
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER |= BIT2;
- }
- break;
- case TIM_CHANNEL_2:
- TIMx->CCER |= BIT4;
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER |= BIT6;
- }
- break;
- case TIM_CHANNEL_3:
- TIMx->CCER |= BIT8;
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER |= BIT10;
- }
- break;
- case TIM_CHANNEL_4:
- TIMx->CCER |= BIT12;
- break;
- default:
- return 1;
- }
- if(IS_TIM_BREAK_INSTANCE(TIMx) != 0)
- {
- /* Enable the main output */
- TIMx->BDTR |= BIT15;
- }
- if (TIM_SLAVE_MODE_TRIG != (TIMx->SMCR & (BIT0|BIT1|BIT2) ) )
- {
- TIMx->CR1 |= BIT0;
- }
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIM_PWM_Output_Stop
- * Description : stop timer pwm output
- * Input :
- TIMx: timer instance
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- HAL_StatusTypeDef HAL_TIM_PWM_Output_Stop(TIM_TypeDef *TIMx, uint32_t Channel)
- {
- if (0 == IS_TIM_CCX_INSTANCE(TIMx, Channel) )
- {
- return HAL_ERROR; // error parameter
- }
- switch(Channel)
- {
- case TIM_CHANNEL_1:
- TIMx->CCER &= (~(BIT0 | BIT2));
- break;
- case TIM_CHANNEL_2:
- TIMx->CCER &= (~(BIT4 | BIT6));
- break;
- case TIM_CHANNEL_3:
- TIMx->CCER &= (~(BIT8 | BIT10));
- break;
- case TIM_CHANNEL_4:
- TIMx->CCER &= (~(BIT12));
- break;
- default:
- return HAL_ERROR;
- }
- if(IS_TIM_BREAK_INSTANCE(TIMx) != 0)
- {
- /* Enable the main output */
- TIMx->BDTR &= (~BIT15);
- }
- if (TIM_SLAVE_MODE_TRIG != (TIMx->SMCR & (BIT0|BIT1|BIT2) ) )
- {
- TIMx->CR1 &= (~BIT0);
- }
- /* Return function status */
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_OC_Start
- * Description : start timer output
- * Input :
- TIMx: timer instance
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIMER_OC_Start(TIM_TypeDef *TIMx, uint32_t Channel)
- {
- if (0 == IS_TIM_CCX_INSTANCE(TIMx, Channel) )
- {
- return 1; // error parameter
- }
- switch(Channel)
- {
- case TIM_CHANNEL_1:
- TIMx->CCER |= BIT0;
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER |= BIT2;
- }
- break;
- case TIM_CHANNEL_2:
- TIMx->CCER |= BIT4;
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER |= BIT6;
- }
- break;
- case TIM_CHANNEL_3:
- TIMx->CCER |= BIT8;
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER |= BIT10;
- }
- break;
- case TIM_CHANNEL_4:
- TIMx->CCER |= BIT12;
- break;
- default:
- return 1;
- }
- if(IS_TIM_BREAK_INSTANCE(TIMx) != 0)
- {
- /* Enable the main output */
- TIMx->BDTR |= BIT15;
- }
- if (TIM_SLAVE_MODE_TRIG != (TIMx->SMCR & (BIT0|BIT1|BIT2) ) )
- {
- TIMx->CR1 |= BIT0;
- }
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_OCxN_Start
- * Description : start timer OCxN output
- * Input :
- TIMx: timer instance
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIMER_OCxN_Start(TIM_TypeDef *TIMx, uint32_t Channel)
- {
- if (0 == IS_TIM_CCX_INSTANCE(TIMx, Channel) )
- {
- return 1; // error parameter
- }
- switch(Channel)
- {
- case TIM_CHANNEL_1:
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER |= BIT2;
- }
- break;
- case TIM_CHANNEL_2:
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER |= BIT6;
- }
- break;
- case TIM_CHANNEL_3:
- if (IS_TIM_CCXN_INSTANCE(TIMx, Channel) )
- {
- TIMx->CCER |= BIT10;
- }
- break;
- case TIM_CHANNEL_4:
- TIMx->CCER |= BIT12;
- break;
- default:
- return 1;
- }
- if(IS_TIM_BREAK_INSTANCE(TIMx) != 0)
- {
- /* Enable the main output */
- TIMx->BDTR |= BIT15;
- }
- if (TIM_SLAVE_MODE_TRIG != (TIMx->SMCR & (BIT0|BIT1|BIT2) ) )
- {
- TIMx->CR1 |= BIT0;
- }
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_OC_Stop
- * Description : stop timer output
- * Input :
- TIMx: timer instance
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- HAL_StatusTypeDef HAL_TIMER_OC_Stop(TIM_TypeDef *TIMx, uint32_t Channel)
- {
- if (0 == IS_TIM_CCX_INSTANCE(TIMx, Channel) )
- {
- return HAL_ERROR; // error parameter
- }
- switch(Channel)
- {
- case TIM_CHANNEL_1:
- TIMx->CCER &= (~(BIT0 | BIT2));
- break;
- case TIM_CHANNEL_2:
- TIMx->CCER &= (~(BIT4 | BIT6));
- break;
- case TIM_CHANNEL_3:
- TIMx->CCER &= (~(BIT8 | BIT10));
- break;
- case TIM_CHANNEL_4:
- TIMx->CCER &= (~(BIT12));
- break;
- default:
- return HAL_ERROR;
- }
- if(IS_TIM_BREAK_INSTANCE(TIMx) != 0)
- {
- /* Enable the main output */
- TIMx->BDTR &= (~BIT15);
- }
- if (TIM_SLAVE_MODE_TRIG != (TIMx->SMCR & (BIT0|BIT1|BIT2) ) )
- {
- TIMx->CR1 &= (~BIT0);
- }
- /* Return function status */
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_TIM_Capture_Start
- * Description : start timer capture
- * Input :
- TIMx: timer instance
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIM_Capture_Start(TIM_TypeDef *TIMx, uint32_t Channel)
- {
- if (0 == IS_TIM_CCX_INSTANCE(TIMx, Channel) )
- {
- return 1; // error parameter
- }
- switch(Channel)
- {
- case TIM_CHANNEL_1:
- TIMx->CCER |= BIT0;
- break;
- case TIM_CHANNEL_2:
- TIMx->CCER |= BIT4;
- break;
- case TIM_CHANNEL_3:
- TIMx->CCER |= BIT8;
- break;
- case TIM_CHANNEL_4:
- TIMx->CCER |= BIT12;
- break;
- default:
- return 1;
- }
- if (TIM_SLAVE_MODE_TRIG != (TIMx->SMCR & (BIT0|BIT1|BIT2) ) )
- {
- TIMx->CR1 |= BIT0;
- }
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIM_Capture_Stop
- * Description : stop timer capture
- * Input :
- TIMx: timer instance
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : : 0: success; else:error
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIM_Capture_Stop(TIM_TypeDef *TIMx, uint32_t Channel)
- {
- if (0 == IS_TIM_CCX_INSTANCE(TIMx, Channel) )
- {
- return 1; // error parameter
- }
- switch(Channel)
- {
- case TIM_CHANNEL_1:
- TIMx->CCER &= (~BIT0);
- break;
- case TIM_CHANNEL_2:
- TIMx->CCER &= (~BIT4);
- break;
- case TIM_CHANNEL_3:
- TIMx->CCER &= (~BIT8);
- break;
- case TIM_CHANNEL_4:
- TIMx->CCER &= (~BIT12);
- break;
- default:
- return 1;
- }
- if (TIM_SLAVE_MODE_TRIG != (TIMx->SMCR & (BIT0|BIT1|BIT2) ) )
- {
- TIMx->CR1 &= (~BIT0);
- }
- return 0;
- }
- /*********************************************************************************
- * Function : HAL_TIMEx_ETRSelection
- * Description : select ETR signal, it can ben GPIO, COMP1_OUT, COMP2_OUT, ADC analog watchdog output
- * Input :
- htim: timer handler
- ETRSelection: ETR_SELECT_GPIO, ETR_SELECT_COMP1_OUT...
- * Output : HAL_OK, Success; HAL_ERROR:Fail
- * Author : xwl
- **********************************************************************************/
- HAL_StatusTypeDef HAL_TIMEx_ETRSelection(TIM_HandleTypeDef *htim, uint32_t ETRSelection)
- {
- HAL_StatusTypeDef status = HAL_OK;
- htim->Instance->AF1 &= (~ETR_SELECT_MASK);
- htim->Instance->AF1 |= ETRSelection;
- return status;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_ReadCapturedValue
- * Description : read capture value as channel
- * Input :
- htim: timer handler
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : capture value
- * Author : xwl
- **********************************************************************************/
- uint32_t HAL_TIMER_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
- {
- uint32_t capture_data = 0U;
- switch (Channel)
- {
- case TIM_CHANNEL_1:
- {
- /* Return the capture 1 value */
- capture_data = htim->Instance->CCR1;
- break;
- }
- case TIM_CHANNEL_2:
- {
- /* Return the capture 2 value */
- capture_data = htim->Instance->CCR2;
- break;
- }
- case TIM_CHANNEL_3:
- {
- /* Return the capture 3 value */
- capture_data = htim->Instance->CCR3;
- break;
- }
- case TIM_CHANNEL_4:
- {
- /* Return the capture 4 value */
- capture_data = htim->Instance->CCR4;
- break;
- }
- default:
- break;
- }
- return capture_data;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_GenerateEvent
- * Description : Generate event by software
- * Input:
- htim : timer handler
- EventSource: TIM_EVENTSOURCE_UPDATE, TIM_EVENTSOURCE_CC1...
- * Output : HAL_ERROR:error, HAL_OK:OK
- * Author : xwl
- **********************************************************************************/
- HAL_StatusTypeDef HAL_TIMER_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource)
- {
- htim->Instance->EGR = EventSource;
- return HAL_OK;
- }
- /*********************************************************************************
- * Function : HAL_TIMER_Clear_Capture_Flag
- * Description : clear capture flag as channel id
- * Input :
- htim: timer handler
- Channel: TIM_CHANNEL_1, TIM_CHANNEL_2...
- * Output : capture value
- * Author : xwl
- **********************************************************************************/
- void HAL_TIMER_Clear_Capture_Flag(TIM_HandleTypeDef *htim, uint32_t Channel)
- {
- switch (Channel)
- {
- case TIM_CHANNEL_1:
- {
- htim->Instance->SR &= (~(BIT1|BIT9));
- break;
- }
- case TIM_CHANNEL_2:
- {
- htim->Instance->SR &= (~(BIT2|BIT10));
- break;
- }
- case TIM_CHANNEL_3:
- {
- htim->Instance->SR &= (~(BIT3|BIT11));
- break;
- }
- case TIM_CHANNEL_4:
- {
- htim->Instance->SR &= (~(BIT4|BIT12));
- break;
- }
- default:
- break;
- }
- }
- /*********************************************************************************
- * Function : TIMER_ETR_SetConfig
- * Description : configure ETR channel polarity, prescaler and filter
- * Input:
- TIMx : timer instance
- TIM_ExtTRGPrescaler: TIM_ETR_PRESCALER_1, TIM_ETR_PRESCALER_2...
- TIM_ExtTRGPolarity: TIM_ETR_POLAIRTY_HIGH, TIM_ETR_POLAIRTY_LOW
- ExtTRGFilter: TIM_ETR_FILTER_LVL(x), x=0-15
- * Output : none
- * Author : xwl
- **********************************************************************************/
- static void TIMER_ETR_SetConfig(TIM_TypeDef* TIMx, uint32_t TIM_ExtTRGPrescaler, uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter)
- {
- /* Reset the ETR Bits */
- TIMx->SMCR &= (~0xFF00U);
- /* Set the Prescaler, the Filter value and the Polarity */
- TIMx->SMCR |= (TIM_ExtTRGPrescaler | TIM_ExtTRGPolarity | ExtTRGFilter);
- }
- /*********************************************************************************
- * Function : TIMER_TI1FP1_ConfigInputStage
- * Description : configure TI1FP1 channel polarity and filter
- * Input:
- TIMx : timer instance
- TIM_ICPolarity: TIM_SLAVE_CAPTURE_ACTIVE_RISING, TIM_SLAVE_CAPTURE_ACTIVE_FALLING...
- Filter: TIM_TI1_FILTER_LVL(x), x=0-15
- * Output : none
- * Author : xwl
- **********************************************************************************/
- static void TIMER_TI1FP1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t Filter)
- {
- TIMx->CCER &= (~BIT0); //Disable the Channel 1: Reset the CC1E Bit
- TIMx->CCMR1 = ((TIMx->CCMR1 & (~(BIT0|BIT1))) | BIT0); // CH1 as input
- TIMx->CCMR1 &= (~0xF0U); // reset TI1 filter
- TIMx->CCMR1 |= Filter;
- if(TIM_SLAVE_CAPTURE_ACTIVE_RISING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC1_SLAVE_CAPTURE_POL_RISING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC1_SLAVE_CAPTURE_POL_FALLING;
- }
- else
- {
- TIMx->CCER |= TIM_CC1_SLAVE_CAPTURE_POL_BOTH;
- }
- }
- /*********************************************************************************
- * Function : TIMER_TI2FP2_ConfigInputStage
- * Description : configure TI2FP2 channel polarity and filter
- * Input:
- TIMx : timer instance
- TIM_ICPolarity: TIM_SLAVE_CAPTURE_ACTIVE_RISING, TIM_SLAVE_CAPTURE_ACTIVE_FALLING...
- Filter: TIM_TI2_FILTER_LVL(x), x=0-15
- * Output : none
- * Author : xwl
- **********************************************************************************/
- static void TIMER_TI2FP2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t Filter)
- {
- TIMx->CCER &= (~BIT4); //Disable the Channel 2: Reset the CC2E Bit
- TIMx->CCMR1 = ((TIMx->CCMR1 & (~(BIT8|BIT9))) | BIT8); // CH2 as input
- TIMx->CCMR1 &= (~0xF000U); // reset TI2 filter
- TIMx->CCMR1 |= Filter;
- if(TIM_SLAVE_CAPTURE_ACTIVE_RISING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC2_SLAVE_CAPTURE_POL_RISING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC2_SLAVE_CAPTURE_POL_FALLING;
- }
- else
- {
- TIMx->CCER |= TIM_CC2_SLAVE_CAPTURE_POL_BOTH;
- }
- }
- /*********************************************************************************
- * Function : TIMER_IC1_SetConfig
- * Description : configure TI1FP1 or TI2FP1 channel polarity and filter
- * Input:
- TIMx : timer instance
- TIM_ICPolarity: TIM_SLAVE_CAPTURE_ACTIVE_RISING, TIM_SLAVE_CAPTURE_ACTIVE_FALLING...
- Filter: TIM_TI1_FILTER_LVL(x), x=0-15
- * Output : none
- * Author : xwl
- **********************************************************************************/
- void TIMER_IC1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t Filter)
- {
- /* Disable the Channel 1: Reset the CC1E Bit */
- TIMx->CCER &= (~BIT0);
- if(TIM_SLAVE_CAPTURE_ACTIVE_RISING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC1_SLAVE_CAPTURE_POL_RISING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC1_SLAVE_CAPTURE_POL_FALLING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_RISING_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC1_SLAVE_CAPTURE_POL_BOTH;
- }
- if(TIM_ICSELECTION_DIRECTTI == TIM_ICSelection)
- {
- TIMx->CCMR1 = (TIMx->CCMR1 & (~(BIT0|BIT1))) | BIT0;
- TIMx->CCMR1 &= (~0xF0U);
- }
- else
- {
- TIMx->CCMR1 = (TIMx->CCMR1 & (~(BIT0|BIT1))) | BIT1;
- TIMx->CCMR1 &= (~0xF000U);
- }
- TIMx->CCMR1 |= Filter;
- }
- /*********************************************************************************
- * Function : TIMER_IC2_SetConfig
- * Description : configure TI1FP2 or TI2FP2 channel polarity and filter
- * Input:
- TIMx : timer instance
- TIM_ICPolarity: TIM_SLAVE_CAPTURE_ACTIVE_RISING, TIM_SLAVE_CAPTURE_ACTIVE_FALLING...
- Filter: TIM_TI2_FILTER_LVL(x), x=0-15
- * Output : none
- * Author : xwl
- **********************************************************************************/
- static void TIMER_IC2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t Filter)
- {
- /* Disable the Channel 2, Reset the CC2E Bit */
- TIMx->CCER &= (~BIT4);
- if(TIM_SLAVE_CAPTURE_ACTIVE_RISING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC2_SLAVE_CAPTURE_POL_RISING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC2_SLAVE_CAPTURE_POL_FALLING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_RISING_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC2_SLAVE_CAPTURE_POL_BOTH;
- }
- if(TIM_ICSELECTION_DIRECTTI == TIM_ICSelection)
- {
- TIMx->CCMR1 = (TIMx->CCMR1 & (~(BIT8|BIT9))) | BIT8;
- TIMx->CCMR1 &= (~0xF000U);
- }
- else
- {
- TIMx->CCMR1 = (TIMx->CCMR1 & (~(BIT8|BIT9))) | BIT9;
- TIMx->CCMR1 &= (~0xF0U);
- }
- TIMx->CCMR1 |= Filter;
- }
- /*********************************************************************************
- * Function : TIMER_IC3_SetConfig
- * Description : configure TI3FP3 or TI4FP3 channel polarity and filter
- * Input:
- TIMx : timer instance
- TIM_ICPolarity: TIM_SLAVE_CAPTURE_ACTIVE_RISING, TIM_SLAVE_CAPTURE_ACTIVE_FALLING...
- Filter: TIM_TI3_FILTER_LVL(x), x=0-15
- * Output : none
- * Author : xwl
- **********************************************************************************/
- static void TIMER_IC3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t Filter)
- {
- /* Disable the Channel 3, Reset the CC3E Bit */
- TIMx->CCER &= (~BIT8);
- if(TIM_SLAVE_CAPTURE_ACTIVE_RISING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC3_SLAVE_CAPTURE_POL_RISING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC3_SLAVE_CAPTURE_POL_FALLING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_RISING_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC3_SLAVE_CAPTURE_POL_BOTH;
- }
- if(TIM_ICSELECTION_DIRECTTI == TIM_ICSelection)
- {
- TIMx->CCMR2 = (TIMx->CCMR2 & (~(BIT0|BIT1))) | BIT0;
- TIMx->CCMR2 &= (~0xF0U);
- }
- else
- {
- TIMx->CCMR2 = (TIMx->CCMR2 & (~(BIT0|BIT1))) | BIT1;
- TIMx->CCMR2 &= (~0xF000U);
- }
- TIMx->CCMR2 |= Filter;
- }
- /*********************************************************************************
- * Function : TIMER_IC4_SetConfig
- * Description : configure TI3FP4 or TI4FP4 channel polarity and filter
- * Input:
- TIMx : timer instance
- TIM_ICPolarity: TIM_SLAVE_CAPTURE_ACTIVE_RISING, TIM_SLAVE_CAPTURE_ACTIVE_FALLING...
- Filter: TIM_TI4_FILTER_LVL(x), x=0-15
- * Output : none
- * Author : xwl
- **********************************************************************************/
- static void TIMER_IC4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t Filter)
- {
- /* Disable the Channel 3, Reset the CC3E Bit */
- TIMx->CCER &= (~BIT12);
- if(TIM_SLAVE_CAPTURE_ACTIVE_RISING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC4_SLAVE_CAPTURE_POL_RISING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC4_SLAVE_CAPTURE_POL_FALLING;
- }
- else if (TIM_SLAVE_CAPTURE_ACTIVE_RISING_FALLING == TIM_ICPolarity)
- {
- TIMx->CCER |= TIM_CC4_SLAVE_CAPTURE_POL_BOTH;
- }
- if(TIM_ICSELECTION_DIRECTTI == TIM_ICSelection)
- {
- TIMx->CCMR2 = (TIMx->CCMR2 & (~(BIT8|BIT9))) | BIT8;
- TIMx->CCMR2 &= (~0xF000U);
- }
- else
- {
- TIMx->CCMR2 = (TIMx->CCMR2 & (~(BIT8|BIT9))) | BIT9;
- TIMx->CCMR2 &= (~0xF0U);
- }
- TIMx->CCMR2 |= Filter;
- }
|