让找料更便捷
电子元器件
采购信息平台
生意随身带
随时随地找货
一站式电子元器件
采购平台
半导体行业观察第一站
标签:
摘要: 摘 要 本文介绍了 TI 公司的 TMS320C203 芯片特点,对其引导加载功能进行了扩展实现。 关键词 TMS320C203 引导加载 boot load
摘 要 本文介绍了 TI 公司的 TMS320C203 芯片特点,对其引导加载功能进行了扩展实现。
关键词 TMS320C203 引导加载 boot loader
TMS320C2xx 是美国 TI (德州仪器)公司继 TMS320C2x 和 TMS320C5x 之后推出的一种低价格、高性能 16 位定点运算 DSP 。其 CPU 接近于 TMS320C25 ,但时钟速率提高、指令集更为丰富和优化、片内外设向 TMS320C5x 靠拢,可以将其视为 TMS320C5x 的精简版。 TMS320C2xx 的性价比很高,目前已成为高档单片机的理想替代。 TMS320C203 (以下简称 ' C203)是 TMS320C 2xx 系列中应用较为广泛的一种,本文拟就对 TMS320C203 的引导加载功能加以扩展,以支持更为广泛的应用。
1 TMS320C203器件特点
'C203的主要性能如下:
(1)指令周期为50ns、35ns或25ns;
(2)可寻址224K存储空间——64K程序、数据和I/O空间以及32K扩展数据空间;
(3)丰富的片内外设——同步串口、异步串口、锁相环、软件等待状态发生器;
(4)源码向下兼容TMS320C25,向上兼容TMS320C5x;
(5)强大的指令集——单周期乘/加、块移动、多条件转移和调用、位倒序寻址;
(6)从片外ROM中自动引导加载程序的功能。
2 引导加载(boot loader)
引导加载是指器件复位时执行一段引导程序,一般用于从端口(异步串口、 I/O 口或 HPI 主机接口)或 EPROM/FLASH 等非易失性存储器中加载程序至高速 RAM 中运行。人们所以要采用 DSP ,主要目的是利用其高速运算能力。然而,目前市场上通用的非易失性存储器速度都比较慢,少数高速器件则容量有限、价格昂贵。与此同时,高速、大容量静态 RAM 的价格已下降很多。因此,针对高速 CPU 来说,将存放在慢速非易失性存储器中的程序加载到高速静态 RAM 中运行是一种惯常用法。
'C203具有544字的片内RAM,其中的256字可配置为程序存储器。这种片内RAM配置,对于稍微复杂一点的应用来说,一般都需外扩数据和程序RAM。'C203支持上电后自动从8位EPROM/FLASH中加载程序至16位RAM中。在设计中,可采用简单的译码电路,使数据RAM 和程序RAM共享同一片物理存储器(如果是8位,则需两片),以减少印制电路板的面积。
引导加载程序一般被固化在片内ROM中,但 'C203片内并无ROM。那么,引导加载程序究竟位于何处?原来, 'C203片内有一块映射至地址FF00H处的PLA,其中存放有这段程序。利用XDS510仿真器,执行RESET功能,即可看到这段引导加载程序。
由于被加载程序存放在映射至32K全局数据空间的8位(一个16位字被拆成连续的两个8位字节)存储器中,因此被加载程序的容量限制在16K字以下。该容量对于一般应用已经足够,但一旦应用程序超出这个范围,片内原有的引导加载就不再适用。为此,我们编写了一段扩展加载程序,目的是支持0~64K字范围内的用户程序加载。上电后,片内引导加载程序首先将这段扩展程序加载到RAM中,再由这段扩展程序将最终的用户程序加载到RAM中运行。下面具体介绍相关的硬件电路和软件设计。
3 硬件设计
3.1 FLASH的选择与配置
鉴于 FLASH 存储器的可多次擦写、大容量、低价格,为此选择采用 TI 公司的 TMS28Fxxx 系列。为了能够存放最大 64K×16 位字的用户目标程序以及另外的扩展加载程序,最终决定采用 TMS28F020 (以下简称 28F020 )。为了提高目标板的应用范围并充分利用 FLASH 的剩余空间,我们还在 28F020 的剩余空间中存放了一段简单的监控程序,可通过 C203的异步串口与 PC 机进行通信,以进行简单的调试。 28F020 的配置如图 1 。
3.2 FLASH译码电路设计 涉及 28F020 的译码电路,共有 4 个引脚需重点考虑: 3.3 静态RAM译码电路设计 为支持最大范围的程序和数据空间寻址,我们采用了两片 128K×8 位的 SRAM 。如果可得到 128K×16 位的 SRAM ,则只需一片,可进一步减少 PCB 板的面积。关于这部分的译码电路,重点需解决片选信号。由于程序和数据共享这两片 SRAM ,故片选逻辑可表示为 图4 片内引导加载支持的目标程序格式 4.1 目标程序格式 |
|
图2 28F020的部分译码电路 图3 628128的部分译码电路 图 5 扩展引导加载支持的目标程序格式 |
片内引导加载程序支持的目标程序应符合如图 4 所示的格式。开始的 4 个字节分别存放目的地址和目标程序长度。 6.63 以上版本的汇编工具包支持这 4 个字节的自动插入,而 6.60 及以下版本则需手工计算并编辑目标代码以符合这种格式。
由于扩展引导加载程序需考虑支持64K以上的用户程序,故需要采用4个字节来存放最终用户目标程序长度,相应的被加载程序格式见图5。
其中,程序长度N=(字节数/2-1);由于片内引导加载程序退出时将程序转移至0000H处,故目的地址只能为0000H。也就是说,片内引导加载程序将首先把28F020中的扩展引导程序加载至程序空间的0000H处。为此,扩展引导程序在开始运行时应首先将自身复制到程序空间的高端,从而为进一步加载最终用户程序让出空间。
4.2 程序流程图
扩展加载程序流程图如图6所示。
图6 扩展加载程序流程图
4.3 复制自身至高端
扩展加载程序如何将自身复制至程序空间高端,是本软件设计要点之一。 TMS320C2xx 不支持程序空间中的指令移动,但允许程序空间和数据空间之间进行数据传送。为此,可考虑利用 TMS320C203 的片内 RAM B0 块,该块可由软件配置为数据或程序存储器。首先,将 B0 块配置为数据存储器,循环利用 TBLR 指令将程序空间 0000H 开始的扩展加载程序读至数据空间 0200H 开始的 B0 块中;移动完毕,再将 B0 块配置为程序存储器( FF00H 开始)。相关代码如下:
.text
XFER_BOOT:
;Config bLOCk B0 to data(0x200H-0x2FFH)
CLRC CNF
MAR *, AR1
;Load B0 start address 0x200H to AR1
LAR AR1, #B0_SADDR
; Load the start address of extended
;boot loader to ACC
LACC #boot_end
;start address-end address=length
SUB #boot_start
SACL TEMP
LACC #boot_start
RPT TEMP
TBLR *+
; Config block B0 to program(FF00H)
SETC CNF
B BOOT
.sect "bootext"
; the start address of extended boot loader
.label boot_start
BOOT:
...( 扩展加载程序主体 )
; the end address of extended boot loader
.label boot_end
4.4 存储块边界考虑
扩展加载程序以 32K 为单位将 28F020 高半部中的用户程序分块传送到 SRAM 中。并且, RPT n (重复)指令是将后续指令重复执行 n+1 次。在此过程中,要特别注意边界条件。为此,以下两点应重点考虑:
1. 即使长度高位字 Nh=0 ,但如果长度低位字 Nl ≥ FFFAH ,用户程序也将占据 28F020 中第三块 32K 用户程序空间的开头几个字节;
2. 如果长度高位字 Nh> 0 ,在考虑长度低位字 Nl 时,需加上由于目的地址和长度占据的 6 个字节。
参 考 文 献
1 Texas Instruments User’s Guide of TMS320C2xx. TI, 1995
2 Texas Instruments Data Sheet of TMS320C203/209. TI, 1995
型号 | 厂商 | 价格 |
---|---|---|
EPCOS | 爱普科斯 | / |
STM32F103RCT6 | ST | ¥461.23 |
STM32F103C8T6 | ST | ¥84 |
STM32F103VET6 | ST | ¥426.57 |
STM32F103RET6 | ST | ¥780.82 |
STM8S003F3P6 | ST | ¥10.62 |
STM32F103VCT6 | ST | ¥275.84 |
STM32F103CBT6 | ST | ¥130.66 |
STM32F030C8T6 | ST | ¥18.11 |
N76E003AT20 | NUVOTON | ¥9.67 |