定时器的使用
定时器/计数器用来计数外设时钟(PCLK)或外部时钟的周期,可以选择在规定的时间处产生中断或执行其他操作,由4个匹配寄存器的值决定。它也包含4个捕获输入,用来在输入信号变化时捕捉定时器的瞬时值,也可以选择产生中断。
void Timer0Init(void)
{
T0TC = 0; // 定时器设置为0
T0PR = 0; // 时钟不分频
T0MCR = 0x03; // 设置T0MR0匹配后复位T0TC,并产生中断标志
T0MR0 = (Fpclk / OS_TICKS_PER_SEC);
T0TCR = 0x01; // 启动定时器
}
切记:要在使用时复位中断,即T1IR = 1;
延时函数:
void delayMs(DWORD delayinUs)
{
T1TCR = 0x02;
/* reset timer */
T1PR = 0x00; /* set prescaler to zero */
T1MR0 = delayInUs * (Fpclk / 1000000);
T1IR = 0xff;
/* reset all interrrupts */
T1MCR = 0x04; /* stop timer on match */
T1TCR = 0x01; /* start timer */
/* wait until delay time has elapsed ,when on match,the register T1TCR will be zero*/
while (T1TCR & 0x01)
{
//OSTimeDly(10);
}
return;
}