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个引脚需重点考虑:(片选)、A17、A16和A15。为了给用户程序留出最大可用的数据空间,被加载的程序被映射至32K的全局数据空间。为此,需将28F020分成八个32K页,这可由A17、A16和 A15来区分。'C203共有四个通用I/O引脚,IO0~IO3,复位后这四个引脚缺省配置为输入。可将IO2、IO1上拉后直接连至28F020的 A15和A16,并在扩展的加载程序中用软件来控制IO2和IO1引脚的状态,从而达到控制A15和A16引脚之目的。由于全局数据空间与局部数据空间共享数据空间的高32K地址(8000H- FFFFH),因此 'C203的A15在加载期间一直为高电平,而用户程序又位于28F020的高端(A17为高),为此考虑将 'C203的A15直接连至28F020的A17。但扩展引导加载程序位于28F020的低端(A17为低),因此可将 'C203的A15和IO0(上拉后)逻辑“与非”后连至28F020的A17。上电后,A17为低电平,片内引导加载程序从28F020的 1,8000H处加载扩展的加载程序;然后,扩展加载程序执行,配置IO0、IO1、IO2为输出,且设置IO0为低电平,使得A17为高电平,传送第一块32K×8位的用户程序;再依次设置相应的IO1、IO2,实现软分页。另外,根据图1中的存储器配置,可在IO1和28F020的A16间连线上设置一接地跳线,以在复位时分别使能监控程序和扩展引导加载程序的加载。在加载程序访问全局数据空间期间,(总线请求)信号一直有效,因此可将用作28F020的片选信号。相关译码电路见图2。
图2 28F020的部分译码电路 3.3 静态RAM译码电路设计 为支持最大范围的程序和数据空间寻址,我们采用了两片128K×8位的SRAM。如果可得到128K×16位的SRAM,则只需一片,可进一步减少PCB板的面积。关于这部分的译码电路,重点需解决片选信号。由于程序和数据共享这两片SRAM,故片选逻辑可表示为=(·)。但由于在访问全局数据期间,也为有效低,为防止访问全局数据空间时对SRAM的错误访问,可采用信号封锁SRAM的信号。因此,片选逻辑最终可表示为=(·)+ 。另外,'C203的信号在数据空间无效期间一直为高,可直接连至628128的A16。从而,在为低期间,数据空间有效,并占据128K SRAM中的低64K;在为低期间,程序空间有效,占据高64K。其中一片628128的译码电路见图3。 图3 628128的部分译码电路
4 软件设计 4.1 目标程序格式 图4 片内引导加载支持的目标程序格式 图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
|