⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 用quartusII编写的
💻 C
字号:
#include "..\..\includes.h"
#if CFG_TIMER_EN > 0

//------------------------------------------------------
// 定时器0中断服务程序
//------------------------------------------------------
void Timer0_ISR( void ) interrupt TF0_VECTOR_NUMBER
{
}


//------------------------------------------------------
// 定时器1中断服务程序
//------------------------------------------------------
void Timer1_ISR( void ) interrupt TF1_VECTOR_NUMBER
{
}



//-------------------------------------------------------------------------
// 定时器初始化
//
// 参数说明:
//          timerID           定时器编号
//          workMode          定时器工作模式,是定时还是计数
//          startMode         定时器启动模式,是软启动还是硬启动
//          operateMode       0 ~ 3
//
// 返回值:
//          如果初始化成功,函数返回TRUE;否则,返回FALSE
//-------------------------------------------------------------------------
BOOLEAN Timer_Init( INT8U                 timerID,
                    TIMER_WORK_MODE       workMode,
                    TIMER_START_MODE      startMode,
                    INT8U                 operateMode )
{
      INT8U mask;
#if OS_CRITICAL_METHOD == 3
      OS_CPU_SR   cpu_sr;
#endif
      
      // 参数检查
      if( !(0<=timerID && timerID<TIMER_MAX_NUM) )
            return FALSE;
            
      if( !(workMode==TIMER_WORK_MODE_TIMER || workMode==TIMER_WORK_MODE_COUNTER) )
            return FALSE;
      
      if( !(startMode==TIMER_START_MODE_SOFT || startMode==TIMER_START_MODE_HARD) )
            return FALSE;
            
      if( !(0<=operateMode && operateMode<=3) )
            return FALSE;
      
      OS_ENTER_CRITICAL();

      mask = TMOD;
   
      if( timerID == TIMER0 )
      {
      	mask &= 0xf0;
      	
            if( workMode == TIMER_WORK_MODE_TIMER )
                  mask &= ~(1<<2);
            else
                  mask |= (1<<2);
            
            if( startMode == TIMER_START_MODE_SOFT )
                  mask &= ~(1<<3);
            else
                  mask |= (1<<3);
                  
            mask |= operateMode;
            
            TMOD = mask;

#if CFG_TIMER_DIVIDE_CLOCK==4
            // 设置定时器0的时钟为4分频
            mask = CKCON;
            mask |= (1<<3);
            CKCON = mask;
#endif

#if CFG_TIMER_DIVIDE_CLOCK==12
            // 设置定时器0的时钟为12分频
            mask = CKCON;
            mask &= ~(1<<3);
            CKCON = mask;
#endif
      }
      else if( timerID == TIMER1 )
      {
      	mask &= 0x0f;
      	
            if( workMode == TIMER_WORK_MODE_TIMER )
                  mask &= ~(1<<6);
            else
                  mask |= (1<<6);
                  
            if( startMode == TIMER_START_MODE_SOFT )
                  mask &= ~(1<<7);
            else
                  mask |= (1<<7);
            
            mask |= (operateMode<<4);
            
            TMOD = mask;

#if CFG_TIMER_DIVIDE_CLOCK==4
            // 设置定时器1的时钟为4分频
            mask = CKCON;
            mask |= (1<<4);
            CKCON = mask;
#endif

#if CFG_TIMER_DIVIDE_CLOCK==12
            // 设置定时器1的时钟为12分频
            mask = CKCON;
            mask &= ~(1<<4);
            CKCON = mask;
#endif
      }
      else
      {
      	OS_EXIT_CRITICAL();
            return FALSE;
      }
      
      OS_EXIT_CRITICAL();
      
      return TRUE;
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -