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