void DUALTIMER_DeInit(DUALTIMER_TypeDef* DUALTIMERn) { /* Check the parameters */ assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn)); DUALTIMER_Stop(DUALTIMERn); DUALTIMERn->TimerLoad = 0x0; DUALTIMERn->TimerControl = 0x20; DUALTIMERn->TimerBGLoad = 0x0; }
void us_ticker_set_interrupt(timestamp_t timestamp) { int32_t dev = 0; if (!us_ticker_inited) { us_ticker_init(); } dev = (int32_t)(timestamp - us_ticker_read()); dev = dev * ((GetSystemClock() / 1000000) / 16); if(dev <= 0) { us_ticker_irq_handler(); return; } DUALTIMER_ClockEnable(TIMER_0); DUALTIMER_Stop(TIMER_0); TimerHandler.TimerControl_Mode = DUALTIMER_TimerControl_Periodic; TimerHandler.TimerControl_OneShot = DUALTIMER_TimerControl_OneShot; TimerHandler.TimerControl_Pre = DUALTIMER_TimerControl_Pre_16; TimerHandler.TimerControl_Size = DUALTIMER_TimerControl_Size_32; TimerHandler.TimerLoad = (uint32_t)dev; DUALTIMER_Init(TIMER_0, &TimerHandler); DUALTIMER_IntConfig(TIMER_0, ENABLE); NVIC_EnableIRQ(TIMER_IRQn); DUALTIMER_Start(TIMER_0); }
void DUALTIMER_Init(DUALTIMER_TypeDef* DUALTIMERn, DULATIMER_InitTypDef* DUALTIMER_InitStruct) { uint32_t tmp = 0; /* Check the parameters */ assert_param(IS_DUALTIMER_ALL_CH(DUALTIMERn)); assert_param(IS_DUALTIMER_TimerMode(DUALTIMER_InitStruct->TimerControl_Mode)); assert_param(IS_DUALTIMER_TimerPre(DUALTIMER_InitStruct->TimerControl_Pre)); assert_param(IS_DUALTIMER_TimerSize(DUALTIMER_InitStruct->TimerControl_Size)); assert_param(IS_DUALTIMER_OneShot(DUALTIMER_InitStruct->TimerControl_OneShot)); DUALTIMER_Stop(DUALTIMERn); DUALTIMERn->TimerLoad = DUALTIMER_InitStruct->TimerLoad; tmp = DUALTIMERn->TimerControl; tmp |= (DUALTIMER_InitStruct->TimerControl_Mode << DUALTIMER_TimerControl_TimerMode_Pos); tmp |= (DUALTIMER_InitStruct->TimerControl_Pre << DUALTIMER_TimerControl_Pre_Pos); tmp |= (DUALTIMER_InitStruct->TimerControl_Size << DUALTIMER_TimerControl_Size_Pos); tmp |= (DUALTIMER_InitStruct->TimerControl_OneShot << DUALTIMER_TimerControl_OneShot_Pos); //Reset values not used tmp &= 0xEF; DUALTIMERn->TimerControl = tmp; }