您好!
我用的芯片是TMS320F28335 ,在CCS5.3版本下,Flash加载RAM有问题。请给予解决方法。
主要外部表征:
1、主函数中MemCopy和InitFlash放置按照TI例程,子函数中未设置 FlashRegs.FPWR.bit.PWR = FLASH_STANDBY; 则程序不能有效在RAM中执行。
2、主函数中MemCopy和InitFlash放置在系统设置之后,程序第一次下载,能在RAM中执行(通过GPIO输出查看加载RAM与不加载的时间对比),如果不掉电,程序能够继续在RAM中执行,但如果DSP掉电后,重新上电,则程序执行时间明显较长,可以看出不在RAM中执行。
加载方法:
1、flash加载至ram的方法为:
CMD文件采用的CCS3.3下的标准F28335.cmd,DSP2833x_Headers_nonBIOS.cmd
CMD文件采用的CCS3.3下的标准F28335.cmd,DSP2833x_Headers_nonBIOS.cmd
通过查map文件,可以看到需要的程序段和变量已经加载到RAM区,并且程序运行过程中程序段已经处于RAM中。
main函数初始化时加入,且在最初系统初始化以后放置:
void main(void)
{
InitSysCtrl();
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*1) = 75.0 MHz
SysCtrlRegs.LOSPCP.all = 1; // LOPCLK = SYSCLKOUT/2 = 150/(2*1) = 75.0 MHz
EDIS;
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();
EALLOW;
SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*1) = 75.0 MHz
SysCtrlRegs.LOSPCP.all = 1; // LOPCLK = SYSCLKOUT/2 = 150/(2*1) = 75.0 MHz
EDIS;
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();
………….
}
然后我将想要加载至RAM中的函数在定义前加入
#pragma CODE_SECTION(函数名,"ramfuncs");
#pragma CODE_SECTION(函数名,"ramfuncs");
通过查看例程DSP2823x_examples_ccsv4\flash_f28235\,在中断函数中有以下设置。
// Put the Flash into standby
FlashRegs.FPWR.bit.PWR = FLASH_STANDBY;
FlashRegs.FPWR.bit.PWR = FLASH_STANDBY;
是否CCS5.3中必须设置此项,才能激活待机模式,Flash加载RAM才有效?
未经允许不得转载:TI中文支持网 » 关于CCS5.3 Flash加载Ram的问题
相关推荐
- TIDM-DC-DC-BUCK: Design files can't download
- TMS320F28335: Error enabling this function: This task cannot be accomplished with the existing AET resources.
- TMS320F280049: 芯片在运行过程中莫名出现复位
- TMS320F28035: Ti28035芯片看门狗复位偶尔失败问题
- TMS320C28346: 28346 DMA和CPU同时访问冲突问题
- TMS320F28335: 是否有对应的SDL 软件诊断库?
- LAUNCHXL-F28069M: J3,5V引脚的作用是什么;在ADC采样过程中,需要怎样接外接信号?
- TMS320F28335: C2000™︎ 微控制器论坛