|
我需要控制9313芯片就用了定时器3来定时,代码如下
定时1ms,从示波器看很准确。
void Delay(int time) //1ms
{
/* unsigned int val = (PCLK>>3)/1000 - 1; //1ms
v_pPWMregs->rTCFG0 &= ~(0xff<<8);
v_pPWMregs->rTCFG0 |= 3<<8; //prescaler = 3+1
v_pPWMregs->rTCFG1 &= ~(0xf<<12);
v_pPWMregs->rTCFG1 |= 0<<12; //Timer3 mux = 1/2
v_pPWMregs->rTCNTB3 = 0;
// v_pPWMregs->rTCMPB3 = val;
v_pPWMregs->rTCON &= ~(0xf<<16);
v_pPWMregs->rTCON |= 0xb<<16; //interval, inv-off, update TCNTB3&TCMPB3, start timer 3
v_pPWMregs->rTCON &= ~(2<<16); //clear manual update bit
while(time--) {
while(v_pPWMregs->rTCNTO3>=val>>1);
while(v_pPWMregs->rTCNTO3>1);
};*/
}
定时1us,从示波器看总是在2us-3us,不准确。
void Delay_us(int time) //1us
{
unsigned int val = (PCLK>>1)/1000000 - 1; //1us
v_pPWMregs->rTCFG0 &= ~(0xff<<8);
v_pPWMregs->rTCFG0 |= 0<<8; //prescaler = 3+1
v_pPWMregs->rTCFG1 &= ~(0xf<<12);
v_pPWMregs->rTCFG1 |= 0<<12; //Timer3 mux = 1/2
v_pPWMregs->rTCNTB3 = 0;
// v_pPWMregs->rTCMPB3 = val;
v_pPWMregs->rTCON &= ~(0xf<<16);
v_pPWMregs->rTCON |= 0xb<<16; //interval, inv-off, update TCNTB3&TCMPB3, start timer 3
v_pPWMregs->rTCON &= ~(2<<16); //clear manual update bit
while(time--) {
while(v_pPWMregs->rTCNTO3>=val>>1);
while(v_pPWMregs->rTCNTO3>1);
};
}
用这两个函数来加入到控制音频的驱动代码中达到了音量等级改变的目的,可是新问题出现了,
每当用到这块的应用后,搞的应用层OnTimer异常,原来的1s定时变的很快,请帮我分析分析
这段代码实现延时存在什么问题吗,怎么会影响系统时钟呢,郁闷中......
|
|