首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

GT60单片机怎样用RTI从STOP2模式恢复到主程序中

GT60单片机怎样用RTI从STOP2模式恢复到主程序中

我想让单片机进入stop2模式然后用RTI唤醒。我的程序看起来是能够进入RTI中断里的,我也重新复位各个寄存器了,可还是没用,然后程序就跑飞。

请高手指点一下
“在进入STOP2前,应该将需要保存的寄存器设置值保存在RAM中。唤醒后,应该先将保存的值回送至寄存器”。

这句话什么意思,我唤醒后,重新给寄存器赋值难道不可以么?,比如SPMSC2=0x03;
我就是这样做的,可还是不成,下面是我的源代码,你帮着给看看,谢谢了。 #include /* for EnableInterrupts macro */ #include /* include peripheral declarations */ void main(void) { unsigned long i; i=0; SOPT = 0x73; IRQSC = 0x16; //外部中断 Pin Enable, IE, IRQ CLR, negative edge ICGC1_RANGE = 1; /* Range High. */ ICGC1_OSCSTEN = 0; /* Osc enabled in off mode. */ ICGC1_CLKS = 0x00; /* Self clocked. */ SRTISC = 0x17; SPMSC1 = 0; SPMSC2=SPMSC2|0x03; //STOP2 PTDDD_PTDDD0=1; PTDDD_PTDDD3=1; EnableInterrupts; asm stop SOPT = 0x73; IRQSC = 0x16; //外部中断 Pin Enable, IE, IRQ CLR, negative edge ICGC1_RANGE = 1; /* Range High. */ ICGC1_OSCSTEN = 0; /* Osc enabled in off mode. */ ICGC1_CLKS = 0x00; /* Self clocked. */ PTDDD_PTDDD0=1; PTDDD_PTDDD3=1; EnableInterrupts; while(1){ for(i=0;i<1000;i++); PTDD_PTDD0=0; PTDD_PTDD3=1; for(i=0;i<1000;i++); PTDD_PTDD0=1; PTDD_PTDD3=0; } } interrupt 25 void rtii(){ long int ii; static int c; SOPT = 0x73; IRQSC = 0x16; //外部中断 Pin Enable, IE, IRQ CLR, negative edge ICGC1_RANGE = 1; /* Range High. */ ICGC1_OSCSTEN = 0; /* Osc enabled in off mode. */ ICGC1_CLKS = 0x00; /* Self clocked. */ SRTISC_RTIACK=1; while(!SPMSC2_PPDF); SPMSC2_PPDACK=1; c++; EnableInterrupts; SPMSC1 = 0; SPMSC2=SPMSC2|0x03; //STOP2 PTDDD_PTDDD0=1; PTDDD_PTDDD3=1; for(ii=0;ii<1000;ii++); PTDD_PTDD0=0; PTDD_PTDD3=1; for(ii=0;ii<1000;ii++); PTDD_PTDD0=1; PTDD_PTDD3=0; if(c<3) { SRTISC = SRTISC|0x17; asm stop } else{ SRTISC_RTIE=0; SRTISC_RTIS=0; } EnableInterrupts; }
这个程序肯定可以进入stop2模式,然后也能到达RTI的中断,可以从电流的变化看出来,调试窗口则看不到进入中断中断,大概是因为已经进入了STOP模式的原因。可是就是无法从RTI中断程序里恢复到主程序,而且RTI中断里的程序一行好像都没有执行。
我的STOP3程序就是可以的
我看了AN2493可惜全是汇编,正在努力往C上移植。
请问怎样看编译后的RTI矢量地址
返回列表