这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » VxWorks下S3C2410中断问题

共5条 1/1 1 跳转至

VxWorks下S3C2410中断问题

菜鸟
2007-08-06 18:05:44     打赏
       最近正在调试S3C2410板子,操作系统采用VxWorks。调到外中断时遇到一个很棘手的问题:
       先是使用EINT0作为外部中断源,用按键触发一个外部中断,用intConnect()函数挂接中断服务程序,触发方式是下降沿触发,程序运行正常,能够正确进入中断;然后改为低电平触发,用AXD跟踪调试,发现进入中断后程序跑飞了,地址乱了。
       另外,把外部中断源改为EINT11,初始化后连接ISR,发现不管是低电平还是下降沿都无法进入ISR,同样,用AXD跟踪,也是跑飞的现象,pc指针跑到ARM的高地址空间(保留空间)去了。
      小弟已经卡在这个问题上好多天了,一直搞不定,急切盼望各位大侠替小弟解围,在此先谢过了!!!
   



关键词: VxWorks     S3C2410     中断     问题    

菜鸟
2007-08-06 21:36:44     打赏
2楼
中断的调试是会稍微麻烦一点,可以考虑一步一步走:
首先把ISR的所有代码全部删空,只保留中断确认(标识清除,如果是下降沿触发的话)的代码,在中断中log一条消息到控制台。如果可以成功,则证明操作系统响应中断没有问题。
接下来再在ISR中增加ISR处理的代码,如果代码执行导致问题出线,则可以说明是ISR程序实现本身的问题。
另外,需要注意的是,如果启用了MMU的话,确认中断向量表的地址是可以访问的。
最后,程序跑飞,如果不是硬件问题,一般有几种可能:堆栈溢出或者是发生了CPU异常,或者程序执行导致了操作系统主动复位。所以,可以从这些方面找原因,确认中断栈够用,在CPU的其它异常处理函数里面加一些“钩子”,看跑飞之前是否进入这些地方,发生了异常。
有些硬件调试器,在CPU不停切换模式的情况下,可能会发生一些想不到的问题,可以考虑先把硬件调试器放在一边,用软件的方法来测试中断。

菜鸟
2007-08-07 10:22:04     打赏
3楼

      谢谢yaopg版主!我按你提供的方法测了一下中断,问题依旧存在,现把代码贴出来,请您帮忙分析一下:

/*注:有关引脚的设置和中断的模式、触发方式等已在其他函数中完成*/

STATUS irqtest(void)
{
  (*(volatile unsigned *) rEINTPEND) = (*(volatile unsigned *) rEINTPEND);/* Clear pend */
  (*(volatile unsigned *) rEINTMASK)  &=  ~(1<<11);  /* Enable EINT11 */
  
 /* Connect interrupt vector to isr */
  if(intConnect(INUM_TO_IVEC(5), isr11, 0) == ERROR)
 {
  return ERROR;
 }

  intEnable(5); /* Enable EINT8_23 */

  while(1) ;

  return(OK);
}

void isr11(void)
{
    logMsg("got an interrupt\n",0,0,0,0,0,0);
 
 (*(volatile unsigned *) rEINTPEND) |= (1<<11); /* Clear EINT11*/
 (*(volatile unsigned *) rSRCPND) |= (1<<5);    /* Clear EINT8_23*/
 (*(volatile unsigned *) rINTPND) = (*(volatile unsigned *) rINTPND);
}


菜鸟
2007-11-04 16:50:31     打赏
4楼

EINT8_23的INTMASK有没有打开?估计是没有吧


院士
2007-11-05 10:55:47     打赏
5楼
YAOPG
是不是失踪了?

共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]