主题 : 将2440test中延时程序改为1us,求各位兄弟指正 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 124338
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2016-04-12
最后登录: 2017-11-02
楼主  发表于: 2016-05-14 20:09

 将2440test中延时程序改为1us,求各位兄弟指正

求各位兄弟看一下这个延时程序,是2440test中的,原程序是延时1ms,现在我将其改为延时1us,下面的程序是我改动之后的,按照原理来看我觉得没有问题,可是经过示波器查看发现延时不对,希望各位兄弟可以帮忙看一下,在此谢过了!!

void Delay(int time) /**1us***/ PCLK=50Mhz
{
U32 val = (PCLK>>3)/1000000-1;   //改动之处
//Uart_Printf( " HMC5883L= %d\n", val );
rTCFG0 &= ~(0xff<<8);
rTCFG0 |= 3<<8; //prescaler = 3+1
rTCFG1 &= ~(0xf<<12);
rTCFG1 |= 0<<12; //mux = 1/2

rTCNTB3 = val;
rTCMPB3 = val>>1; // 50%
rTCON &= ~(0xf<<16);
rTCON |= 0xb<<16; //interval, inv-off, update TCNTB3&TCMPB3, start timer 3
rTCON &= ~(2<<16); //clear manual update bit
while(time--) {
while(rTCNTO3>=val>>1);
while(rTCNTO3<val>>1);
};
}