专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 硬件开发

ARM程序中断后跑飞有关问题

发布时间:2010-06-13 21:44:41 文章来源:www.iduyao.cn 采编人员:星星草
求助ARM程序中断后跑飞问题
          小弟刚学ARM,自己编了下列程序,用ADS编译下载到裸板后,指示灯轮流闪,程序运行正常,给外部中断后,指示灯就停留在最后状态,程序不知道跑飞到哪去了,求指正。
#include   <string.h>
#include   <stdlib.h>
#include   <stdio.h>
#include   <stdarg.h>  
#include   "inc\44B.h "
#include   "inc\option.h "
void   Delay(unsigned   int);
void   __irq   keyboard(void);
void   Main(void)
{
       
rPCONC   =0xffff5555; //定义C口为I/O口,外接指示灯指示。
rPUPC   =   0x0000;                   //使能上拉电阻
rPDATC=0xffff; //赋值1

rPCONG   =0xffff;     //定义G口为中断功能
rPUPG   =0x0; //使能上拉电阻

rEXTINT=0x22222222;   //外部中断控制寄存器,电平触发方式。
rINTCON   =   0x5;       //enable   IRQ,and   non-vectored   interrupt   mode
rINTMOD   =   0x0;       //set   all   the   interruption   as   IRQ
pISR_EINT4567=(unsigned   int)keyboard;     //赋中断地址。
rINTMSK=~(BIT_GLOBAL|BIT_EINT4567);//屏蔽中断控制器,使能外部中断。
for(;;)               //指示灯轮流亮
{
        rPDATC   =0x0000;
Delay(50);
rPDATC   =0x0002;
Delay(50);
rPDATC   =0x0004;
Delay(50);
rPDATC   =0x0008;
Delay(50);
}
}
void   __irq   keyboard(void)
{
                unsigned   int   f;
              rINTMSK=(BIT_GLOBAL|BIT_EINT4567);
                Delay(200);
              for(f=0;f <7;f++)
        {
      rPDATC   =0x0000;
Delay(50);
rPDATC   =0x000e;
Delay(50);
}
rINTMSK=~(BIT_GLOBAL|BIT_EINT4567);
rEXTINTPND=0x00;
                rI_ISPC   =   BIT_EINT4567;
    return;
}
void   Delay(unsigned   int   x)
{
unsigned   int   i,j,k;
for(i=0;i <x;i++)
for(j=0;j <0xff;j++)
for(k=0;k <0xff;k++);
}

------解决方案--------------------
当发生irq中断后,pc被装载值0x18,然后读取执行0x18的执行,你看一看你的中断向量表设置好了没有,用断点跟踪一下!
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: