📄 timer.c
字号:
/*
* file:
* timer.c
* description:
* timer controller code.
*/
void timer_ctrl_init(unsigned long pclk, int ms)
{
rTCON &= ~(0x0f);
/* TCLK = 2M */
rTCFG0 &= ~(0xff);
rTCFG0 |= (unsigned int)(pclk/2000000) - 1;
/* TCLK / 2 = 1M */
rTCFG1 &= ~(0x0f);
rTCNTB0 = (ms * 1000) - 1;
rTCMPB0 = 0;
rTCON |= (0x0b);
rTCON &= ~(0x0f);
}
int timer_ctrl_get_irq(void)
{
int bit, irq;
bit = BIT_TIMER0;
for(irq=0; irq<32; irq++)
{
if(bit & 0x1)
break;
bit >>= 1;
}
return irq;
}
unsigned int timer_ctrl_load_value(void)
{
/* resolution of 1us */
return rTCNTB0 + 1;
}
unsigned int timer_ctrl_get_count(void)
{
/* resolution of 1us */
return rTCNTO0;
}
void timer_ctrl_start(void)
{
/* Start timer */
rTCON &= ~(0x0f);
rTCON |= (0x09);
}
void timer_ctrl_udelay(unsigned long usec)
{
unsigned long now, time = 0;
unsigned long last = rTCNTO0;
while(time < usec)
{
now = rTCNTO0;
if(now <= last)
time += last - now;
else
time += rTCNTB0 + last - now + 1;
last = now;
}
}
/* end of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -