---世纪新锐文档区欢迎你的到来!交流经验 资源共享!如果你有网站 欢迎转载 更欢迎链接 谢谢你!

芯锐科技——明智之选 好伙伴!
    <--- 返回

TMS320C203扩展引导

加载的设计与实现

  本文介绍了TI公司的TMS320C203芯片特点,对其引导加载功能进行了扩展实现。

   关键词     TMS320C203      引导加载       boot loader

广告:>>

   TMS320C2xx是美国TI(德州仪器)公司继TMS320C2xTMS320C5x之后推出的一种低价格、高性能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个引脚需重点考虑:lzh8.GIF (79 bytes)(片选)、A17A16A15。 为了给用户程序留出最大可用的数据空间,被加载的程序被映射至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间连线上设置一接地跳线,以在复位时分别使能监控程序和扩展引导加载程序的加载。在加载程序访问全局数据空间期间,lzh7.GIF (83 bytes)(总线请求)信号一直有效,因此可将lzh7.GIF (83 bytes)用作28F020的片选信号。相关译码电路见图2。

3.3 静态RAM译码电路设计

   为支持最大范围的程序和数据空间寻址,我们采用了两片128K×8位的SRAM。如果可得到128K×16位的SRAM,则只需一片,可进一步减少PCB板的面积。关于这部分的译码电路,重点需解决片选信号。由于程序和数据共享这两片SRAM,故片选逻辑可表示为lzh8.GIF (79 bytes)=lzh10.GIF (86 bytes)·lzh9.GIF (85 bytes))。但由于在访问全局数据期间,lzh9.GIF (85 bytes)也为有效低,为防止访问全局lzh7.GIF (83 bytes)数据空间时对SRAM的错误访问,可采用信号封锁SRAMlzh8.GIF (79 bytes)信号。因此,片选逻辑最终可表示为lzh8.GIF (79 bytes)=lzh10.GIF (86 bytes)·lzh9.GIF (85 bytes))+ lzh7.GIF (83 bytes)。另外,'C203lzh9.GIF (85 bytes)信号在数据空间无效期间一直为高,可直接连至628128A16。从而,在lzh9.GIF (85 bytes)为低期间,数据空间有效,并占据128K SRAM中的低64K;在lzh10.GIF (86 bytes)为低期间,程序空间有效,占据高64K。其中一片628128的译码电路见图3

lzh4.GIF (1313 bytes)

图4 片内引导加载支持的目标程序格式


 
4 软件设计

4.1 目标程序格式

 

lzh1.GIF (2950 bytes)

lzh2.GIF (2534 bytes)

图2   28F020的部分译码电路

lzh3.GIF (1097 bytes)

图3   628128的部分译码电路

lzh5.GIF (1657 bytes)

5 扩展引导加载支持的目标程序格式


  片内引导加载程序支持的目标程序应符合如图4所示的格式。开始的4个字节分别存放目的地址和目标程序长度。6.63以上版本的汇编工具包支持这4个字节的自动插入,而6.60及以下版本则需手工计算并编辑目标代码以符合这种格式。
   由于扩展引导加载程序需考虑支持64K以上的用户程序,故需要采用4个字节来存放最终用户目标程序长度,相应的被加载程序格式见图5。
   其中,程序长度N=(字节数/2-1);由于片内引导加载程序退出时将程序转移至0000H处,故目的地址只能为0000H。也就是说,片内引导加载程序将首先把28F020中的扩展引导程序加载至程序空间的0000H处。为此,扩展引导程序在开始运行时应首先将自身复制到程序空间的高端,从而为进一步加载最终用户程序让出空间。

4.2 程序流程图

   扩展加载程序流程图如图6所示。

lzh6.GIF (8933 bytes)

图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,但如果长度低位字NlFFFAH,用户程序也将占据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

 

 

21XR.COM 版权所有 联系我们