TI的大牛:
正在调试DSPTMS320C6205 CPU,将程序先放在了外挂的Norflash中,CPU上电后从flash中拷贝64K
程序到RAM运行,然后程序就按照我的bootloader的指示(如下):
mvkl _c_int00 B0
mvkh _c_int00 B0
B B0
nop 5
跳到cint00。但是这时程序就直接在norflash中运行了,为什么?
不应该是在RAM中运行的吗?cint_00的地址与什么有关系呢?
困扰半个月了,希望TI的大牛能解答。
Shine:
看一下你定义的程序入口地址_c_int00在哪里?
http://processors.wiki.ti.com/index.php/Accessing_c_int00#Setting_the_c_int00_Address_to_a_Fixed_Location
yanpeng guo:
回复 Shine:
谢谢,我按照上述链接提供的步骤将c_int00的地址直接固定为PRAM的一个地址。
对于C6205来说,上电后DMA拷贝64K数据到PRAM(0地址配置为PRAM),然后运行c_int00,
但是程序并没有在PRAM中执行,而是在norFlash中执行,为什么呀?DMA需要重新配置吗?
Shine:
回复 yanpeng guo:
DMA拷贝64K数据后,是从地址0开始执行的,如果你的代码没有超过64k, _c_int00程序入口地址应该定义在0.
请问你现在的情况是程序超过了64K么?用二次bootloader进行代码搬移的?
yanpeng guo:
回复 Shine:
现在没有超过64K,但是放在了外部flash中,.cinit 放在了外部Flash中,
一定得将cinit用DMA拷贝到dataram中吗?dma需要怎么初始化?
yanpeng guo:
回复 Shine:
现在没有超过64K,但是放在了外部flash中,.cinit 放在了外部Flash中,
一定得将cinit用DMA拷贝到dataram中吗?dma需要怎么初始化?
Shine:
回复 yanpeng guo:
没超过64K,不需要要用二次bootloader进行代码搬移,把_c_int00定义到地址0就可以了。
flash中的代码由dma自动copy的,这是硬件boot, DMA不能初始化
yanpeng guo:
回复 Shine:
但是这样搬完64K程序了,程序就在pram中运行了,但是我这边是在norflash中直接运行的。
与cinit有关系吗?
Shine:
回复 yanpeng guo:
关于cinit初始化段,在编译时选择-c编译选项(rom_model)
_c_int00程序入口地址指定在地址0。
另外,小于64K不用写二次bootloader,下面的代码不需要。
mvkl _c_int00 B0
mvkh _c_int00 B0
B B0
nop 5