DIY编程器网
标题:
大容量无线传输技术中高性能DSP 的启动方法
[打印本页]
作者:
liyf
时间:
2012-1-27 14:06
标题:
大容量无线传输技术中高性能DSP 的启动方法
摘要:大容量无线传输技术的实现依赖高性能数字信号处理器(DSP)。大多数C6000 系列 DSP 采用ROM (Flash) 启动方式。采用ROM 启动方式时,C6000 系列DSP 在上电后会自动拷 贝存储于FLASH 中的1K 字节代码到内存中。然而DSP 的程序往往大于1K 字节,这时就需设 计一个二级bootlOAder 来辅助完成程序的加载。本文设计并实现了一种C6000 系列DSP 的 启动方法,重点研究了二级bootloader 的设计,如何将程序编译生成的目标文件转换成基 于flash 格式的文件,以及如何将基于Flash 格式文件烧写入Flash。实践证明,该方法性 能稳定,可移植性好,具有较大的工程应用价值。
1 引言
在极低谱密度,高频谱利用率的大容量无线传输技术中,高速实时信号处理成为技术的 关键。目前市场上,能满足对高速实时信号处理的需要有具有良好的可编程性的器件主要有 DSP 和FPGA。
TMS320C6000 系列DSP 是TI 公司推出的一种高性能的数字信号处理器,包含定点和浮 点两个系列,其中定点系列包括TMS320C62xx 和TMS320C64xx,浮点系列包括TMS320C67xx。 C6000 系列DSP 有三种启动方式:
(1) 主机启动
如果选择主机启动模式,在复位信号结束后,DSP 的CPU 被内部“阻塞”而其他部分都 被释放。在此期间,一个外部的主机在必要时可以通过主机接口初始化CPU 的内存空间,包 括配置与启动相关的内部寄存器。一旦主机完成了所有必须的初始化,它必须将HPIC 寄存 器的DSPINT 位置“1”来完成启动过程。在程序加载完后,CPU 被从“阻塞”中唤醒,然后 从地址0 处执行指令。在CPU 被唤醒后,CPU 需要将DSPINT 位清零[1]。
(2) ROM 启动
如果采用ROM 启动模式,则C6000 系列的DSP(C621x/C671x/C64x)复位后自动从CE1 空间的起始处拷贝1K 字节的代码到内存空间。该拷贝过程由EDMA 完成,使用默认的Rom 时钟。在此过程中CPU 一直处于“阻塞”状态,直到拷贝完成后才被被唤醒,然后从地址0 处开始执行程序[1]。
(3) 无启动
如果选择无启动模式,CPU 复位后直接从地址0 处开始执行指令。 C6000 系列DSP 的器件配置情况决定了选择的启动方式。具体来说就是DSP 的启动模式 管脚(boot mode pins)接上拉还是下拉电阻。以C6416 为例,BEA[19:18]是启动模式管 脚,它们取不同的值(上拉电阻代表“1”,下拉电阻代表“0”)代表的含义如表1-1 所示:
2.1 配置存储器
2.1.1 定义存储器分区
为了实现使用二级bootloader 的ROM 启动,需要将Flash 划分为FLASH_BOOT, FLASH_REST 两个区。这两个区分别存储由on-chip bootloader 拷贝的程序段和由secondary bootloader 拷贝的程序段。对于BIOS 程序,Memory 段的定义在MEM(Memory Section Manager)对象里。对于非BIOS 程序,Memory 段定义在linker command file 中。一个C6416 的Memory 段定义的例子如下所示:
2.4 将程序烧写进Flash
将2.3 节生成的ASCII 文件烧写进Flash 可以使用CCS 自带的FlashBurn 工具。 FlashBurn 是一个带图形界面的软件,它首先将一个称作FlashBurn Target Component (FBTC) 的程序下载到DSP 内存中,通过与FBTC 的实时数据交换完成对Flash 的擦除编程等操作。 针对不同的硬件(DSP,Flash 型号)修改FBTC 是该方法的关键。所需修改处包括Flash 的 基地址,大小,及读写命令字等。
3 段拷贝表
二级bootloader 使用一个段拷贝表(section copy table)进行段的拷贝。段拷贝表包 含每个需要拷贝的段的必要信息,如段的load 地址,段的run 地址,段的大小。段拷贝表 被插入在secondary bootloader 的末尾。
生成段拷贝表的方法有两种: 1) 使用 hex conversion utility 的-boot 选项 在2.3 节中我们讨论了程序文件格式的转换和hex 命令行文件,事实上Code Composer Studio 自带的工具hex conversion utility 提供了一种更为方便的生成段拷贝表的方法, 只要在hex 命令行文件中使用一些特殊的选项即可。特殊的选项有–boot, ?bootorg 和 –bootsection,这三个选项的含义分别如下:
-boot 使用该选项时hex conversion utility 将自动转换所有初始化段的格式
-bootorg 指明段拷贝表的地址
-bootsection 指明二级bootloader 所在的段的名称
2) 使用 linker 选项(LOAD_START,RUN_START,SIZE)
涉及段拷贝表的生成的有三个选项:LOAD_START,RUN_START 和SIZE,可分别获得一个段的驻留地址,运行地址和大小。例如下列代码可获得text 段的驻留地址(存于_text_ld_start 中),运行地址(_text_rn_start)和段的大小(存于_text_size)
.text : load = FLASH_REST, run = IRAM
LOAD_START(_text_ld_start),
RUN_START(_text_rn_start),
SIZE(_text_size)
4 结束语
本文针对在极低谱密度,高频谱利用率的大容量无线传输技术研究中C6000 系列DSP 的应用程序大于1K 字节的情况,提出了一种使用二级bootloader 从Flash 启动DSP 的方法。 该方法可应用于采用了C6000 系列DSP 的嵌入式系统中,不需要额外的Flash 编程器,具有 广泛的适用性。
本文作者创新点:在二级bootloader 中引入段拷贝表用以控制程序加载过程,并利用 CCS 自身的编译功能获取段拷贝表的内容,该方法可提高效率且准确性高。
欢迎光临 DIY编程器网 (http://diybcq.com/)
Powered by Discuz! X3.2