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.

DSP2812进入非法中断

自己做的DSP2812板子,出现如下问题:用合众达510PLUS仿真器链接上DSP,LOAD完.out文件,然后go main,到此系统都正常,这时如果点击全速运行(F5)程序立即跳到非法中断里面,每次重新加载都是如此。但是如果在main()中的while(1)之前的初始化部分加个断点,go main后点击全速运行,程序正常停在断点处,这是再继续点击全速运行,程序就可以正常运行了。每次加载后调试都是这样,困惑了好久也没找到问题。期间我检查了cmd文件,没有地址重叠现象,主要是在合众达的开发板上没有这问题。基本排除了程序的问题,但是硬件部分的问题确实没有找到,还望专家帮忙解决下。谢谢

  • 不加断点加延时怎么样?

    用例程会否也有这个问题?

    简而言之,进入interrupt void ILLEGAL_ISR(void)  这个中断是因为CPU内核读到了非法指令,之所以会读到非法指令,一般是因为程序跑飞。

    程序跑飞不一定是软件问题,硬件上的时钟电源不稳定也会导致这个问题。

  • 1. 程序中是否使用了Delay_us()函数,如果是,是否已经copy到Ram中?

    2. 检查是否开了足够的Stack空间?

    3. 进入程序后,先单步运行,看看在哪条语句进入了非法中断?

    4. 程序中是否有越界的情况?例如定了一个一个数组是50Byte,在赋值的时候,或者在程序运行中,超过了50,非法越界?

    5. 检查中断是否正常?特别是中断号是否对应?

  • 你好,谢谢您的回答,我就测试一个点灯的程序,不涉及中断的操作,但是加载后全速运行就出现上面所述的问题,同样的程序在合众达的开发板上是没有问题的。感觉问题有可能出在时钟那块,我用的3.3V有源晶振,没有做1.8v的钳位处理直接连接到了2812的77管脚X1,引线之间也没有加100欧以下的电阻,TI给出的参考文档要求时钟信号电压不超过1.8V,但是板子还是可以使用的,不知道是不是这的问题,我再改版测试下,谢谢您

  • 那就主要查时钟和电源,我贴上一个eZDSP的F2812的原理图供参考。

    eZdspF2812 Schematic Rev. C.pdf
  • 您好,我测试了下电源,用的芯片是TPS86D318,原理图如下flash里面烧写了XF控制led闪烁的程序,上电led闪烁正常,说明DSP在工作,测试了下几块板子中的电源电压,+3.3V和+3.3VA电压都在3.27v-3.35v范围内,基本正常,1.8VA为1.78V-1.84V范围内,也算正常值,但是所有板子的+1.8V电压都降为1.57V,去掉DSP母板,单纯的测量318出来的电压都是正常的,应该DSP工作后内核电压不稳定,我想问下是不是原理图的设计问题,板子上没有考虑上电顺序,本来想通过电感控制上电顺序,是不是电感影响了内核电压 ,望指正!谢谢

  • 问题已经解决!谢谢各位!解决方式为:把所有的电感都去掉了,用焊锡直接连接,测试系统电源,IO电压和内核电压都符合供电电压要求,不再出现上述问题。

  • 有几点建议:

    1. 可以用TPS767D318的Reset信号接到C2000的RST引脚进行上电复位。我看楼主有2个Reset信号都是悬空的

    2. 关于TPS767D318给C2000的供电电路在附件中。这样就能保证上电时序,虽然楼主这样操作暂时没有问题,但会出现上电瞬间有些GPIO的状态不确定。

    Power_TMS320x281x Design 1 TPS767D3XX with precise SVS trip points.pdf
  • 使用了DSP28335_SWPrioritizedDefaultIsr.c这个文件和对应.h文件修改了中断优先级,EPWM2_INT_ISR中调用了一个子函数,执行完该子函数后返回PWM2_INT_ISR,但是SCIRXINTB_ISR中也调用一个子函数,但该子函数执行完没有返回到SCIRXINTB_ISR。请问这是什么原因?

  • 在用28335的时候,程序由RAM调试改为烧写FLASH时,会出现进入非法中断的情况,原因是使用了1中提到的延时函数,解除那两条语句的注释就OK了,

  • 在用2812的时候,也是遇到了这样的问题,程序由RAM调试改为烧写FLASH时,会出现进入非法中断的情况,通过单步定位到初始化AD的时候用到了延时函数。能帮解释一下原因吗??谢谢

    1. 程序中是否使用了Delay_us()函数,如果是,是否已经copy到Ram中?  这句怎么理解,如何操作呢。