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

仿真时无法进入中断

仿真时无法进入中断

用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

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

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

VECTOR ADDRESS 0xFFDE KBI_ISR

海纳百川  有容乃大
提示: 该帖被管理员或版主屏蔽
返回列表