📄 timer.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 + -