3788|6

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

s3c44b0x 对于中断的一点疑惑,并且自己写的中断不进服务程序求助 [复制链接]

首先我有一些疑问,如果产生EXT0的中断,cpu处理的过程是不是应该首先跳转到0x18执行IRQ中断服务程序,执行完以后在跳转到0x20执行EXT0的服务程序?这个跳转到0x20是cpu自动完成的么?还是要把代码写到0x18的IRQ中断服务程序实现的?执行0x18和执行0x20有没有先后次序的?如果我在0x18处没有写任何服务程序会发生什么?我找了很多资料都说的不清不楚的。为了测试我的疑惑,我写了一些代码,如下。现在的问题是当有中断产生时,INTPEND,I_ISPR都会有相应的反应,但是不会进入中断服务程序。不知道是不是有什么还没有进行设置?请斧正。不胜感激。
主要程序如下:
void __irq EINT4567Isr(void)
{
        Uart_Printf("interrupt happen\r\n");
}

void __irq IRQIsr(void)
{
        Uart_Printf("IRQ Interrupt\r\n");
}

void __irq TIMER1Isr(void)
{
        Uart_Printf("TIMER1 Interrupt\r\n");
}

void Isr_Init(void)
{

   
    rINTCON=0x1;          // Vectored Int. IRQ enable,FIQ disable  
    rINTMOD = 0;
    rINTMSK=BIT_GLOBAL;                //disabled int
   //以下针对特定的中断口做初始化   
    rPCONG = rPCONG | 0xff00; //set GPG[7:4] interrupt
    rPUPG = rPUPG & 0x00;//pull up resistor disable
    setLLInt(4);
    setLLInt(5);
    setLLInt(6);
    setLLInt(7);
   // rEXTINT &= 0xffff;
    rINTPND=0;
    rEXTINTPND=0;
    rINTMSK =~(BIT_GLOBAL|BIT_EINT4567|BIT_TIMER1);          // 4567 interrupt available. others masked
    rI_ISPR=0;
   pISR_EINT4567=(unsigned)EINT4567Isr;
   pISR_TIMER1=(unsigned)TIMER1Isr;
   pISR_IRQ=(unsigned)IRQIsr;
}
void Main(void)
{
  Port_Init ();  
  Uart_Init (0,115200);
  Isr_Init();
while(1)
{

}

}

最新回复

已经解决。原因是外部中断4567有两个寄存器来控制中断是否发生。extintpnd和intpnd,并且extintpnd会影响intpnd,两个都要清除后才能退出中断。谢谢各位!  详情 回复 发表于 2009-4-11 17:09
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
还有一点,我使用的是u-boot作为bootload的,程序的执行是使用bootload加载程序到内存中然后执行,对于0x18,0x20等中断向量表在u-boot中应该已经初始化过了,那我的程序中的初始化代码还有用么?谢谢!
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
自己解释一下,44B0的IRQ中断有两种装断模式 一种是非向量IRQ中断,一种是向量IRQ中断。当有两个中断同时发生时,前者是由软件方式来判断决定先执行那个中断服务,而后者是由硬件逻辑来决定的。0x00000018是非向量IRQ中断入口处,刚刚在网上找到的。谢谢。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
经过检查,中断向量表设置都是正确的,debug时如果把pc直接设置到中断表处执行能够进入服务程序,但是程序结束后退出不能回到中断前的位置。现在的问题就是发生中断时不会自动跳到中断表的相应位置。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
你上面的中断程序执行后没有清除中断位,是不是因为这个原因,中断就一直执行退不出来。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
我已经改过了,加入rI_ISPC|=BIT_EINT4567;还是没有用。网上说jtag调试模式下应该是不进中断的。我直接下载到片上执行的时候rINTCON=0x1;会直接重启,rINTCON=0x5;能够中断但是不会退出。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
已经解决。原因是外部中断4567有两个寄存器来控制中断是否发生。extintpnd和intpnd,并且extintpnd会影响intpnd,两个都要清除后才能退出中断。谢谢各位!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表