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.

TMS320F28030 换过头文件后 非法中断



以前一直用的1.21版的2803x的头文件,但1.21版的头文件对寄存器的支持不完整,故而换了control SUITE里的1.27版文件。

问题也由此而来,原本用1.21头文件正常执行的工程,换过了1.27之后,在执行 “void DSP28x_usDelay(Uint32 Count)” 函数之后,程序跑入了非法中断ILLEGAL_ISR()。

看过网上给出的解决办法,增加了堆栈长度,无果。

另一个解决办法是确保用mem_copy函数将该代码保存到了RAM区,可是,1.27的文档里,根本没有DSP2803x_MemCopy.c这个文件,我用的是1.21的文件,不知道这是不是产生非法中断的原因。

求大侠帮助。

  • 问题不在于头文件,在于你提到的那个函数。

    v121里用于memory copy的函数是C标准库函数MemCopy(),而v127里用到的是TI提供的memcpy函数,由于v127例程里没有使用v121的MemCopy()库函数,自然就没有包含其定义,也即你提到的“1.27的文档里,根本没有DSP2803x_MemCopy.c这个文件”,所以我猜想,你应该是直接将v127的头文件文件夹替换了你之前的v121的头文件文件夹,在不修改代码的情况下,简单地将之前v121版本里存在的DSP2803x_MemCopy.c文件copy到v127相同的文件夹下即可。

  • 十分感谢你的回复。

    我确实是按照你说的“直接将v127的头文件文件夹替换了之前的v121的头文件文件夹”,并替换了与之相对应的c文件和cmd文件,所以1.27里没有的DSP2803x_MemCopy.c文件也就自然保留了1.21的文件,也就相当于将1.21版本里存在的DSP2803x_MemCopy.c文件copy到了1.21相同的文件夹。

    而我上面的问题,就是在这种情况下出现的。

  • 你的意思是问题没有解决?

    那你用于内在拷贝的函数是v121里的呢还是v127的?两者有没有对应起来?

  • 不是没有解决,而是我的问题就是在你所讲述的方法的前提下出现的。

    你讲的“用于内在拷贝的函数”是指MemCopy函数么?这个函数,v127里没有,我用的是v121里的。

  • 是的,那么你能确保你的程序里也只有MemCopy这个函数,而没用v127的那个函数么?

    还有,你确定一下flash的初始化在两个版本是否相同,以及在上面那条语句之前的所有语句和函数在两个版本下是否也一样?