摘 要:在进行DSP产品化设计时, Bo otLOAder 是一项关键技术。为了更好地解决数字信号处理器应用程序的加载问题, 以TI 公司641X 系列DSP 为例, 详细论述了DSP 的两种引导方法:ROM 引导和主机H PI 引导, 包括二次代码编写、存储器空间分配、引导表生成和. hex 文件的烧写。经某星载接收机系统实测验证, 所述方法同时适用于BIOS和NoBIOS 两种系统, 具有可靠性高、可行性强的优点。
0 引 言
近年来, 以数字信号处理器( DSP) 为基础的通用信号处理模块的研制受到人们的重视, 它的研制成功满足了信号处理系统实时性和通用性的要求, 被广泛应用于雷达、通信、电子测量和图像等领域。进行DSP 开发, 最终的目标产品要脱离仿真器运行, 在上电后可自行启动程序代码, 这就需要一个能在断电后保存程序的存储器。对于C641X 系列的DSP, 内部没有供用户使用的非易失性存储器, 只能将程序代码存放在外部的非易失性存储器中。因此, 通常需要在上电复位时, 将存储在外部速度较慢的存储器的程序代码搬移到片内高速RAM 中, 这个过程被称为Bo otLo ader 。因此, 在设计通用信号处理模块前, 有必要研究DSP 的多种引导方式。
1 C641X BootLoader 方式和过程
C641X 有三种Boot 模式:不引导、ROM 引导和主机引导。第一种方式只能用于仿真运行; 第二种方式利用片内固化的Boo tLoader 程序通过EDMA 通道, 从EMIF 的CE1 空间拷贝1 KB 数据到地址0 处, 然后从地址0 处开始执行。这种方式只需一片非易失性存储器, 实现较为简单; 第三种方式是在DSP 内核处于复位时, 由外部主机通过主机接口实现程序引导。这种方法虽然复杂度较前者高, 但也被广泛应用于一些具有抗空间辐射效应的星载平台中。
2 ROM BOOT 实现
前面提到这种方式是在DSP 上电复位后, 由片内固化的Bo otLo ader 代码采用EDMA 方式从CE1 空间复制1 KB 代码到地址0 处。但通常用户程序都远大于1 KB, 这就需要编写二次Bo otLoader 代码, 将用户程序搬移到DSP 内部RAM 中。下面介绍具体实现过程。
2. 1 二次引导程序编写
由于系统最初启动时, C 语言环境还没有初始化,所以二次引导程序一般用汇编语言编写。主要完成EMIF 寄存器配置, 程序搬移, 最后跳转到C 程序入口函数。其中, 程序搬移主要有两种实现方式。一种方法无需Co py Table( 引导表) , 而采用镜像的方式将所有程序代码看成是一个连续的数据段, 二次引导时将片外存储器的内容镜像到内部RAM 即可。这种方法虽然实现简单, 但存在占用空间资源大, 引导效率低的问题。
第二种方法是利用引导表实现。这种方法生成的引导文件是各段连续存放的, 因而引导效率较前一种方法高。关于引导表的格式和生成参见2. 4 节; 两种方法的二次装载汇编程序可参见CCS 烧写工具FLASHBurn 提供的示例工程, 这里不再详述。
2. 2 存储空间分配
程序存储空间可分为LOAD 空间和RUN 空间。
前者保存程序代码, 物理介质一般为片外FLASH 或E2 PROM; 后者是程序代码实际运行的空间, 物理介质一般是内部RAM。通常, 经常访问的程序和初始化变量的LOAD 空间放在FLASH 中, 而RU N 空间则放在内部RAM 中; 对于只在初始化时使用的段, 其LOAD和RU N 空间都放在FLASH 中; 而对于非初始化变量, 其LOAD 和RU N 空间都安排在内部RAM 中。当然, 如果存储空间充足时, 也可统一将LOAD 空间放在FLASH 中, 而把RUN 空间放在内部RAM 中。根据上述内容, 可以将C64X 存储区作表1 所示的安排。
表1 存储区分配。
其中, VECS 用于存放中断向量表, BOOT 存放二次引导程序。
2. 3 cmd 文件
cmd 文件的作用是实现前两节所述的二次装载代码、中断向量表等的存储空间分配, 其主要包含内存的划分以及各程序代码段的load 地址和run 地址的分配。常见的cmd 文件如下所示:
}
其中, vecto rs 是包含中断向量表的段; BootLoad是包含二次装载代码的段。
2. 4 引导表的生成
引导表的常用格式如下:
段1 的大小
段1 的目的地址
段1 的内容
段2 的大小
……
0;
0;
0;
一种方便的生成引导表的方法是, 当工程文件编译生成. out 文件后, 用CCS 自带的hex6x 可执行程序将其转化为用于程序引导的. hex 文件。这种方法需要编写一个转换命令文件作为hex6x 命令的输入参数,具体如下:
其中len 的大小可以查看map 文件, 只要大于程序和数据的实际长度即可。
2. 5 文件烧写
将. hex 文件烧入ROOM 或FLASH 中的方法有以下几种 :
( 1) 使用通用烧写器写入。
( 2) 使用CCS 自带的烧写工具FlashBur n。
( 3) 用户自己编写烧写FLASH 的程序。
其中, 使用通用烧写器需要文件格式转换且要求烧入的器件是可插拔的; 而第三种方法又需要自己编写代码, 费时费力; 常用的是第二种方法, 这种方法只需稍加改动, 就可以运用于不同的目标系统中。这是因为这种方法需要首先下载FlashBurn 提供的工程FBT C 的. out文件到目标系统中。这个工程的代码包含了系统中使用的存储器的烧写命令字, 而对于不同的存储器,该命令字是有差别的。这里要做的就是将工程的控制字宏定义改为自己目标系统芯片的控制字, 重新编译链接, 然后在FlashBurn 中选定新生成的FBTC. o ut 文件和待烧入的. hex 文件, 就可完成文件烧写。
3 外部主机HPI 引导实现
选择这种引导方式时, 外部主机在DSP 内核处于复位状态, 但芯片其他部分已经脱离复位状态时, 通过HPI 接口访问DSP 的全部存储空间和外设寄存器。当主机完成代码装载和初始化后, 置HPIC 寄存器中的DSPNIT 位为1 使内核脱离复位状态, 然后从0 地址处开始运行, 具体流程如图1 所示。
图1 H PI 引导流程图。
这种方式也需要如ROM BOOT 方式一样生成. hex 文件, 生成方法和上述大致相同, 只是由于有了外部主机的参与, 可以将程序代码一次性装载到片内RAM 中, 没有1 KB 的限制, 因而无需二次启动代码, 只需在0地址处添加跳转指令, 使得DSP内核复位后能从入口函数_c_int00 处开始执行即可。
4 .结语
本文详细论述了TMS320C641X系列DSP 上电自启动的两种方法, 并通过某星载通信接收机系统的验证, 方法简单可行。该方*述时虽然是基于非DSP/BIOS 框架, 经验证也同样适用于DSP/ BIOS 系统中。