- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SPUC6455Flash加载方案
SPU C6455 Flash加载方案
Flash 加载的流程:
按照TI 相关文档中的描述,C6455支持从EMIFA总线上读取ROM来加载DSP程序。其设置由BootMode管脚设定。在SPU 载板上,可通过载板背面的两个拔码开头分别设置DSPA和DSPB的加载模式。
SPU板上的Flash 通过EMIFA挂在C6455上,每个C6455各挂一片。在EMIFA读取ROM的加载模式下,C6455在上电后,从EMFIA的CE3空间(起始地址:0xB0000000)开始执行程序。所以为了实现通过Flash对C6455的加载,必须在Flash的起始空间开始的一段Flash空间上放置一段BootLoader代码,由该段代码完成将Flash中已保存好C6455代码镜像搬移到C6455的 L2空间内的任务。
综上所述,C6455 Flash加载的流程如下:
编程DSP代码;
根据DSP代码编译链接后生成的*.out和*.map文件,获取该DSP代码在运行时的各段的内存分配信息;
根据步骤2中获得的各段内存分配信息,编写BootLoader的汇编代码;
制作BootLoader代码的二进制内存镜像,并存入Flash起始地址处;
制作DSP程序的二进制内存镜像,并存入Flash;
设置SPU板的BootMode拔码开关为Flash加载模式;
重新上电,SPU板上DSP完成从Flash的加载,开始执行程序。
BootLoader代码的制作:
Flash 加载各步骤中最重要的是BootLoader代码的编程。本节将详细说明这一过程。
首先,由于在Flash中存放的应该是DSP程序的二进制镜像格式,该镜像实际上就是通过开发工具或其它方式加载到DSP L2空间内的DSP可执行文件。TI 的DSP可执行文件遵行分段的管理方式,由链接器根据*.cmd文件中指定的内存分配规则,将DSP可执行文件中的各段加载到*.cmd文件中指定的位置。
一个使用了C环境的DSP可执行文件主要有以下各段组成:
CINIT段:C运行时环境;
CONST段:常量;
CODE段:可执行的二进制代码;
SWITCH段:分支;
而其它的如堆栈段,BSS段等则是会在运行时动态改变的段,不计入必须由BootLoader加载的范围。
下图说明DSP内存空间与Flash中镜像文件的关系:
从DSP L2到Flash的空间映射图示
由于在上电后会立即执行,所以BootLoader 代码由汇编实现,从而避免了初始化C运行时环境的麻烦。
完整的BootLoadr代码如下,其中红色部分是需要根据不同的DSP程序编译链接后生成的MAP文件来进行设置的,这些部分指示出了各段的起始地址和各段的空间长度。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;文件:boot.asm
;;概述:该段汇编代码形成的二进制可执行文件应烧写于Flash的起始地址
.title Flash bootup utility for SPU
.option D,T
.length 102
.width 140
FLASH_CINIT_START .equ 0xB0000100 ;flash start address
FLASH_CODE_START .equ 0xB0000474 ;L2 sram start address
FLASH_CONST_START .equ 0xB000E6B4 ;flash start address
FLASH_SWITCH_START .equ 0xB000E9C6 ;L2 sram start address
CODE_SIZE .equ 0xe2a0 ;application code size in byte
CODE_START .equ 0;application code start address
CINIT_SIZE .equ 0x0374 ;application code size in byte
CINIT_START .equ 0x00812da0 ;application code start address
文档评论(0)