|
|
| 关于C6000DSP的ROM加载 |
| 作者:佚名 来源:不详 发布时间:2006-9-13 10:15:37 发布人:zangyl |
减小字体
增大字体
1、TI的资料上的说明如下:    位于CE1空间的ROM中的代码首先通过DMA/EDMA被搬入地址0处。加载过程在复位信号 撤消之 后开始,此时CPU内部保持复位状态,由DMA/EDMA执行1个单帧的数据块传输。传输完成 后,CPU 退出复位状态,开始执行地址0处的指令。对于C62x/C67x,用户可以指定外部加载ROM的 存储 宽度,EMIF会自动将相邻的8bit/16bit数据合成为32bit的指令。对C620x/C670x,ROM中 的程序 必须按little-endian的存储模式存储;对C621x/C671x,ROM中的程序存储格式应当与芯 片的 endian模式设置一致。C64x只支持8bit的ROM加在,ROM中的程序存储格式需要与芯片的 endian 模式设置一致。对于不同的芯片,加载过程还略有不同。     ★ 对C620x/C670x,DMA从CE1空间中拷贝64KB数据到地址0处     ★ 对C621x/C671x/C64x,EDMA从CE1空间(对C64x是EMIFB的CE1空间)中拷贝1KB数 据到地 址0处 2、合众达的疑难解答关于C6000加载描述如下:    C6000的boot loader在reset时,判断外部BOOTMODE管脚,从而决定boot的方式为RA M加载、 ROM加载还是HPI加载,RAM可以为SDRAM、SBSRAM或SRAM,ROM可以为8位。C6000的boot的 代码 长度较小,为1K,一般这1k的程序一个是用户自己的boot程序,用于再次boot应用程序 到RAM 中。 3、TROY的解答(CMD 文件此处未列出):    671x复位时,将0x90000000开始的1k内容(FLASH_BOOTCODE即.boot_load段)复制到 DSP内 0x00000000处执行,该段程序将表中所指的各程序或数据段复制到SDRAM中,这时DRAM中 的内容 与用仿真器加载未经修改cmd的程序时完全相同,所以最后要做的就是跳转到你的程序入 口点 (c_int00)。这时boot程序已无任何用处。    上面所说的C64x的加载过程无非是:Reset后DSP前面1K字节的空间放置了我的bootl oader, 然后我的bootloader程序运行将余下的程序和初始化数据代码再load进来。     这个过程不难理解,问题是:     1)、bootloader程序怎么编写,以前没有编过,哪位高手有例子?     2)、上面有提到“最后跳转到你的程序入口点(c_int00)。”,如果用汇编我见 过如何 跳转,但是不过我的bootloader程序是用c语言编的该如何编写呢?是不是先设置PC(Pr ogram Counter)再跳转呢?c_ini00是不是bootloader加载程序时存放代码的首地址?两个完全 独立 的程序怎么跳转?嵌汇编“B .S1 LABEL"不知可不可以,LABEL可以为c_int00的绝对地 址吗? 如:“B .S1 0x8000000“. 或者是“BNOP .S2,B3,5“;其中B3中有c_int00的绝对地址 。还有就 是bootloader程序和用户代码分别单独编译吗?链接(link)呢,是单独分开还是一块 链接? 如果是单独分开的那么bootloader怎么能识别符号“c_int0”呢?     3)、上面讲的大多是flash如果换成eprom,不知如何将booloader程序和我的用户代 码同时 烧到同一片eprom中去呢?     4)、还有一个问题,其实不是很重要,以前也有人问过但没有得到很好的回答,就 是已开 始加载的1KB bootloader程序在完成它的搬运功能后“已无任何用处”,那问题是这1K B存储区 岂不浪费了,有没有什么好的方法可以“回收“这1KB存储区呢?     
|
|
[]
[返回上一页]
[打 印]
[收 藏] |
|
| ∷相关电子文章评论∷ (评论内容只代表网友观点,与本站立场无关!) [更多评论…] |
|
|