📄 tick.c.svn-base
字号:
/*
* ----------------------------------------------------------------
* Copyright c Realtek Semiconductor Corporation, 2002
* All rights reserved.
*
* $Header: /usr/local/dslrepos/boot71/loader/tick.c,v 1.1.1.1 2006/06/07 05:27:50 kaohj Exp $
*
* Abstract: Tick timer driver.
*
* $Author: kaohj $
*
* $Log: tick.c,v $* Revision 1.1.1.1 2006/06/07 05:27:50 kaohj* initial import into CVS*
* no message
*
* ---------------------------------------------------------------
*/
#include "board.h"
#define TC_BASE 0xb9c01000
#define TC0DATA (TC_BASE+0x20)
#define TC1DATA (TC_BASE+0x24)
#define TC0CNT (TC_BASE+0x28)
#define TC1CNT (TC_BASE+0x2C)
#define TCCNR (TC_BASE+0x30)
#define TCIR (TC_BASE+0x34)
#define CDBR (TC_BASE+0x38)
#define WDTCNT (TC_BASE+0x3C)
#define BSTMOUT (TC_BASE+0x40)
void init_timer(void)
{
/* disable clock */
*((unsigned long *)CDBR) = 0x00000000;
*((unsigned long *)TCCNR) = 0x00000000;
/* timer 1 interval as 0.5 ms */
*((unsigned long *)TC1DATA) = (1000*4*60*60) << 8; /* 1 hour */
*((unsigned long *)CDBR) = (CLOCKGEN_FREQ/1000/4) << 16;
*((unsigned long *)TCCNR) = (1<<28)|(1<<29);
}
unsigned long get_sys_time(void)
{
return (((1000*4*60*60) - (*((unsigned long *)TC1CNT)>>8))/4);
}
int timeout(unsigned long start, unsigned long ms)
{
unsigned long cur_ms = get_sys_time();
if(cur_ms>=start)
if((cur_ms-start) > ms)
return 1;
if(cur_ms<start) /* roll over */
if((cur_ms+(1000*60*60)-start) > ms)
return 1;
return 0;
}
void delay_msec(unsigned long ms)
{
unsigned long start = get_sys_time();
while(!timeout(start,ms));
}
unsigned long tick_getSysClkRate(void)
{
return CLOCKGEN_FREQ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -