Part Number:TMS320F28379DOther Parts Discussed in Thread:C2000WARE
现查出的问题有两个
1使用FFT库函数的CFFT_F32t函数时需要使用到lib库中定义的旋转因子(FPU32CFFTtwiddleFactors),库中定义它所在的SECTION为FPUfftTables,我将它分配在RAMGS0。DEBUG时,将程序直接下载进RAM时,运行结果正确,但是当把程序烧入FLASH后,FPU32CFFTtwiddleFactors所指向的数组内容全部为0,使得CFFT_F32t结果不正确。
2在程序中我利用SCI与上位机通信,启用了SCI的FIFO,定义了SCI的接收中断,在RXFIFO长度为2时中断应被触发。在DEBUG模式(包括RAM和FLASH)下,SCI可以接收,但是将程序烧写如FLASH并脱离DEBUG模式后,有时会出现SCI无法接收到上位机发送数据的情况。
程序使用的CMD文件为C2000Ware_DigitalPower_SDK_3_00_01_00\c2000ware\device_support\f2837xd\common\cmd下的2837xD_FLASH_lnk_cpu1.cmd。
Green Deng:
你好,请问你的工程是使用的TI例程还是还是自己编写的程序?
看你的问题描述可能是工程中少了一步将代码搬移到ram中运行的过程。你的工程中有添加memcpy或者memcopy函数吗?
,
Yang Jiao:
是自己的程序,但是涉及到模块初始化的部分都是使用或参照了官方例程编写的。
设备初始化直接调用的Device_init()函数,在该函数中有
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
除此之外我并未定义其它memcpy或者memcopy函数。
,
Yang Jiao:
我在CMD文件中将.TI.ramfunc : {}改写为.TI.ramfunc : {-l c28x_fpu_dsp_library_coff.lib}可以让旋转因子加载到内存,但是此时加载到的位置不是我预想的地址(我想要加载到RAMGS0但是这样做会加载到RAMLS0),请问有什么方式可以使旋转因子加载到正确位置?
关于memcpy函数,除了在程序开始时调用一次memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize)外,之后是否还需要调用?
关于SCI接收的问题,仍然有时能收到上位机的数据,有时不能。
,
Green Deng:
cmd文件中.TI.ramfunc部分的代码应该包含了搬移至ram的什么区域,类似
RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
,
jh chen:
加载到RAM,只能在仿真状态下运行,需要将其加载到flash,然后运行时拷贝到ram。