微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 程序出现复位问题?

程序出现复位问题?

时间:10-02 整理:3721RD 点击:
请教一下各位高手:
我编了一个小程序,处理定时器下溢中断,为什么中断返回时,老是出现程序复位?
下边是我的程序,请帮忙看看,问题出在哪里?

#include \"LF2407.H\"

void initial() //系统初始化程序
{
asm(\" setc INTM\"

;
*SCSR1=0x8104;
*WDCR=0x0E8;
*IMR=0x0002;
*IFR=0x0FFFF;
*MCRA=*MCRA&0x0FFFC;
*PADATDIR=*PADATDIR|0x0301;
}

void timer1() //通用定时器1初始化程序
{
*T1CON=0x0802;
*T1PR=0x4E20;
*T1CNT=0x00;
*EVAIMRA=*EVAIMRA|0x0100;
*EVAIFRA=*EVAIFRA&0x0100;
}

void T1INT() //定时器下溢中断处理程序
{ int flag;
flag=*EVAIFRA&0x0100;
if(flag!=0x0100)
{
asm(\" clrc INTM\"

;
return;
}
*T1CNT=0x00;
*EVAIFRA=*EVAIFRA&0x0100;
asm(\" clrc INTM\"

;
return;
}

void main() //主程序
{ initial();
timer1();
asm(\" clrc INTM\");
*T1CON=*T1CON|0x0040;
while(1)
{ } //等待中断
}

*WDCR=0x0E8;
我已经未使能看门狗了,觉着不是看门狗的事

我改了相应的寄存器设置 仿真时(设了两个断点)仍然出现复位现象----主程序中的断点每次都能运行到, 按理说应该每次中断返回到主程序while()等待下次中断才对
#include \"LF2407.H\"

void initial() //系统初始化程序
{
asm(\" setc INTM\"

;
*SCSR1=0x8104;
*WDCR=0x0E8; //关看门狗
*IMR=0x0002;
*IFR=0x0FFFF;
*MCRA=*MCRA&0x0FFFC;
}

void timer1() //通用定时器1初始化程序
{
*T1CON=0x0801;
*T1PR=0x4E20;
*T1CNT=0x00;
*EVAIMRA=*EVAIMRA|0x0200;
*EVAIFRA=0x0200;
}

void T1INT() //定时器1下溢中断处理程序
{ int flag;
flag=*EVAIFRA&0x0200; //此处设断点
if(flag!=0x0200)
{
asm(\" clrc INTM\"

;
return;
}
*T1CNT=0x00;
*EVAIFRA=0x0200;
asm(\" clrc INTM\"

;
return;
}

void main() //主程序
{ initial();
timer1(); //此处设断点
asm(\" clrc INTM\");
*T1CON=*T1CON|0x0040;
while(1)
{ } //等待中断
}
void interrupt nothing()
{
return;
}

下面是我的asm文件
.ref _c_int0,_nothing,_T1INT;
.sect \"IO\"

REVECT: B _c_int0
INT1: B _nothing
INT2: B _T1INT
INT3: B _nothing
INT4: B _nothing
INT5: B _nothing
INT6: B _nothing

因为我的中断服务程序  没有加关键字interrupt 导致中断不能原路返回

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top