问题比较复杂,一步一步说:
F28035芯片,CCS5.5,实验设备有TI原装的DRV8412-C2-KIT,原来参照controlSuite的例子 《development_kits\TMDSIACLEDCOMKIT_v1.1\IsoACLighting-F28027-DMX512 》 将SCI中断服务函数放到RAM内存中运行,一切正常。不过CMD文件是用另一个例子《development_kits\DRV8412-C2-KIT_v131\GUI_project 》 中的 “F28035_FLASH_DRV8412GUI.CMD”。
后来由于自己的程序需要使用CLA,并且使用了CLAmath.Lib,参阅了例子 《 development_kits\HVMotorCtrl+PfcKit_v2.1\HVPM_Sensorless_CLA_F2803x 》,最后整合出来新的CMD文件(另见附件)。
现在问题来了,首先,如果SCI的中断服务程序还是拷贝到RAM中的话,一进入中断就出错,出错表现为跳到例程中的”interrupt void ISR_ILLEGAL(void)“函数中。如果注释掉 #pragma CODE_SECTION (sciaRxIsr, "ramfuncs") 这个语句,就能正常运行。
还有一个问题,在仿真模式下,CLA 和 CLAmath函数都能正常运行,但是,如果断电后再启动芯片,CLA就出错了。通过主CPU的中断函数输出,可以判断CLA还是在运行的。重新在CCS中连接上芯片后,观察CLA中的变量,发现出错的是CLAmath的函数CLAsinPU。
所以综合前面那个SCI中断函数的问题,感觉就是,可能CMD文件和相关的代码没处理好,现在只要是运行时要拷贝到Ram内存的东西,除了CLA 拷贝到 progRam没问题外,其他的都有问题。
实在研究不出来,请求专家帮忙看看。
参照例程,CLA的拷贝函数是
memcpy(&Cla1funcsRunStart, &Cla1funcsLoadStart, (Uint32)&Cla1funcsLoadSize);
SCI的拷贝函数是
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
编译时没有任何错误,最原始的工程项目是development_kits\DRV8412-C2-KIT_v131\GUI_project 。
|