This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

dsp28377d跑飞进入非法中断illegal isr

最近使用28377d与lan9252进行ethercat通讯,程序在线运行中会进入非法中断,而非法中断触发一个是跑到了codestart disable watchdog,另一个是读到0x240001这个非法指令。而我程序初始化进行了disabledog(),触发是在我程序中有一行通过外部中断进行EMIF写,该行程序很普通,其他地方也有调用,去掉该行虽然可以不进入非法中断,但该行是为了建立与lan9252通讯时比不可少的。我程序中主要使用了time0,两个外部中断xint3、xint4,每次xint4触发会使xint3同时触发,这里有点麻烦。。。。在每个中断触发函数中都失能了其他中断触发。目前cmd文件按照参考的cmd配置,stack大小设置0x600,heep大小0x200,内存感觉够了,未使用延时函数。

如果说硬件问题,那岂不是不管什么程序跑着跑着就飞了。。。但我去掉那行代码就是可以持续运行(ps:虽然不能实现程序功能)

该问题困扰了我半个月了,按照网上说的也尝试过,未果。请大神们提供技术支持!!!感激不尽,如果真能解决,愿意有偿啊,还有有没有可以在illegal isr中添加什么代码定位每次跑飞前运行的代码呢??

  • 请您参考一下下面链接的定位方法,您可以尝试一下

    e2e.ti.com/.../140885



    I've found that following ISR handler is easier for debugging such problems. When the CPU halts on ESTOP0 or place the program counter (PC) on NOP and continue executing. The ISR handler should exit and jump(return) to the location that caused TRAP ISR to generate:

    void interrupt ILLEGAL_ISR(void)    // Illegal operation TRAP
    {
        // Insert ISR Code here
        // Next two lines for debug only to halt the processor here
        asm ("  ESTOP0");
        // in order for code to halt also when not in debug mode
        asm ("  B   $,UNC");
        // place PC here to continue the execution
        asm ("  NOP");
    }
  • 最好将代码也帖一下 看看有没有指针等跑飞的情况
    工程属性中的编译优化等级调一下试试
  • 感谢抽出时间回答,您的回答也给了我更多思路。目前已经找到问题了,外部中断程序中有一些函数会触发再次中断,而那些函数里又有开启全局中断。。。。。这就导致不停的进中断??应该不会吧,不是还得应答才行?那会不会又进入定时中断呢。。。。最后把中断函数里面的开启全局中断注释掉就可以了。

  • 应为是官方的模板程序,我更改的地方并不多,目前已将找到问题了,可以认为中断嵌套?
  • 恩恩,已将解决了。
x 出现错误。请重试或与管理员联系。