LGT POWER_off 模式下 RTC唤醒 RTC中断程序分析
#include <avr/io.h>#include <iolgt8f0xa.h>
#define F_CPU 16000000
#include <util/delay.h>
#include <avr/interrupt.h>
#define uchar unsigned char
#define uintunsigned int
#define ulong unsigned long
SIGNAL(RTC_vect)
{
if(RTCISR & (1 << WKUF)) {RTCSR = RTCSR & 0xfe; }//撤消 POWEROFF 模式
RTCISR&=~(1<<IF);//清除RTC溢出 //不能使用写1清除 PDF 中有问题
RTCTOPH=0X00;
RTCTOPM=0X02;
RTCTOPL=0X80; //RTCOP=0X000280AT128HZ5S
PORTA=(1<<PA1);//A1=1
_delay_ms(100);
PORTA&=~(1<<PA1);//A1=0
RTCSR|=(1 << POWOFF); // 系统掉电
}
int main(void)
{
CLKPR=0X80;
CLKPR=0X80;
DDRA=0XFF;
PORTA=0X00;
PMCR |= (1 << RC1KEN); //ENRC1K
_delay_ms(5); //等待内部RC1K稳定
RTCTOPH=0X00;
RTCTOPM=0X02;
RTCTOPL=0X80; //RTCOP=0X0002080AT128HZ5S
RTCISR&=~(1<<IF);//清除RTC溢出 //不能使用写1清除 PDF 中有问题
RTCISR|=(1<<IEN);//使能RTC中断
SREG|=0X80; //开总中断
while(!(RTCSR & 0x80)); //判断是不是写入有效
//RTCSR |= (1 << CWEN); //使能RTC唤醒
//RTCSR |= (1 << LOAD); //加载计数
//RTCSR |= (1 << EN); //使能RTC//注意这个地方 PDF中是CEN头文件配置是EN
RTCSR|=(1 << CWEN)|(1 << LOAD)|(1 << EN)|(1 << POWOFF);
while(1);
}
上面这程序
在RTCSR|=(1 << CWEN)|(1 << LOAD)|(1 << EN)|(1 << POWOFF);
这个地方不能加入(1 << POWOFF),让LGT 进入掉电模式,否则LGT一直在POWER-OFF模式 进入不了中断
如果不让LGT 进入POWER-OFF模式,可以进入中断,问题又来了:
理想状态是POWER-OFF模式下, 中断程序每5秒进入一次让PA1闪一下,实际引用中采集下外设信息后马上再进入POWER-OFF模式
现在的问题是:头5秒LGT是POWER-OFF模式,观察电流能看到,后5秒LGT是正常工作模式。
贴先上来。继续研究程序。。
晚上又来折腾了2个小时,还是和下午一样的结果。。。
呼叫蛋痛猫。呼叫蛋痛猫。 在中断程序中RTCSR|=(1 << POWOFF);这句前加上while(!(RTCSR & 0x80)); 试试。 shoot_123 发表于 2013-3-24 22:41 static/image/common/back.gif
在中断程序中RTCSR|=(1
下午发帖的时候 在没加while(!(RTCSR & 0x80));
晚上想来想去,有加上 效果还是一样。 while(!(RTCSR & 0x80)); //判断是不是写入有效
//RTCSR |= (1 << CWEN); //使能RTC唤醒
//RTCSR |= (1 << LOAD); //加载计数
//RTCSR |= (1 << EN); //使能RTC//注意这个地方 PDF中是CEN头文件配置是EN
RTCSR|=(1 << CWEN)|(1 << LOAD)|(1 << EN);
// while(!(RTCSR & 0x80)); //判断是不是写入有效
// RTCSR|=(1 << POWOFF);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
while(1)
{ if((RTCISR&(1<<IF))==0x02)
{
PORTA=(1<<PA1);
_delay_ms(1000);
// RTCISR|=(1<<IF);//可以清0
RTCISR&=~(1<<IF); //不能清掉
if((RTCISR&(1<<IF))!=0x02)
PORTA&=~(1<<PA1);
}
} 进入POWEROFF RTC唤醒后的中断是不执行的。
页:
[1]