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

📄 timer.c

📁 VxWorks BSP for S3C2510A
💻 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 + -