Board logo

标题: 仿真时无法进入中断 [打印本页]

作者: soxyh    时间: 2008-6-21 17:32     标题: 仿真时无法进入中断

用CodeWarrior调试,使用的P&E (USB MON08 Multilink Rev.D)工具,在仿真界面下,主程序仿真正确(把口线简单的拉低或拉高,测试口线电压);但一直无法进入中断,提示如下:

Error:At location FFDE_

Error:Attempt to use invalid or uninitialized memory

Error:interrupt processing failed.

程序:

include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908LJ12.h> /* include peripheral declarations */

void delay2(int num);

uchar key_set,key_up,key_down;

void main(void)
{
CONFIG1 = 0x09;
//CONFIG2 = 0x10;

//键盘输入设置及中断
DDRD = 0x8F; //PTD4,5,6作为输入,0,1,2,3,7输出
PTD &= 0x70; //PTD低四位输出初始值为0
KBSCR_MODEK = 1; //选择触发方式为下降沿和低电平
//Initialize KeyBoard(to prevent a false interrupt)
KBSCR_IMASKK = 1;
KBIER = 0x70;
KBSCR_ACKK = 1;
KBSCR_IMASKK = 0;


EnableInterrupts; /* enable interrupts */

//参数初始
key_set=0;key_up=0;key_down=0;

//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */


delay2(100);
}
}

interrupt void KBI_ISR(void)
{
KBSCR_IMASKK = 1; //屏蔽键盘中断

if(PTD_PTD4==0) //在中断服务程序中查询是由哪一个口引起的中断
{
PTD=0;
key_set=1;key_up=0;key_down=0;
}
if(PTD_PTD5==0)
{
PTD=0;
key_set=0;key_up=1;key_down=0;
}
if(PTD_PTD6==0)
{
PTD=0;
key_set=0;key_up=0;key_down=1;
}

KBSCR_ACKK = 1; //清除中断确认,避免误中断
KBSCR_IMASKK = 0; //不屏蔽键盘中断
}

void delay2(int num)
{
int delay_i,delay_j;

for(delay_i=0;delay_i<num;delay_i++)
for(delay_j=0;delay_j<num;delay_j++);
}

另外,在P&E_FCS_linker.prm中,添加了:
VECTOR 15 KBI_ISR

还有,好象其它中断,譬如定时器中断也不行,求老大们知道。


作者: strongchen    时间: 2008-6-24 15:28

KBI的中断号并非数据手册中的15。数据手册中没有把SWI算进去。建议用这样的格式比较不会出错:

VECTOR ADDRESS 0xFFDE KBI_ISR


作者: brucezhang    时间: 2008-7-3 22:12

提示: 该帖被管理员或版主屏蔽




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0