目前正在做这样一个实验:系统正常工作几秒后即进入掉电模式,掉电的唤醒由RTC中断担任。我用定时器对正常工作状态计数,定时器每秒产生一次中断,10秒后控制系统进入掉电状态。RTC采用独立时钟源,每隔一分钟产生一次中断。为了便于观察,当系统正常工作时控制一个LED闪烁;每次进入掉电另一个LED也闪烁。问题是每次掉电唤醒所用的时间很不稳定,十几秒、二十几秒、三十几秒都有。这是怎么回事?实在是想不通!请解答!下面是俺的代码。<br /><br />#include "config.h"<br />uint8 i;<br /><br />void __irq IRQ_Timer0(void);<br />void __irq IRQ_Rtc(void);<br /><br />void __irq IRQ_Timer0(void)<br />{<br /> i=i+1;<br /> {<br /> if((IO0SET&(1<<8))==0)<br /> IO0SET=1<<8;<br /> else<br /> IO0CLR=1<<8;<br /> }<br /> if(i==10)<br /> {<br /> CCR=0x11;<br /> i=0; <br /> PCON=0x02; <br /> }<br /> T0IR=0x01;<br /> VICVectAddr=0x00;<br />}<br /><br />void __irq IRQ_Rtc(void)<br />{<br /> if((IO0SET&(1<<9))==0)<br /> IO0SET=1<<9;<br /> else<br /> IO0CLR=1<<9;<br /> ILR=0x01;<br /> VICVectAddr=0x00;<br />}<br /><br />int main(void)<br />{<br /> i=0;<br /> IO0DIR=(1<<8)|(1<<9);<br /> IO0SET=(1<<8)|(1<<9);<br /> IRQEnable();<br /> <br /> T0TC=0;<br /> T0PR=0;<br /> T0MCR=0x03;<br /> T0MR0=Fpclk/4;<br /> T0TCR=0x01;<br /> <br /> CCR=0x12; //对RTC进行设置<br /> CIIR=0x02;<br /> ILR=0x03;<br />// CCR=0x11;<br /> INTWAKE=1<<15;<br /> <br /> VICIntSelect=0x00;<br /> VICVectCntl0=0x24;<br /> VICVectCntl2=0x2D;<br /> VICVectAddr0=(uint32)IRQ_Timer0;<br /> VICVectAddr2=(uint32)IRQ_Rtc;<br /> VICIntEnable=(1<<4)|(1<<13);<br /> while(1);<br /> return 0;<br />}<br /> |
|