问题找到了,就是将0x3F8000的L0当作一个内存来用,其实他和0x008000的内存是同一个内存~~~~
请无视此贴……
问题比较复杂,一步一步说:
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 。
user4362943:
回复 HH Y:
你好,大神,现在用TMS320F28027芯片,由于程序比较大,0x008000-0x009000 这个空间不够用,能不能把一部分程序放到0x3f8000-0x3f9000中呢?非常感谢
问题找到了,就是将0x3F8000的L0当作一个内存来用,其实他和0x008000的内存是同一个内存~~~~
请无视此贴……
问题比较复杂,一步一步说:
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 。
HH Y:
回复 user4362943:
程序放到哪里都可以,只是一些比较特殊的,如Flash擦写,CLA,就一定要放到RAM中,或者追求运行速度快的,也应该放到RAM中。我的问题的根源,是芯片上同一块区域,起了两个名字,我没留意,另一个问题是没有把CLA用到的数据拷贝到对应的RAM中。027我不熟,不过我知道027没有CLA,只要确认那个地址范围是存在的,且没有和其他地址范围共同指向同一片区域,就可以放心使用。