基于ADSP218x系列和TMS320C62x系列实现串行引导方案的设计

处理器/DSP

871人已加入

描述

引 言

在某型光电跟踪产品中,由于需要对抗各种人工干扰和背景干扰,使得导引系统需要处理的信息量成倍增加,对导引系统的实时处理性能提出了更高的要求。针对这种情况,导引系统采用了双DSP系统的信息处理方案,DSP选用AD公司的ADSP218x和TI公司的TMS320C62x。ADSP218x进行目标信号的采样和外围控制信号的输入、输出,TMS320C62x专门进行目标的鉴相、各种抗干扰算法的计算,这样TMS320C62x不受外设服务中断影响,可以更好地发挥计算效率,提高了导引系统的实时处理性能。本文针对ADSP218x系列和TMS320C62x系列组成的双DSP系统,提出了一种串行引导方案,同时给出了其硬件及软件的具体实现方法。

1 DSP引导模式

1.1 TMS320C62x引导模式

TMS320C62x系列DSP提供了三种引导方式:

(1)无引导过程:DSP直接从地址0开始执行代码;

(2)ROM方式引导:由DMA/EDMA控制器从外部CE1空间中的ROM中拷贝固定数量的代码到地址0,启动时也可选择ROM的宽度,拷贝结束后,CPU从地址0开始运行;

(3)HPI方式引导:由外部主机通过HPI对芯片的存储器空间进行初始化,初始化结束后,外部主机通过HPI中断唤醒TMS320C62x,CPU开始从地址0运行。

所有这些设置项都是在芯片复位的时候才进行检查。一旦复位信号有效(reset=0),所有的三态输出管脚恢复为默认状态,然后在reset信号的上升沿处检查设置管脚BOOTMODE[4:0]的状态,自举逻辑开始生效。

1.2 ADSP218x引导模式

ADSP218x系列DSP提供了三种引导方式:

(1)无引导过程:DSP直接从地址0开始执行代码;

(2)BDMA方式引导:复位后DSP以BDMA方式首先从字节存储空间拷贝前32字的程序代码,拷贝完程序从程序存储地址0开始执行代码。

(3)IDMA方式引导:复位后DSP以IDMA方式可以存取任意数量的内部存储空间,当内部程序存储地址0被写入时,程序从程序存储地址0开始执行代码。

以上设置都是在芯片复位的时候才进行检查,当复位信号有效时(reset=0),所有的三态输出管脚恢复为默认状态,然后在reset信号的上升沿处检查设置管脚MODE[A:D]的状态,自举逻辑开始生效。

1.3 双DSP系统串行引导模式

根据以上两种DSP的引导模式,选用串行引导模式,即把TMS320C62x作为主处理机,外围接8位宽的FLASH,采用ROM方式引导,TMS320C62x和AD-SP218x的程序都固化在FLASH中,ADSP218x作为从处理机,采用IDMA方式引导,并且两个DSP之间的通讯也采用IDMA方式。这样TMS320C62x可以把ADSP218x作为一个存储区来访问,既去掉了握手软件,提高了工作效率,又可以去掉ADSP218x外围的FLASH,减少了硬件花销。主要硬件连接示意图如图1所示。

代码

双DSP系统串行引导的过程如下:系统上电后,TMS320C62x从位于CE1空间FLASH中以ROM引导的方式复制一定数量的TMS320C62x程序至地址为Ox00000000的内部程序存储空间。当程序复制完毕后,TMS320C62x开始从0x00000000起始的程序地址开始执行程序,利用这段程序,把剩下的程序从FLASH中读出,TMS320C62x进入到正常工作状态。然后TMS320C62x负责将存储在FLASH中的ADSP218x的运行程序读出,通过IDMA接口发送至ADSP218x的片内PM存储区,执行对ADSP218x的程序装载。当ADSP218x引导完毕后,ADSP218x运行装入的程序进入正常的工作状态,至此系统串行引导完毕。

2 双DSP系统串行引导的实现

2.1 硬件连接

TMS320C62x的低16位数据线ED15~0与ADSP218x的IAD15~0连接,TMS320C62X的低8位数据线ED7~0与FLASH的数据线D7~0连接。TMS320C62x的BOOTMODE[4:0]引脚配置如下:

代码

