📄 timer.c
字号:
#include "config.h"
#include "semLib.h"
int EnTimer(int timerNum, unsigned long enbit);
unsigned long ReadTimer(int timerNum);
int SetTimer(int timerNum, unsigned long timeData);
int EnTimerInt(int timerNum, unsigned long enbit);
int ClrTimerInt(int timerNum);
int SetTimerMode(int timerNum, int mode);
void DelayUs(int us);
void DelayMs(int us);
/******************************************************************
* 函数功能:使能定时器
* 输入参数:timerNum-定时器编号,0-定时器0 ... 5-定时器5
* enbit-1表示使能,0表示关闭
* 输 出:0-成功;非零-出错
*****************************************************************/
int EnTimer(int timerNum, unsigned long enbit)
{
if(enbit)
*(unsigned long *)(0xF0040000) |= 1<<(4*timerNum);
else
*(unsigned long *)(0xF0040000) &= ~(1<<(4*timerNum));
return 0;
}
/******************************************************************
* 函数功能:设置定时器初值
* 输入参数:timerNum-定时器编号,0-定时器0 ... 5-定时器5
* timeData-定时器初值
* 输 出:0-成功;非零-出错
*****************************************************************/
int SetTimer(int timerNum, unsigned long timeData)
{
*(unsigned long *)(0xF0040010+timerNum*8) = timeData;
return 0;
}
unsigned long ReadTimer(int timerNum)
{
return(*(unsigned long *)(0xF0040014+timerNum*8));
}
/******************************************************************
* 函数功能:使能定时器中断
* 输入参数:timerNum-定时器编号,0-定时器0 ... 5-定时器5
* enbit-1表示使能,0表示关闭
* 输 出:0-成功;非零-出错
*****************************************************************/
int EnTimerInt(int timerNum, unsigned long enbit)
{
if(enbit)
*(unsigned long *)(0xF0140008) &= ~(0x800000<<timerNum);
else
*(unsigned long *)(0xF0140008) |= 0x800000<<timerNum;
return 0;
}
/******************************************************************
* 函数功能:清除定时器中断
* 输入参数:timerNum-定时器编号,0-定时器0 ... 5-定时器5
* 输 出:0-成功;非零-出错
*****************************************************************/
int ClrTimerInt(int timerNum)
{
*(unsigned long *)(0xF0040004) |= 0x2<<timerNum;
return 0;
}
/******************************************************************
* 函数功能:设置定时器模式
* 输入参数:timerNum-定时器编号,0-定时器0 ... 5-定时器5
* mode-定时器的模式 0-间隔模式 1-触发模式
* 输 出:0-成功;非零-出错
*****************************************************************/
int SetTimerMode(int timerNum, int mode)
{
if(mode)
*(unsigned long *)(0xF0040000) |= 0x2<<(4*timerNum);
else
*(unsigned long *)(0xF0040000) &= ~(0x2<<(4*timerNum));
return 0;
}
/******************************************************************
* 函数功能:延迟
* 输入参数:us--微妙数
* 输 出:0-成功;非零-出错
*****************************************************************/
void DelayUs(int us)
{
int unit, value;
value = us<<8;
unit = us*CPLL_FREQ;
SetTimer(1, value);
while(1)
{
if ( (value - ReadTimer(1)) >= unit )
break;
}
}
/******************************************************************
* 函数功能:延迟
* 输入参数:ms--毫秒数
* 输 出:0-成功;非零-出错
*****************************************************************/
void DelayMs(int ms)
{
int unit, value;
value = ms<<18;
unit = ms*CPLL_FREQ*1000;
SetTimer(1, value);
while(1)
{
if ( (value - ReadTimer(1)) >= unit )
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -