コード例 #1
0
ファイル: platform.c プロジェクト: ARMinARM/elua
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;
}
コード例 #2
0
ファイル: platform.c プロジェクト: Linux-enCaja/robotica
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;
}
コード例 #3
0
ファイル: platform.c プロジェクト: BackupTheBerlios/elua-svn
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;
コード例 #4
0
ファイル: platform.c プロジェクト: BackupTheBerlios/elua-svn
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;
コード例 #5
0
ファイル: platform.c プロジェクト: Theemuts/eLuaBrain
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;
コード例 #6
0
ファイル: platform.c プロジェクト: ARMinARM/elua
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 );
}
コード例 #7
0
ファイル: platform.c プロジェクト: Linux-enCaja/robotica
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 );
}
コード例 #8
0
ファイル: platform.c プロジェクト: jsyrjala/ruuvitracker_fw
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 );
}