// Helper: set timer clock static u32 platform_timer_set_clock( unsigned id, u32 clock ) { u32 baseclk = SCU_GetPCLKFreqValue() * 1000; TIM_TypeDef* base = ( TIM_TypeDef* )timer_data[ id ]; u64 bestdiv; bestdiv = ( ( u64 )baseclk << 16 ) / clock; if( bestdiv & 0x8000 ) bestdiv += 0x10000; bestdiv >>= 16; if( bestdiv > 256 ) bestdiv = 256; TIM_PrescalerConfig( base, bestdiv - 1 ); return baseclk / bestdiv; }
/******************************************************************************* * Function Name : UART_IrDASetCounter * Description : Sets the IrDA counter divisor value. * Input : - UARTx: where x can be 0,1 or 2 to select the UART/IrDA peripheral. * - IrDA_Counter: IrDA counter divisor new value n low power mode(Hz). * Output : None * Return : None *******************************************************************************/ void UART_IrDASetCounter(u8 IrDAx, u32 IrDA_Counter) { UART_TypeDef* UARTx; u32 APBClock; switch(IrDAx) { case IrDA0: UARTx = UART0; break; case IrDA1: UARTx = UART1; break; case IrDA2: UARTx = UART2; break; } /* Get the APB frequency */ APBClock = (SCU_GetPCLKFreqValue())*1000; /* Determine the Counter Divisor part */ UARTx->ILPR = (((APBClock*10) / ( IrDA_Counter)) + 5 )/10; }
//---------------------------------------------------------------------------------------------------- // 1ms Timer //---------------------------------------------------------------------------------------------------- void TIMER1_Init(void) { TIM_InitTypeDef TIM_InitStructure; UART1_PutString("\r\n Timer1 init..."); #define TIM1_FREQ 200000 // 200kHz // TimerOCR set in IntHandler SCU_APBPeriphClockConfig(__TIM01, ENABLE); TIM_DeInit(TIM1); TIM_StructInit(&TIM_InitStructure); TIM_InitStructure.TIM_Mode = TIM_OCM_CHANNEL_1; TIM_InitStructure.TIM_OC1_Modes = TIM_TIMING; TIM_InitStructure.TIM_Clock_Source = TIM_CLK_APB; TIM_InitStructure.TIM_Prescaler = (SCU_GetPCLKFreqValue() * 1000) / TIM1_FREQ; // is only valid up to 48 MHz ! TIM_Init (TIM1, &TIM_InitStructure); TIM_ITConfig(TIM1, TIM_IT_OC1, ENABLE); TIM_CounterCmd(TIM1, TIM_START); VIC_Config(TIM1_ITLine, VIC_IRQ, PRIORITY_TIMER1); VIC_ITCmd(TIM1_ITLine, ENABLE); SystemTime.Year = 0; SystemTime.Month = 0; SystemTime.Day = 0; SystemTime.Hour = 0; SystemTime.Min = 0; SystemTime.Sec = 0; SystemTime.mSec = 0; SystemTime.Valid = 0; CountMilliseconds = 0; UART1_PutString("ok"); }
// Helper: get timer clock static u32 platform_timer_get_clock( unsigned id ) { return ( SCU_GetPCLKFreqValue() * 1000 ) / ( TIM_GetPrescalerValue( ( TIM_TypeDef* )timer_data[ id ] ) + 1 ); }