最近在试着用定时器里面的实时定时器中断,不知道哪里设置的不恰当,老是无法进入中断 请高手指点哈: #include "timer.h" extern void AT91F_DBGU_Printk(char* buffer); void InitINT1(void)//中断源1的初始化 { AT91C_BASE_AIC->AIC_SMR[1]=0x00;//中断源1优先级设置 AT91C_BASE_AIC->AIC_SVR[1]=(unsigned int)INT1done;//中断入口函数 /* int tmp; __asm { MRS tmp,CPSR BIC tmp,tmp,#0x80 MSR CPSR_c,tmp } */ AT91C_BASE_AIC->AIC_ICCR=0x02;//中断标志清零 AT91C_BASE_AIC->AIC_IECR=0x02;//中断使能置位 } void InitTimer(void)//定时器初始化 { AT91C_BASE_ST->ST_RTMR= 0x8000;//65536个SCLK慢时钟周期 AT91C_BASE_ST->ST_IER=AT91C_ST_RTTINC;//选择实时定时器 } void EndTimer(void) { AT91C_BASE_ST->ST_IDR=0x01;//禁用周期间隔定时器状态 } void __irq INT1done(void) { AT91F_DBGU_Printk("INT1 done~~
"); if(AT91C_BASE_ST->ST_SR==AT91C_ST_RTTINC ) //判断是否是定时器的实时定时器中断 {TimerDone();}
AT91C_BASE_AIC->AIC_ICCR=0x02; AT91C_BASE_AIC->AIC_EOICR=0x02; }
void TimerDone(void) { AT91F_DBGU_Printk("Timer done~~
"); } 主函数调用如下: int tmp; char tmpbuf[36]; InitINT1(); InitTimer(); while(1) { __asm { MRS tmp,CPSR } sprintf(tmpbuf,"I_BIT=%d ST_CRTR=%d
",tmp&&0x80,(AT91C_BASE_ST->ST_CRTR)&0xFFFFF); AT91F_DBGU_Printk(tmpbuf); AT91F_Delay(50000); AT91F_DBGU_Printk("the main operate is running^^
"); } 请高手指点下,是不是我哪里设置的还缺少点啥 谢谢 |