示例#1
0
// 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;
}
示例#2
0
/*******************************************************************************
* 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;
 }
示例#3
0
文件: timer1.c 项目: Paulxia/navictrl
//----------------------------------------------------------------------------------------------------
// 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");

}
示例#4
0
// Helper: get timer clock
static u32 platform_timer_get_clock( unsigned id )
{
  return ( SCU_GetPCLKFreqValue() * 1000 ) / ( TIM_GetPrescalerValue( ( TIM_TypeDef* )timer_data[ id ] ) + 1 );
}