void Delay(int time)
{
U32 val = (PCLK>>3)/1000-1; ------由前面知,PCLK频率为50MHz。此时val的值为6249,减1是因为,计数时包括0。所以相当于计数了6250次。
rTCFG0 &= ~(0xff<<8);
rTCFG0 |= 3<<8; //prescaler = 3+1
rTCFG1 &= ~(0xf<<12);
rTCFG1 |= 0<<12; //mux = 1/2
rTCNTB3 = val; -----由此算出频率为,1000Hz。计算为freq=50M/4/2/6249
rTCMPB3 = val>>1; // 50% ------占空为500hz
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); ------等待TCNTO3从6249到3124
while(rTCNTO3<val>>1); -------等待TCNTO3从3124到6249(自动重载后的值)
}; ------等待时间为:timeX1/1000,所以单位延时时间为1ms
}
自己: while循环中一共6250次(包括0),所以时间为1/6.25*6250(s)=1ms