版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ti dsp c6000的二次boot c6000emif接口eeprom启动的二次bootloader 140lab of uestc 一, 二次boot概述 c6000有3种启动方式 ? 直接执行方式。这种方式中,dsp采用map0储器映射方式,即地址0x00000000指 向片外的存储器。上电后dsp直接从地址0x00000000开始执行。注意这种模式并不适用于tms320c621x/c671x系列的芯片。 ? 主机启动模式。主机通过dsp的hpi口搬移代码和启动dsp。 ? emif接口的并行rom启动模式.上电后dsp通过emif接口装载代码, 在上述各种启动模式中,rom启动模式实
2、现简单,速度较快,在实际系统应用中也最为广泛,本文会主要介绍这种启动模式, 当采用emif接口的并行rom启动模式时,大多数6000系列的dsp芯片只能从ce1向地址0处搬移1k bytes的代码,那么当应用程序代码超过1k bytes时就需要两次的代码搬移,这就是所说的二级启动过程。简单过程如下。 1, dsp上电或硬复位时通过edma自动地从emif接口的be1空间搬移的1k bytes的二次boot代码到片内ram的0x00000000到0x00000400空间 2, 搬移完成后自动跳转到地址0x00000000处执行搬移进来的二次boot代码。 3, 二级boot代码将应用程序从外部存
3、储器搬移到内部ram中,并且在代码搬移 完后跳转到程序入口地址c_int00。 当需要访问外部存储器时,二级启动代码应包括对emif寄存器的配置,这些寄存器包括emif_gcr,emif_ce0,emif_sdctrl及emif_sdrp,对这些寄存器的配置可根据原理图的设计及程序的要求用户自己进行编写。对于有内部pll控制时钟的dsp6000芯片,ti推荐在二级启动代码中配置pll以提高启动的速度。 二次 boot 代码长度必须小于1k个bytes,这使得我们很难用c语言来编写二次boot代码。因为初始化c运行环境需要空间不小。 二,二次boot 的关键。 ? 二次boot代码的编写和boo
4、t table 的设置。boot table的作用是告诉二次boot代码 所搬的各个程序段的大小,在片外rom中的源地址和在片内ram中的目的地址。 ? 存储器的安排。包括片内ram和片外eeprom。 1,二次boot代码可以直接使用ti 的6713dsk的boot代码。我简单的修改了一下,主要是将代码合成了一个文件,代码在后面的附录中。可见boot table 放在改boot代码的最后一块。 2,对于boot table,ti的技术文档(参考1)中提出了3中配置方法,最简单的一种是用hex6x的boot 选项生成boot表。但需要要注意的是这种方法要求hex6x 的version 至少是4
5、.33版本,低版本中这boot选项时无效的。现在我们教研室的版本都还不够。以后要用这种方法具体可以参考文献1。还由一种采用link来作的,也需要的ccs版本至少2.2。我使用的是三种方法,这种方法通过检查.map文件来手工写boot表。 boot表的格式如下: copytable: .word 第一个段的大小 .word 第一个段在片外eeprom中的起始地址 .word 第一个段在片内ram中的起始地址 .word 第二个段的大小 .word 第二个段在片外eeprom中的起始地址 .word 第二个段在片内ram中的起始地址 。 .word 0 .word 0 .word 0 依次写入各个
6、段的参数。最后是以三个0的word表示表的结束。 这种boot表的格式时ti推荐的,方便和以后的boot软件兼容 3 存储器的安排。 通过cmd文件来设置,如下一个例子(适用于6713) memory boot : origin = 0x00000000, len = 0x00000400 /* l2. for custom boot code*/ iram : origin = 0x00000400, len = 0x0003fc00 /* l2. for non.custom boot code*/ sdram : origin = 0x80000000, len = 0x10000000
7、 /* emif . ce1 . sdram */ flash_boot: origin = 0x90000000, len = 0x00000400 /* flash . for custom boot code */ flash_rest: origin = 0x90000400, len = 0x0001fc00 /* flash . for application code */ sections .boot_load : load = flash_boot, run = boot .vectors : load = flash_rest, run = iram .text : loa
8、d = flash_rest, run = iram .const flash_rest .cinit flash_rest .bss iram .far iram .stack iram .sysmem iram 一般来所凡是已初始化的代码段,比如text,.vector段都需要烧到片外eeprom中,上电时通过2次boot装入到片内ram中运行。不过像.const 和cinit等的段虽然也是已初始化段,但因为这些代码段只在程序刚开始的时候运行一次,所以可以只放在片外的 eeprom中 就行了。 从上可见,在片内的ram和片外的eeprom的开始都专门给出了1k bytes的空间给.boot
9、.load程序段。以保证正常的boot过程。 需要说明的是当采用如上的cmd文件来biuld工程时,是无法用仿真器加载代码的。所以在进行应用程序功能测试时不能使用这个 cmd文件。可以用一个对应的段定义。memory定义不用修改。 sections .boot_load boot .vectors iram .text iram .const iram .cinit iram .bss iram .far iram .stack iram .sysmem iram 等完成功能测试后,将sections改为如前的定义方式再biuld一次。 三,具体的超作步骤。 这种方法适合于非bios的应用,对
10、于bios的应用参考文献一。 1, 编写和测试dsp应用程序。 2, 在工程中加入boot.asm。根据不同的平台修改对emif接口和 pll的配置。根据前面所诉的方法修改cmd文件的memory和section定义。 3, 选择生成map文件,build 工程。检查map文件。 在map文件中可找到各个段的大小,在eeprom中的位置和在ram中的位置。 根据map文件的信息,填写boot.asm中的boot table。 4,填完boot table 后,重新build代码。生成.out文件. 5 , 用hex6x将coff格式的.out文件转化为16进制文件.hex. hex6x 的cm
11、d文件如下(适用于6713) input_file_name.out /* name of input file*/ -map hex.map /* create a hex map file */ -a /* create ascii image */ -image /* create a memory image (no discontinuities) */ -zero /* reset address origin to 0 for output file(s) */ -memwidth 8 /* width of rom/flash memory */ roms flash:org=
12、0x90000000,len=0x20000,romwidth=8,files=out_file_name.hex 6, 对应ccs buld的map文件检查hex6x的map文件。如过没错误,用烧写器 将生成的*.hex文件烧入eeprom.。 四,一些补充说明。 如果不考虑效率的话,可以直接在片内ram中化分为boot,code 和data区,将除了boot_load的所有的代码都放到code区去,那么boot table中可以简单到如下只有一项。的形式 copytable: .word code的大小 .word code在片外eeprom中的起始地址 .word code 在片内ram
13、中的起始地址 .word 0 .word 0 .word 0 而且table里的参数不用通过查看ccs生成的。map文件来设定,直接由cmd文件的memory定义决定。 比如 memory boot : origin = 0x00000000, len = 0x00000400 /* l2. for custom boot code*/ code : origin = 0x00000400, len = 0x0001fc00 /* l2. for non.custom boot code*/ data : origin = 0x00020000, len = 0x00020000 /* emi
14、f . ce1 . sdram */ flash_boot: origin = 0x90000000, len = 0x00000400 /* flash . for custom boot code */ flash_rest: origin = 0x90000400, len = 0x0001fc00 /* flash . for application code */ sections .boot_load : load = flash_boot, run = boot .vectors : load = flash_rest, run = code .text : load = flash_rest, run =code .const flash_rest .cinit flash_rest .bss iram .far iram .stack iram .sysmem iram 那么 copytable: .word 0x1fc00 /*code的大小 */ .word 0x90000400 /*cod
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/SCJC B07-2025工业化混凝土部品性能评价通则
- 人力资源招聘专员候选人质量与招聘效率KPI考核表
- 农产品供应链订单执行效率和成本控制绩效评估表
- 新能源电池回收企业废弃电池处理流程手册
- 四川省甘孜藏族自治州道孚县2026届中考数学模试卷含解析
- 生物医学研究员绩效衡量表
- 网络直播行业运营维护工程师绩效衡量表
- 数据分析员数据分析绩效评定表
- 食品药品检验所质检员产品质量把控KPI考核表
- 园林康养师改进评优考核试卷含答案
- 泌尿系感染护理查房
- 【新教材】统编版(2026)九年级上册道德与法治全册教案
- 反比例函数的图象和性质课件 2026-2027学年人教版九年级数学上册
- 高考数学考点题型全归纳
- 儿童前庭功能障碍康复治疗指南(2024)课件
- 2026年广东省广州市2026届高三下学期4月二模试题 物理 含答案新版
- 《2026年》医院药剂科药师高频面试题包含详细解答
- 2025-2026学年七年级英语上学期第一次月考 (北京专用)解析卷
- 《贵州省市政基础设施工程资料管理导则》
- 农产品电商平台供销合作协议
- 幼儿园中班歌唱活动《懒惰虫》课件(已嵌入音乐)
评论
0/150
提交评论