昨天想用定时器做一个比较精确的延时函数,于是操作了一下,但发现程序没跑起来。以下是我的程序,麻烦版主跟各位朋友帮忙批评指正一下。谢谢大家
void delay();
void timer0(void);
unsigned int count;
main(void)
{
InitSysCtrl();
DINT;
IER=0x0000;
IFR=0x0000;
InitPieCtrl();
InitPieVectTable(); 以上这程序没有问题,别的试验也是这样用的
EALLOW;
PieVectTable.TINT0=&timer0; 将中断函数的地址付给TINT0
EDIS;
EnableInterrupts(); enable全部中断,我不确定定时器中断是否要调用此程序,但感觉调了也不会有错
SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; 使能timer0
IER|=M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7=1;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,15,1000000);
init gpio(); gpioinit这个子函数没贴出来,但是在别的试验验证过是正确的
EINT;
ERTM;
for(;;)
{
delay(10000);
LED1on;
LED2off;
delay(10000);
LED1off;
LED2on;
}
}
interrupt void timer0(void)
{
count--;
}
void delay(unsigned int x)
{
count=x; 将期望定时值付给count
CpuTimer0Regs.TCR.bit.TSS=0; 打开定时器
while(count); 等待定时器count的值减至0
CpuTimer0Regs.TCR.bit.TSS=1; 关闭定时器
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 清楚标志位为下次中断做准备
}
|