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

📄 tm_clk.c

📁 linux下三星4510的BSP驱动程序!已经试验成功
💻 C
字号:
#include "../inc/def.h"
#include "../inc/config.h"
#include "../inc/board.h"
#include "../inc/utils.h"
#include "s3c4510b.h"


U32 GetCpuClock(void)
{
	return fMCLK_MHz;
}

U32 GetMasterClock(void)
{
	return GetCpuClock();
}

int SetSysClock(void)
{
	return 0;
}

U32 GetSysClock(SysClock pSysClock[])
{
	pSysClock[0].name = "CPU";
	pSysClock[0].freq = GetCpuClock();

	return 1;
}

void SetSysClockPara(void *addr)
{
}

void GetSysClockPara(void *addr)
{
}
/*********************************************************
功能: 设置定时器工作模式,使能定时器0,间隔模式
     设置定时器0的记数值
     TMOD:定时器模式寄存器
     TDATA0:定时器的数据寄存器

*********************************************************/
void TimerInit(U32 HZ)
{
	//int i;
	
	outl(inl(TMOD)&0x38, TMOD);	//停止再启动,重装初值,加计数
	outl(inl(TMOD)|1, TMOD);	//enable timer 0, interval mode
	outl(GetCpuClock()/HZ, TDATA0);
	//outl(i, TMOD);
}

/*void ResetTimer(void)
{
	outl(inl(TMOD)&0x38, TMOD);
	
}*/
/*******************************************************
功能:延迟程序,单位MS
********************************************************/
void Delay(U32 ms)
{
	U32 i;
	
	i = inl(TCNT0)>>1;	//1000us/2
	
	outl(inl(TMOD)&0x38, TMOD);
	outl(inl(TMOD)|1, TMOD);	//停止再启动,重装初值,加计数
	
	while(ms--) {
		while(inl(TCNT0)<=i);
		while(inl(TCNT0)>i);
	}
}

/*******************************************************
功能:超时控制程序
********************************************************/
int WaitEventWithTimeout(int (*event)(void), int cond, U32 ms)
{
	int result;
	U16 half, ms_h;
	
	half = inl(TCNT0)>>1;		//1000us/2
	outl(inl(TMOD)&0x38, TMOD);
	outl(inl(TMOD)|1, TMOD);	//停止再启动,重装初值,加计数
	ms_h = 0;
	
	while(ms) {
		result = (*event)();
		if(cond) {
			if(result)				
				return 0;
		} else {
			if(!result)
				return 0;
		}
	
		if(!ms_h) {
			if(inl(TCNT0)>=half)
				ms_h = 1;
		} else {
			if(inl(TCNT0)<half) {
				ms_h = 0;
				ms--;
			}
		}
	}
	
	return -1;
}

/*************************************************************/
void RtcSetDay(TIME_STRUC *time)
{
}

void RtcSetWeek(TIME_STRUC *time)
{
}

void RtcSetTime(TIME_STRUC *time)
{
}

void RtcGetTime(TIME_STRUC *time)
{
}

⌨️ 快捷键说明

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