timer_data_type platform_s_timer_op( unsigned id, int op, timer_data_type data ) { u32 res = 0; switch( op ) { case PLATFORM_TIMER_OP_START: TIM_Cmd( tmr[ id ], ENABLE ); TIM_ResetCounter( tmr[ id ] ); break; case PLATFORM_TIMER_OP_READ: res = tmr[ id ]->TC; break; case PLATFORM_TIMER_OP_SET_CLOCK: res = platform_timer_set_clock( id, data ); break; case PLATFORM_TIMER_OP_GET_CLOCK: res = platform_timer_get_clock( id ); break; case PLATFORM_TIMER_OP_GET_MAX_CNT: res = 0xFFFFFFFF; break; } return res; }
u32 platform_s_timer_op( unsigned id, int op, u32 data ) { u32 res = 0; PREG TxTCR = ( PREG )tmr_tcr[ id ]; PREG TxTC = ( PREG )tmr_tc[ id ]; switch( op ) { case PLATFORM_TIMER_OP_START: *TxTCR = TMR_ENABLE | TMR_RESET; *TxTCR = TMR_ENABLE; break; case PLATFORM_TIMER_OP_READ: res = *TxTC; break; case PLATFORM_TIMER_OP_GET_MAX_DELAY: res = platform_timer_get_diff_us( id, 0, 0xFFFFFFFF ); break; case PLATFORM_TIMER_OP_GET_MIN_DELAY: res = platform_timer_get_diff_us( id, 0, 1 ); break; case PLATFORM_TIMER_OP_SET_CLOCK: res = platform_timer_set_clock( id, data ); break; case PLATFORM_TIMER_OP_GET_CLOCK: res = platform_timer_get_clock( id ); break; } return res; }
void platform_timer_delay( unsigned id, u32 delay_us ) { TIM_TypeDef* base = ( TIM_TypeDef* )timer_data[ id ]; u32 freq; timer_data_type final; freq = platform_timer_get_clock( id ); final = ( ( u64 )delay_us * freq ) / 1000000;
void platform_timer_delay( unsigned id, u32 delay_us ) { u32 freq; u64 final; u32 mask = ( id == 0 ) ? ( 1 << 5 ) : ( 1 << 6 ); freq = platform_timer_get_clock( id ); final = ( ( u64 )delay_us * freq ) / 1000000;
void platform_s_timer_delay( unsigned id, u32 delay_us ) { AT91S_TC* base = ( AT91S_TC* )timer_base[ id ]; u32 freq; timer_data_type final; volatile int i; freq = platform_timer_get_clock( id ); final = ( ( u64 )delay_us * freq ) / 1000000;
void platform_s_timer_delay( unsigned id, timer_data_type delay_us ) { u32 last; last = ( ( u64 )delay_us * platform_timer_get_clock( id ) ) / 1000000; TIM_Cmd( tmr[ id ], ENABLE ); TIM_ResetCounter( tmr[ id ] ); while( tmr[ id ]->TC < last ); }
void platform_s_timer_delay( unsigned id, u32 delay_us ) { PREG TxTCR = ( PREG )tmr_tcr[ id ]; PREG TxTC = ( PREG )tmr_tc[ id ]; u32 last; last = ( ( u64 )delay_us * platform_timer_get_clock( id ) ) / 1000000; *TxTCR = TMR_ENABLE | TMR_RESET; *TxTCR = TMR_ENABLE; while( *TxTC < last ); }
static u32 platform_timer_set_clock( unsigned id, u32 clock ) { TIM_TimeBaseInitTypeDef timer_base_struct; TIM_TypeDef *ptimer = (TIM_TypeDef*)timer[ id ]; u32 pre = ( TIM_GET_BASE_CLK( id ) / clock ) - 1; if( pre > 65535 ) // Limit prescaler to 16-bits pre = 65535; timer_base_struct.TIM_Period = 0xFFFF; timer_base_struct.TIM_Prescaler = ( u16 )pre; timer_base_struct.TIM_ClockDivision = TIM_CKD_DIV1; timer_base_struct.TIM_CounterMode = TIM_CounterMode_Up; timer_base_struct.TIM_RepetitionCounter = 0x0000; TIM_TimeBaseInit( (TIM_TypeDef*)timer[ id ], &timer_base_struct ); TIM_Cmd( ptimer, ENABLE ); return platform_timer_get_clock( id ); }