下面是我写的一个MINI2440上的一个定时器4延时程序。US级别的延时。但是发现延时时间是乱的。麻烦高手帮我分析下!!!
void BSP_DelayUsInitial (void)
{
TCFG0 &= ~(0xFF<<8) ;
TCFG0 |= 33<<8 ; //TCFG0 8到15决定time2 time3 time4的 第一级分频值。 第一级分频系数为34
TCFG1 &= ~(0xf0000) ;
TCFG1 |= 0x00<<16 ; // 第二级分频系数为2
}
BSP_DelayUs(u32 DelayUsTime )
{
TCNTB4 = DelayUsTime ;//PCLK 为68M. 计算定时器计数频率=PCLK/(TCFG0+1)*TCFG1 =1M
TCON |= (1 << 21) ; //先手动加载 TCNTBO
TCON &=~(1<<22);
TCON &=~(1<<21);
TCON |= (1<<20); //启动定时器 不更新 TCNTB4 不自动重载
while(TCNTO4>=1);
TCON &= ~(1<<20); //关闭定时器
}