摘 要: 本文在简要介绍了Motorola DSP56300系列和Motorola DSP56311后,结合信号处理中的常用算法FFT(快速傅立叶变换)说明了软件开发的过程,最后用作者使用DSP56311评估板开发的控制模型汽车运动的实例,说明了DSP56311软、硬件结合的开发过程,并给出了实例的源程序。
关键词: Motorola DSP;硬件结构;开发工具
当今社会是信息化的社会,面对海量信息,使用计算机进行处理成为首选。众所周知,计算机只能处理数字信号,因而在一定程度上,可以说信息化的基础是数字化,而数字化的核心技术之一是数字信号处理。数字信号处理的任务越来越多地应用DSP来完成,DSP技术已经日益受到人们的关注并且得到了迅速发展。
作为全球第一的嵌入式处理器制造商,摩托罗拉公司于1997年推出了24位DSP56300系列的首枚芯片DSP56301,并不断升级,如图1所示。本文作者所在实验室有幸于2001年11月获赠Motorola
DSP56311开发装置及其相关开发工具。下面,作者将结合近两年的使用和开发经验,简要介绍Motorola DSP56300系列和DSP56311,并结合FFT说明软件调试过程,最后给出一个使用DSP56311评估板开发的控制模型汽车运动的实例。
图1 DSP56300系列(略)
Motorola DSP56300系列
对于许多通信基础设施和网络设备的生产厂商来说,DSP56300系列是数字信号处理器的选择之一,该系列24位DSP提供了大容量的片内存储器、滤波器、协处理器以及优异的性能与体积、价位、功耗比。通过设计和生产的革新,Motorola公司正致力于扩展DSP56300系列以提供更新的特点、更优异的性能,诸如:更快的速度,更高的集成度,更低的电压和功耗等。生产一个DSP芯片要综合考虑以上各点,才能获得优异的性能(见图2)。
图2 DSP应具有的性能(略)
DSP56300系列的主要特征如下:
⑴兼容性-与DSP56000系列兼容,可向上移植;
⑵快速性-内核150MIPS(Millions Instruction Per Second);
⑶片内存储器-DSP56311片内存储器容量高达384KB;
⑷低工作电压-1.8/2.5/3.3V内核电压;
⑸低功耗-1.8V 时0.7mA/MIPS,2.5V时 0.9mA/MIPS;
⑹易编程-24位的指令集,对用户透明的流水线,硬件堆栈扩展,完全嵌入式硬件循环和中断,自动返回中断,以及为高效软件Viterbi解码而设的VSL指令集;
⑺高速指令缓存-1K字高速指令缓存;
DSP56300系列的芯片主要有56301、56303、56307、56309和56311,下面将以本文作者使用的DSP56311为例进行介绍。
Motorola DSP56311
DSP56311是Motorola公司2000年推出的新产品,是24位数字信号处理器,现已投入量产。DSP56311是以DSP56300为内核,具有片内存储器和外围器件的单片结构,有196个引脚,为球形工艺插针阵列(PBGA,Process
Ball Grid Array)的外封装形式。
DSP56311的片内增强型滤波器协处理器(EFCOP,Enhanced Filter Coprocessor)与内核并行工作,明显提高了DSP的整体性能和处理效率,由相应的算法而实现通用滤波技术,很好地支持了在无线通信等技术中的应用。DSP56311还包括了摩托罗拉的边界扫描测试端口和片内仿真端口。DSP56311还具有128K字大容量片内存储器阵列以及EFCOP,非常适合于高端多通道远程通信的应用,比如无线通信、多路语音/数据/传真处理,视频会议以及通用数字信号处理技术。
DSP56311硬件结构
DSP56311主要由24位DSP56300内核、数据ALU、内部总线、存储器扩展区、外围扩展区等组成,其功能模块如图3所示。
图3 DSP56311功能模块图(略)
DSP56311开发工具
Motorola公司为开发DSP56311的科技人员提供了强有力的软件开发工具:Suite56软件包,包括:硬件调试器(Debugger)、软件仿真器(Simulator),可以在Windows
NT、Windows 95、 Hewlett-Packard HP-UX、 Sun OS4、Sun Solaris等多种平台上运行,同时针对C语言、汇编语言以及C语言和汇编语言的嵌套编程,分别有编译器(Compiler)、汇编器(Assembler)和链接器(linker),并提供了友好的人机界面,如图4所示。
图4 Simulator的界面(略)
开发过程
软件开发
在应用时,要生成一个DSP能够运行的程序需要如下步骤:
①编写C语言或汇编语言或二者嵌套的源程序。Motorola DSP所使用的汇编程序在书写的时候采用Windows中的记事本即可,在保存的时候要注意保存成为以
".asm"为后缀名的文件。不同语言的源程序有不同的编译过程。本例使用的是汇编语言的源程序,以下各步均是汇编语言的编译、链接、执行过程,C语言源程序的执行过程要比汇编语言简单很多。
②在dos环境下(对于Windows2000、Windows XP操作系统可以使用C提示符),将当前目录转到源程序所在的目录下,在提示符后面键入asm56300
-b 文件名.asm,回车,屏幕会显示正在编译的过程,检查有无语法和词法方面的错误。编译结束时,若有错误,使用asm56300
-l 文件名.asm命令可以显示错误的位置,相关的提示,修改直至通过编译,会显示没有错误,没有警告。此时,系统就会自动在源程序所在路径生成以
".cln" 为后缀名的中间文件。
③然后,在提示符后面键入dsplnk 文件名.cln,回车,会显示正在链接的过程,链接结束时,会自动在源程序所在路径生成一个与源程序同名的以".cld"为后缀名的目标文件。此".cld"文件就可以用于在软件仿真器
Simulator 或硬件调试器debugger上进行进一步的调试。
④如果只是调试程序,用软件仿真器就可以了。这时,除了必备的PC机或工作站环境不再需要配备其他硬件。它能实现寄存器/存储器状态指示/变更等操作,可模拟DSP的全部指令。此外,它还具备一些调试功能,如:单步(Single
step)调试、断点(Break-point)调试等。但是,软件模拟并不是在某一DSP器件上仿真,所以不能实时处理。
FFT是数字信号处理中最基本、应用最广的算法,下面以一常见波形的FFT为例说明软件开发过程:
Motorola DSP56311芯片提供了并行操作,能在一个指令周期内完成一次乘法和一次加法运算,而且提供实现FFT所必需的比特反转指令,而这些都是普通的PC机所不具备的,使得FFT在DSP56311芯片上运行的速度将更快。因此,为了充分发挥DSP56311芯片的优势,用汇编语言编程。要在DSP56311处理器上实现FFT,可分为以下几步进行:
1.DSP56311汇编宏指令产生"波形"因子,sincos.asm;
2. DSP56311汇编宏指令完成位倒置重排输入序列x(n), bitrev.asm;
3. 在DSP56311处理器上实现FFT蝶形运算,buter1.asm;
4.用DSP56311处理器计算FFT组的偏离和计算系数的偏离,FFT1.asm;
5.实现完整的N点FFT。
为了测试设计的FFT算法是否正确,进入DSP56300 Software Simulator(GUI)进行调试。
利用 “File” 菜单中“Set-Path” 命令将调用目标程序的路径选择为已经生成好的“.cld” 文件所在的目录。再用
“File”菜单中 “Load-Memory COFF” 命令调用生成的“.cld” 文件。
执行 "Reset" 命令后,利用 "Next" 命令一步一步的执行程序。针对每小段程序,可以编写一个测试程序,给出适当的输入值,然后调试、执行,观察结果,由此分析确定程序编写的正确与否,由于是进行单步调试,因此,若有错误,能够及时发现并改正。
在本FFT程序中,输入序列的实部元素存在X存储器单元$18~$1f中。每个程序调用sincos宏指令以产生正余弦查找表,其中余弦表的值存在X存储器单元$8~$b中,而正弦表值存在Y存储器单元$8~$b中。程序调用bitrev宏指令按倒位次序存贮,实部倒位元素存在X存储器单元$0~$7中,虚部倒位元素存在Y存储器$0~$7中。FFT.asm调用FFT1在倒位输入序列上完成8点FFT,其中正常次序输入序列的实部元素存在X:$0~$7中,虚部元素存在Y:
$0~$7中。
进行编译、链接产生fft.cld,在软件仿真器中装载(load) fft.cld,然后开始仿真执行,输入如下指令,将默认的十六进制表示改为易读的十进制小数形式:
radix f x:$18..$1f
radix f y: $18..$1f
radix f x:$0..$7
radix f y:$0..$7
在X和Y存储器中可以观察到如下结果:
输入序列实部元素:
X:$18 0.1000000 0.1000000 0.0500000 0.1000000
X:$1C 0.1000000 0.0500000 0.1000000 0.1000000
输入序列虚部元素:
Y:$18 0.0000000 0.0000000 0.0000000 0.0000000
Y:$1C 0.0000000 0.0000000 0.0000000 0.0000000
输出序列实部元素:
X:$0 0.7000000 0.0353554 0.0500001 -0.0353554
X:$4 0.0000000 -0.0353554 0.0500001 0.0353554
输出序列虚部元素:
Y:$0 0.0000000 0.0146446 0.0500001 -0.0853555
Y:$4 0.0000000 0.0853555 -0.0500001 -0.0146446
以上结果表明所编写的FFT程序是正确的。
软件和硬件开发相结合
下面以作者所做的基于DSP56311EVM(评估板)控制模型汽车运动的实例,加以详述。
本例的目的是使用DSP控制代替手动控制模型汽车的运动 。模型汽车有一套完整的发送接收装置,在使用DSP控制时,通过继电器电路,连接到模型汽车的控制电路,由DSP输出高、低电平信号,控制继电器线圈的吸合,继而控制模型汽车的运动。但由于DSP输出的功率信号很弱(500mW左右),不足以驱动继电器线圈吸合,所以在实际应用中,加入一运算放大电路,如图5所示。
图5 DSP控制模型汽车运动的硬件原理图(图)
DSP56311有多达34个用户可编程控制的通用输入输出接口(GPIO),诸如HI08、SCI、ESSI0、ESSI1等,本例中使用HI08(主机接口Host
Interface 08)作为输出控制信号的接口。
HI08端口若要作为输入输出模式使用,则要求它所对应的端口控制寄存器HPCR(Host Port Control Register)的第6位-启动主端口HEN(Host
Enable)置零;但仅把第6位HEN置零还不够,第0位-启动输入输出位HGEN(Host 输入输出 Port Enable)还需置一,因为该位是启用输入输出模式的控制位,它若为零,则作为输入输出的信号是断接的,输出呈高阻态;只有置一,才能得到要求的输入/输出。
在将端口HI08设为输入输出模式后,还必须设置另外两个寄存器,分别是:主端口数据寄存器HDR(Host Port Data Register)和主端口数据方向寄存器HDDR(Host
Port Data Direction Register)。主端口数据寄存器是将数据(0或1)写入其中,这些数据就是将来要输出的数据:0表示低电平,输出时就是0V;1表示高电平,输出时就是+3.3V。主端口数据方向寄存器是用来控制该端口是作为输入使用,还是作为输出使用的:0表示输入;1表示输出。需要注意的是,主端口数据寄存器和主端口数据方向寄存器需要配合使用。对某一位的主端口数据寄存器(HDR)和主端口数据方向寄存器(HDDR)的配合使用,可简要表示如表1。
表1:HDR和HDDR的配合使用(略)
数据写入寄存器有几种方法,常用的两种方法分别是:对某一位的操作bset和bclr,和数据整体的移入movep。
HI08在评估板上对应的是J12,并且硬件上的管脚1~8对应于主端口寄存器中的0~7位。
自制的电路板由相同的四个子模块组成,分别为控制向前、向后、向左、向右运动的子模块,还有两个接口,分别接DSP的控制信号和电源,采用protel设计、PCB制板。
在进行硬件调试时,编译、链接过程如前所述,然后打开硬件调试器(Hardware Debugger),注意这时,DSP应连接电源,并与PC机相连。在文件(file)菜单下,设置源程序所在路径(path),在装载(load)菜单下,装载编译、链接好的cld文件,执行
"Reset" 命令后,单击执行(execute)菜单里的运行(run),或者工具栏里的运行(go),若要单步执行,利用
"Step" 命令一步一步的执行程序,通过观测寄存器、存储器内容,能够及时发现并改正错误,实现硬件调试。
源程序
该实例的源程序用汇编语言编写,如下:
//控制模型汽车向前运动子程序
org p:0
include "ioequ.asm" ;调用寄存器地址定义
bclr #6,x:M_HPCR ;设置HI08端口控制寄存器
bset #0,x:M_HPCR
movep #1,x:M_HDR ;设置管脚1作为输出
movep #1,x:M_HDDR ;设置管脚1高电平
//控制模型汽车向左运动子程序
org p:$1000
bclr #6,x:M_HPCR
bset #0,x:M_HPCR
movep #4,x:M_HDR ;设置管脚3作为输出
movep #4,x:M_HDDR ;设置管脚3高电平
//8字型运动源程序
org p:$1000
include "ioequ.asm"
bclr #6,x:M_HPCR
bset #0,x:M_HPCR
movep #5,x:M_HDR
movep #5,x:M_HDDR
delay_1 ;延迟子程序
do #4000,delay_loop1
rep #4000
nop
delay_loop1
rts
bclr #6,x:M_HPCR
bset #0,x:M_HPCR
movep #9,x:M_HDR
movep #9,x:M_HDDR
delay_2
do #4000,delay_loop2
rep #4000
nop
delay_loop2
rts
实验结果显示,模型汽车可以按照我们设计的要求运动,要改变模型汽车的运动状态,只要修改相应的程序即可。
结束语
随着信息化潮流的推进,电子信息产业正在进行一场数字技术革命,数字技术方案硬件实现的关键技术之一就是数字信号处理器技术,DSP是专为数字信号处理算法、方案实时实现而设计的硬件处理器,已在通信、网络、多媒体、图象、语音、雷达、导航等众多领域得到广泛的应用,DSP已经日益受到业内人士的关注,必将得到极大的发展。
|