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