TI中文支持网
TI专业的中文技术问题搜集分享网站

C55x怎么在外部SDRAM上运行程序?

平台:C5515

操作系统:DSP/BIOS

IDE:CCS 6.0

当前程序运行正常,基本占满了片上的DARAM和SARAM,为了后续增加功能,需要使用外挂的SDRAM来运行程序。

step1.查看编译生成的.map文件,发现.text段最大,为0x000226c0字节。

step2.打开.tcf文件,将.text段从原来的SARAM改为SRAM,即SDRAM。

step3.在.ccxml文件中使用GEL文件。

GEL文件中只保留一个有效的函数

OnTargetConnect()
{
//GEL_Reset();
//Peripheral_Reset();
ProgramPLL_100MHz();
SDRAM_INIT();
GEL_TextOut("Target Connection Complete.\n"); 
}

调用的两个函数代码如下:

ProgramPLL_100MHz() {int i;GEL_TextOut("Configuring PLL (100.00 MHz).\n");/* Enable clocks to all peripherals */*(short *)PCGCR1@IO = 0x0;*(short *)PCGCR2@IO = 0x0;/* Bypass PLL */*(short *)CCR2@IO = 0x0;/* Set CLR_CNTL = 0 */*(short *)CGCR1@IO = *(short *)CGCR1@IO & 0x7FFF;*(short *)CGCR1@IO =  0x8BE8;*(short *)CGCR2@IO =  0x8000;*(short *)CGCR3@IO =  0x0806;*(short *)CGCR4@IO =  0x0000;/* Wait for PLL lock */for(i=0;i<0x7fff;i++);/* Switch to PLL clk */*(short *)CCR2@IO = 0x1;GEL_TextOut("PLL Init Done.\n");
}

/* mSDRAM = MT48H4M16LF-8 */
/* Timings based on EMIF clk = 100MHz */

SDRAM_INIT() 
{int i;/* reset EMIF */*(short *)PRCR@IO = 0x0002;for(i=0;i<0xff;i++);//enable SDRAM clock*(short*)CLKCFGL@IO=0x0001;

	/* enable word writes to EMIF regs */*(short *)ESCR@IO = 0;/* step 1 */*(short *)SDTIMR1@IO = 0x4710;*(short *)SDTIMR2@IO = 0x3911;*(short *)SDSRETR@IO = 0x0007;/* step 2 */*(short *)SDRCR@IO = 0x04E3;/* step 3 */*(short *)SDCR1@IO = 0x4720;*(short *)SDCR2@IO = 0x0001;/* step 4 */for(i=0;i<0xff;i++);/* step 5 */*(short *)SDRCR@IO = 0x061A;GEL_TextOut("SDRAM Initialization Complete.\n");
}

step4.编译,在线调试功能正常

step5.将编译生成的.out文件通过hex55.exe转换成.bin文件。所用的.cmd文件内容如下:

-boot
-v5505
-serial8
-reg_config 0x1C1F,0x0
-reg_config 0x1C20,0x8BB4
-reg_config 0x1C21,0x8000
-reg_config 0x1C22,0x0806
-reg_config 0x1C23,0x0200
-reg_config 0x3000,0x0002
-delay 0x500
-reg_config 0x1C1F,0x1
-reg_config 0x1C05,0x0002 -delay 0x500 -reg_config 0x1c1e,0x0001 -reg_config 0x1c33,0x0000 -reg_config 0x1020,0x4710 -reg_config 0x1021,0x3911 -reg_config 0x103C,0x0007 -reg_config 0x100C,0x04E3 -reg_config 0x1008,0x4720 -reg_config 0x1009,0x0001 -delay 0x500 -reg_config 0x100C,0x061A -b -o EVM_Sample.bin EVM_Sample.out

即,在.cmd文件中实现GEL文件的两个函数的功能。

step6.烧录到SPI flash上,无法正常运行

请问:上述操作是否正确?

如果不正确,怎样操作才能实现在脱机情况下,在SDRAM运行程序呢?

Shine:

建议用仿真器跟一下看代码是否有正确加载?如果加载了,再看一下运行到哪里出错了?bootloader会把MPORT关掉,如果代码中有涉及到MPORT,会运行不正确。
processors.wiki.ti.com/…/C5515_Boot-Image_Programmer

Shide Lu:

回复 Shine:

在开始处已经说明,“当前程序运行正常,基本占满了片上的DARAM和SARAM,为了后续增加功能,需要使用外挂的SDRAM来运行程序。”

1.在线调试和脱机运行都没有问题。

所以,即使代码中涉及到MPORT,运行也没问题。

“bootloader会把MPORT关掉,如果代码中有涉及到MPORT,会运行不正确。”所以也不存在这个问题。

2.进行上述修改后,在线Debug运行正常,只是脱机运行不正常。

 

“建议用仿真器跟一下看代码是否有正确加载?如果加载了,再看一下运行到哪里出错了?”

答:修改前,修改后,仿真调试都没问题,所以加载应该是正确的,也没法定位错误在哪里。

 

再问一个问题:

需要在转换.out到.bin使用的.cmd文件中增加对MPORT的使能操作吗?

 

Shine:

回复 Shide Lu:

用仿真器去跟踪加载后的代码运行情况,定位错误在哪里。

对MPORT的操作在程序中使能就可以了。

Shide Lu:

回复 Shine:

额(⊙o⊙)…

.text段配置到SARAM时:
仿真调试运行正常!烧录后脱机运行正常!

.text段配置改到SDRAM时:
连接仿真器调试的时候运行正常!烧录后脱机运行不正常!

“用仿真器去跟踪加载后的代码运行情况,定位错误在哪里。”
所以,无法通过仿真器跟踪定位。

Shine:

回复 Shide Lu:

请参考下面的跟踪方法。
processors.wiki.ti.com/…/Debugging_Boot_Issues

赞(0)
未经允许不得转载:TI中文支持网 » C55x怎么在外部SDRAM上运行程序?
分享到: 更多 (0)