您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页基于FLASH的TMS320C16自启动实现方法

基于FLASH的TMS320C16自启动实现方法

来源:纷纭教育
第19卷 第5期 2010年9月 重庆电子工程职业学院学报 Journal of Chongqing Cone ̄e of Electronic Engineering Vo1.19 NO.5 Sep.2010 基于FLASH的TMS320C641 6自启动实现方法 冀 云 f重庆电子工程职业学院重庆401331) 摘要:介绍了一种通过自己编写的烧写FLASH的程序以及二次引导程序实现DSP上电自启动的方法 当DSP复位时内部引导装载程序会装载位于FLASH的前1KB的二次引导程序 装载成功后DSP从0x00地 址开始执行二次引导程序:二次引导程序的作用就是完成加栽用户应用程序.并且加载完成后跳到C程序入 口点c int00 处.执行用户程序,实现用户程序的 FLASH 自启动 _关键词:FLASH自启动;TMS320C6416;二次引导;烧写FLASH 中图分类号:TP39 1 引言 文献标识码:A 文章编号:1674—5787(2010)05—0144—03 AM29LV400BT.存储容量是4M Bit 用户可根据需求配置 成512K x 8一Bit或者256K x 16一Bit两种形式 由于 近年来随着数字信号处理器(DSP)技术的迅猛发展. 其越来越广泛地应用于生产生活的各个领域 其中. TMS320C6000系列TI公司推出的最新DSP型号.其性能 TMS320C64x支持16bit的FLASH读写操作.但是只支持 8_bit的FLASH加载:为了方便后面烧写FLASH。本系统 采用的是512K x 8-Bit形式 得到了很大的提升.核心频率最高达到1GHz 在许多需 要进行大量数字信号处理运算并兼顾高实时性要求的场 合得以广泛应用 TI公司的C6x1x产品的内部BOOT只 能加载1K的程序.如果应用程序大于1K则无法实现自 DSP通过EMIFB控制FLASH的读写和擦除:存储空 间分配在EMIFB的CE1内.占用DSP内部地址范围是 64000000—643FFFFF 其中A0一A 19作为地址线.DO—D7 启动 在TMS320C6000系列DSP的系统设计应用过程 中.DSP器件的启动加载设计是最关键的技术之一.这就 需要用户自己编写一个二次引导程序 本文针对这一问 题提出一种有效解决的方法 作为数据线,CE为片选信号,WE是写选通信号,OE为使 能信号.BYTE为8位或16位数据模式选择fBYTE接地 时是8位模式1 2.3接口原理图 2 硬件系统设计 2.1 TM¥320C6416芯片 TMS320C64l6是Tl公司最新推出的高性能定点 DSP,其时钟频率可达1GHz,采用两级缓存结构.一级缓 存(Ll1由128Kbit的程序缓存和128Kbit的数据缓存组 成,二级缓存(L21为8Mbit;有2个扩展存储器接口 (EMIF),一个为64bit(EMIFA),一个为16bit(EMIFB1.可 以与异步存储器(SRAM、EPROM1或同步存储器 (SDRAM、SBSRAM、ZBTSRAM、FIFO)实现无缝连接。本系 统就是DSP通过外部存储接口EMIFB来外挂FLASH芯 片.FLASH采用的是8位数据线接法。 在通过DSP对FLASH操作编程时.FLASH数据宽 度为16bit时,DSP地址要左移lbit:数据宽度为8bit时。 DSP地址要左移2Bit 有些FLASH资料已经分别将写操 图1 DSP的FLASH接口原理图 作命令在8位和16位的不同命令时序给出.这种情况下 就不需要再进行移位 3 二次引导程序 如前面所说因为TI公司的C6x1x产品的内部BOOT 2.2 FLASH芯片AM29LV4OOBT介绍 本系统采用的FLASH芯片是AMD公司推出的 只能加载1K的程序,而用户的应用程序往往远大于1K。 所以必须通过用户自己编写二次引导程序才能实现 收稿日期:2010—08—22 作者简介:冀云,男,重庆电子工程职业学院电子信息系,助理工程师。 第5期 冀云:基于FLASH的TMS320C6416自启动实现方法 145 FLASH自启动 DSP上电后内部BOOT自动加载FLASH 前lK数据.用户要编写的二次引导程序最终将写入 FLASH的前lK存储空间.且该空间的剩余部分不能再 用来存储其他程序 二次引导程序的作用就是按照一定 的参数将存储在FLASH中的其他用户程序数据搬移到 DSP内存空间.并且搬移完成后.要跳转到用户程序的C 语言的入口地址c intO0处.开始执行用户程序 本系统的二次引导程序采用汇编程序编写.其中主 要代码如下: COPY TABLE .equ 0x640004OO :这个是定 义用户程序在FIJASH中起始地址 .sect“.boot load”:将二次引导程序代码编译到 boot load段: 木木木术拳术木半术木木枣木木车术木木木 宰水事宰半木木木木术水枣木木木木枣木水枣木水丰半掌木水水 : Copy code sections; 车幸术半木 术木丰幸木木木木术木术枣枣木木牛木木术木车半木木术木术水木术木木:l:术术术丰书枣木木丰木 mvkl COPY TABLE.a3:加载用户程序代码的起始 地址 mvkh COPY.TABLE.a3:加载用户程序代码的起始 地址 ldw¥a3++.bl:加载用户程序的C语言入口地址 copv section t叩:;循环加载多个段标签 ldw}a3++.bO:本段加载的字节个数 ldw a3++.a4:本段要被加载到内存中的起始地址 nop 3 【!bO】b copy_done;判断所有段都被加载完成 nop 5 copy_lop::循环加载当前段标签 ldb a3++.b5 sub bO,1,bO:每加载一个字节,字节数减一 【bO]b copy_loop;判断当前本段加载字节数是否 为零 【!b0】b copy_section top;判断当前段加载成功后跳 转到循环开始地址.加载下一段: 术术木丰木宰木幸丰丰丰木木木木术幸术木拳术丰丰木术术术术丰木木木丰木丰车术半木半丰木木术术木木串半 ; Jump to entry point ; 木 木 球术 丰丰宰木木木 毒 丰木木 木 球球 木 采木士 采 采木 木木 木 士 毒 copy one::_d 跳转到C语言入口标签b .S2 bl:跳转到C语言入口地址 nop 5 以上程序中0x640OO400可根据自己的FIJASH地址 而改变:而C语言程序入口地址,各段在RAM中起始地 址以及段的字节长度都可以在用户工程的MAP文件中 得到 以下是一个工程的MAP文件部分内容: OUTPUT FILE NAME: <./Debug/simulator.out> ENTRY POINT SYMB0L:”c intOO ”address: .0000f680name origin len ̄h used unused attr fill SRAM 000oO400 0004f啪0 00HDl0fd8 0002m28 RWIX SDRAM 800o()o00 H.ff 000balb8 0ff_45e47 RWIX sections page ongin length input .off ram 0 80ooI 0o0balb8 .boot load 0 O0o00o00 o0000o60 .text 0 00000400 0(100f720 .cinit 0 0 Ofb20 0I 0o0894 .const 0 0o01 1320 0000006c .switch 0 0o0l】38c 0()00oO5O 上面分别显示了C语言人口地址以及各段在内存中 的起始地址和字节长度 烧写FLASH的时候需用到这些 参数.二次引导程序加载用户程序的时候也会用到这些 参数 4. FLASH的烧写与擦除 对FLASH的擦除和写操作都要按照一定的时序进 行.不同的芯片可能稍微有所不同.这里首先按照芯片资 料做如下定义: #define FLASH UL1 0xAA #define FLASH UL2 0x55 #define FLASH UL3 Ox80 #define FIJASH UIA 0xAA #define FLASH UL5 Ox55 #define FLASH CHIP UI石0x10 #define FLASH PROGRAM 0xA0 volatile unsigned char*nASH一555:(volatile unsigned char木、0x64000555; volatile unsigned char*一FLASH—AAA:(volatile unsigned char¥1 Ox64OOOAAA; 以上程序分别定义了擦除烧写FLASH的命令内容 以及地址 下面定义擦除整片FLASH函数: Uint32 flash_erase(Uint32 addr,unsinged char type) { FLASH AAA=FIASH UL1; FLASH 555=FLASH UL2; FLASH.AAA=FLASH UL3; FIASH AAA=FLASH UI : ¥FIASH 555=FIASH UL5; //chip erase *FLASH_AAA=OxlO; //擦除命令 while(( FLASH—AAA&o ̄8o)!=Ox80); for(i=0;i<CHIP _sIZE;i++) { if(*(unsigned char*)(addr+i1 1=Oxfl ̄#片攘 除成功检查 f break; } l46 } 撬 重庆电子工程职业学院学报 第19卷 映射文件 按照MAP文件把各需要写进FLASn的非初 始化段的起始地址以及段长度参数设置好,然后设置本 工程各代码以及数据段分配的CMD文件 需要注意的是 一} 下面是烧写单字节到FLASH的函数内容: void flash_writes(Uint32 addr,unsigned char data) 定要将FlashBurn工程的内存空间分配和用户应用程 { FLASH2AAA=FIASHUL1; 一—序的内存空间分配分开.不能重叠,以免相互覆盖。设置 完成后编译工程 最后将用户程序生成的.out文件通过JTAG下载到 DSP内部RAM中,但不要运行;接着将FlashBurn. 的 工程的.out文件用同样的方法下载到DSP内部RAM中 FLASH_5555=FLASH—UL2; FLASH2AAA=FLASHPROGRAM; *(unsigned char*)addr=data;//写字节命令 while(*(unsigned char*)addr!=data);,,/写状态 检测 并运行 这个程序完成的任务就是将先前载到片内RAM 的用户工程数据写进FLASH。写完成后断电重启,DSP就 会自动执行用户程序.实现用户程序自启动。 6 结论 } 下面是烧写一段数据到FLASH的函数部分内容: for(i=0:i<SECTION_SIZE;i++) { lfash_本文以TMS320C6416为例阐述了用户自己编写烧 写FLASH程序实现自启动功能.已经在工程中得到了应 用 Tl公司提供了一个烧写FLASH的工具HashBurn.但 是这种力法的缺点是需要将程序编译后生成的.out文件 再转换成.hex文件:转换过程的同时.需要一个cmd文件。 writes(FLASH_Addr++, ((unsigned char ) (SECTION—RAM ADDRESS+i))); J 首先将.boot load段写入FLASH的前1k空间.然后 并且FlashBum工具运行时需要下载FBTCfFlashBurn Target Component1到DSP系统中.然后由上位PC机通过 仿真器发送指令和数据给下位DSP.具体对FLASH的操 作由FBTC执行 然而.这个FBTC一般是针对TI公司提 供的DSP专门编写的.与板上使用的FLASH的接口宽度、 在Ox400地址处写用户应用程序的人口地址数据.最后 依次写数据段的长度以及本段在RAM中的起始地址和 本段数据。如果是多段,则按照第一段规则依次写入。需 要注意的是.写FLASH的写入顺序要和二次引导程序相 对应.不同的二次引导程序对应的写入顺序和内容不同 5 应用程序烧写方法 用户将应用程序编写好后.只要简单地把编写的汇 编二次引导程序添加到用户工程.同时要更改工程的 CMD文件.将boot_load段编译到DSP内部RAM的前1k 空间,即0一Ox400内.然后重新编译工程即可。 利用上面烧写FLASH函数.建立一个工程FlashBuITI. pri的工程,其作用是用将用户工程的内容从内存中读出 来并烧写到FLASH中 首先查看前面编译好的用户应用 操作关键字都有关.对用户自己制作的硬件不一定适合。 与FlashBuIXl工具相比较.本方法更为灵活.只要按照MAP 文件更改下FlashBurn.prj工程中各段的参数就可以适用 于其他DSP和工程,并且避免了文件格式转换的繁琐。 参考文献: 『11汪安民,张松产,常春藤.TMS320C6000DSP实用计数与开 发案例[M].北京:人民邮电出版社,2008. 【2】TMS320C6x Assembly Language Tools User’S Guide.1 999 【3】CreationCreating a Second—Level Bootloader for FLASH. 2006 程序工程里的MAP文件:MAP文件是CCS软件编译后 产生的有关DSP用到所有程序、数据及10空间的在内存 责任编辑王荣辉 The Self-implementation Method Based on TMS320C64 1 6 of FLASH JI Yun (Chongqing College ofElectronic Engineering,Chongqing 401331,China) Abstract:This paper introduces the self—implementation methods of the secondary bootloader and the flash burning in DSP in detail.After the resetting of DSP,the inner initial program loader would load the secondary bootloader of 1 KI in FLASH.And then DSP executes the secondary bootloader from 0)【00,which accomplishes the user's application program,after that,it jumps to the enty poirnt c_int00 in C program and executes user program.Finally,the self—implementation f FLASH can be achieved. Key words:FLASH self-implementation;TMS320C6416;secondary bootloader;flash burning 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务