由于TMS320C62x与ADSP218x的IDMA通讯控制需要译码,因此加了一片CPLD,硬件连接图如图2所示。片内的逻辑方程为:

代码

2.2 TMS320C62x启动程序代码的创建

TMS320C62x启动程序代码包含以下几个部分。

2.2.1 中断向量表vectors.asm

中断向量表缺省保存在TMS320C62x内部RAM的从0地址开始长度为0x200字节的空间,上电或复位后,芯片自动运行复位中断。因此,复位中断向量中应包含跳转到引导程序(_boot)的语句,引导程序的主体在boot.asm中定义。部分程序如下:

代码

2.2.2 自引导的汇编程序boot.asm

自引导汇编程序主要是配置基本的寄存器,并将保存在外部FLASH中的二进制程序拷贝到DSP内部的RAM中再执行。汇编程序如下:

代码

2.2.3 主程序main.c

主程序是DSP要实现具体功能的主体,其定义的主函数main()经编译后在函数_c_int00中调用,因此在上面的引导程序结束时,将跳转到函数_c_int00,即主函数main执行。另外在主程序中,还要包含把ADSP218x的应用程序从FLASH传送到ADSP218x内部存储区的子程序。

2.2.4 链接命令程序link.cmd

链接命令程序用于定义DSP系统各存储区的开始地址及大小,并分配编译后各段到相应的存储空间,link.cmd内容如下:

代码

2.3 TMS320C62X通过IDMA接口把ADSP218x程序拷贝到内部存储器的方法

从TMS320C62x来看,IDMA接口只有三个寄存器,分别是IDMA控制寄存器IDMA_IAL,IDMA读数据寄存器IDMA_IRD和IDMA写数据寄存器ID-MA_IWR。

该三个寄存器的定义如下:

代码

访问ADSP218x的内存单元一般需要三个步骤:

第一步:向IDMA控制寄存器写该数据单元所在的页面。编程只需要向IDMA_IAL控制寄存器写入恰当控制字即可。例如要向APSP218x的PM区的第5页写数据,则应该有下面的命令:

IDMA_IAL=0x8050;

第二步:向IDMA控制寄存器写该数据的地址。

如果是PM区,则该数据的地址为当前地址,如果是DM区,必须将当前地址加0x4000。例如要向PM区的0x0809区写数据,则应该有下面的命令:

IDMA_IAL=0x0809;

如果向DM区写数据,则有命令:

IDMA_IAL=0x0809+0x4000;

第三步:读写数据。如果是读数据,例如要将数据读入到unsigned short XX单元,则应该用下面的命令:

XX=(unsigned short)IDMA_IRD;

如果是写数据,例如要将数据unsigned short YY写入某地址单元,则应该用下面的命令IDMA_IWR=YY;

注意以后每读取或写数据,IDMA接口的地址指针自动加1。

TMS320C62x通过IDMA口,在启动后把AD-SP218x的应用程序拷贝到ADSP218x的内部存储器中。ADSP218x的应用程序作为一个asm文件供TMS320C62x应用软件调用,具体格式为:

代码

2.4 FLASH的在线烧写

上面的工程文件经CCS系统编译、汇编后生成可执行COFF文件(.out),它需要转换成可供CCS调用的数据文件,通过JTAG口在线写入到FLASH中。利用TI公司的HEX6x.exe工具,将生成的.out文件转化成.hex输出文件。由于该HEX6x.exe工具是提供给EPROM编程器的,用EPROM编程器可直接烧写.hex文件。但对于FLASH的在线系统编程来说,生成的.hex文件不能直接使用,必须再编写一段程序将.hex的文件头去掉,分离出数据文件,最后才能由FLASH的在线烧写程序将最终的数据文件烧写到FLASH中。

hex6x命令行的格式为:

代码

命令执行后会产生三个文件,这三个文件再经过转换融合成一个文件flash.asm,格式如下:

代码

3 结 语

该系统经过单板和整机的高低温、振动、电磁兼容试验验证,系统在上电后能够100%的正常启动,性能稳定。该方法为编写由TMS320C62x和ADSP218x组成的双DSP系统的引导程序拓宽了思路,其设计思想对其他型号组成的双DSP系统的设计也具有借鉴意义。

责任编辑:gt

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分