SZDSP型开发实验平台54X

更新时间:2023-11-05 16:43:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

SZDSPⅡ型开发实验平台使用指南

第一章. 实验系统标准配置

1、 TI主控板(2X、3X、5X)其中任意一种

2、 ALTERA、LATTICE、XILINX三公司中的任意一种CPLD或FPGA系统模板一块 3、高速或者高精度A/D、D/A板可选 4、CAN总线接口 5、USB接口 6、同步串行口

7、232、485异步串口电路 8、语音芯片TLC320AD50 9、I/O 扩展电路 10、语音电路

11、CPLD、FPGA电路 12、单片机管理单元 13、拨码功能选择电路 14、键盘、液晶屏电路

15、数码、发光二极管显示电路 16、机电控制模块(可选) 17、通信模块(可选) 18、视频模块(可选)

实验仪的开关、插座定义及初始状态 1、 J28是USB接口

2、 J24为CAN总线接口

3、 DB9插座是232异步串行接口 4、 J3是485接口

5、 M3是耳机插孔,语音输出用 6、 M1是麦克风插孔,语音输入用

7、 J31是可外扩的DSP高16位数据和高位地址线接口(位于主板的最左上方),其具体管脚

定义如下:1~8脚是DSP的高位地址线A23~A16;9~24脚是DSP的高16位地址线D31~D16;

8、 J32是可外扩的DSP低16位地址线和数据线接口,其具体管脚定义如下:1~16脚是DSP

的低16位地址线A15~A0;17~32脚为DSP的低16为数据线D0~D15;31脚是电源端+5V,32脚是接地端GND。

9、 J43为DSP F2407的16位A/D引出端,其具体管脚分布如下:1~16是DSP 2407的16

位A/D ADCIN00~ADCIN15;17脚是模拟地AGND,18脚是模拟电压A3.3V。

10、J33是CPLD或FPGA(以下简称CPLD)的I/O脚用来做控制线的输出端,可做二次

开发用,其接法口如下:1~10脚是DSP小系统上的CPLD的I/O引出端,可作为信号的输出用;11~20脚是DSP小系统上的CPLD的I/O引出端,可作为信号的输入输出用;21、31脚是空脚;22脚是DSP的时钟引出端;23、24、25脚分别可作为FLASH的写控制、读控制、片选;26、28脚为DSP小系统上CPLD的全局使能引出端,可作为信号输入也可为全局使能信号;27、30脚为DSP小系统上CPLD的时钟引出端,可作为输入信号也可为时钟输入;29脚是DSP小系统上CPLD的引出端,可作为信号输入;

1

32脚是复位信号RESET。

11、J14、J13、J11、J15、J44、J8、J45、J10是DSP小系统与主板的接口插座,其插入方式是看DSP的小系统板上的P1的方向,使P1(电源插座)在左上方方向对应着往下插。 12、J23、J22是CPLD模块与主板的接口插座(DB25在左边)

13、J18、J16是AD、DA采集卡与主板的接口插座(模拟接口在右边) 14、J29是电源输入端,其管脚具体分布如下:

1、2、3、4脚分别是+5V、-5V、-12V、+12V输入端;5和6脚是接地端。在次主板的

右上角有四个发光二极管分别代表+5V、-5V、-12V、+12V电压的有无,当电压接通时,相应的发光二极管就会亮。

15、J42是DSP F2407的PWM引出端,其管脚具体分布如下:

1~6脚是CAP1~CAP6;7~10脚是T1PWM~T4PWM;11~22脚是PWM1~PWM12;23脚是接地端GND;24脚为电源端3.3V;25、26脚分别是CLKINA、CLKINB;27、28为接地端GND;29、30是电源端5V的VCC。

16、J2是液晶屏数据线和控制线可外扩的接口,其具体管脚分布如下:

1脚是接地端GND;2脚是电源端VCC;3、18脚是亮度调节端;4脚是RS;5脚是R/W;6脚是使能端E;7~14脚是数据线D0~D7;15、16是片选端CS1、CS2;17脚是电源端VCC;19是电源端VCC0;20脚是接地端GND;

17、开关J39(右下角)是DSP与MCU工作时的选择档,当开关往上拨时为单片机对外输

出有效,往下拨时是DSP对外控制有效。

18、开关S33、S34(右上角)分别是+5V与+12V、-12V与-5V电源开关,当开关往下拨时

为电压输入。

19、开关S31(右下角)是选通HPI口时数据的方向选择,开关往上拨表示不选通HPI口,

往下拨为选中HPI口。

2

第二章. 系统硬件单元及模块

此部分为实际硬件连接原理图,图上相同标号表示具有相同的电器连接。

1、语音处理模块 OUTP2#AGNDOUTP2#C1R1520KR161KLM3863LLM3865C100.047PWRDWN2M/S2OUTP2T227212272122722ELEC2AVCC22723R1710AGND227212272222723AGND12342272U3OUTP2#2272222726LM386ELEC1ELEC2E21UE310UAUDIOAUDIOLM3865330UM3U1AUDIOAVCC231AGNDT245T24554321CON5AGNDM412J1VCCVCC503.3V123CON3MCLK2VCC50GNDR1833DG10.1mhC161uf3410MHzE41UE5AUDIOOUT22726AGNDAUDIOR1351K100KR142272522727BCLKX0BFSX0R2333R2433U52GND1AGNDELEC1GNDAGNDLM3863AGND1234876AVCC5LM3865U28765AVCC227272272622725REFP2REFM2AGNDAGNDINP2INM2AVCCAGNDVCC50GNDBDR0BDX01234567891011121314U4REFPFILTREFMMONOUTAUXPAVSSAUXMAVDDINPOUTMINMOUTPAVDDM/SAVSSFSDDVDDFSDVSSSCLKDOUTMCLKDINFCFLAGPWRDWNALTDATARESETAD50227272827262524232221201918171615FILT2AGNDAVCCOUTP2TM/S2BFSX0BCLKR0MCLK2GNDPWRDWN2/RESETINP20.1UBCLKR0BFSR0AGND0.01REFP2C2REFM20.1FILT2C3GNDC40.12272122722C5100P22721INM2C60.1AUDIOAGNDC70.12272622727C8100PINP2INM2C90.001LM3863LLM38630.1M2M1AGND1524AGNDCON232ELEC21CON5R410KR510KR6100R7100KR8100KR910KR105.1KR111KR1210KVCC50C11AGNDCON2 图一 语音处理模块 模块说明:

音频经M2或M1输入后,由2272滤波,通过AD50采集信号,然后由DSP5402

的同步串口0(BDR0、BDX0、BCLKR0、BCLKX0、BFSX0、BFXR0)传输采集过来的数字信号,并由DSP对其进行处理,将处理完成的数据存放在DRAM中,或在被某一条件触发后回放,由LM386对输出信号进行功率放大,最后由M3(耳机)或M4(喇叭)输出。 2、 A/D采样模块

AVCCR4R3L321R5LR11C6CAPC7CAPC9CAPR12REFBREFBSLVDDA18C13REFB321VDDA14C3J9OEGNDDD0DD1DD2DD3DD4DD5DD6DD7+5VCLK123456789101112OEDGNDDGNDREFBD0REFBSD1AGNDD2AGNDD3ANALOGIND4VDDAD5REFTD6REFTSD7VDDAVDDDVDDACLKVDDD5510242322212019181716151413GNDREFBREFBSAGNDAGNDANALOGINVDDA18REFTREFTSVDDA18VDDA14+5VJ321CON2C1CAPD3DIODER8R7RES1123Q12N1893R10RES1ANALOGINR9RES1-5VCAPC10CAPREFTREFTSL321C5CAPCON3C11CAPC12CAPJ5REFTAGNDJ821CON2D5TP3DIODEDIODECAPD4C8VDDA18+5VC14103C4CAPJ13GNDX+5VC15103XGNDC2CAPAGNDCAP21ANALOGIN 图二 A/D采样模块

J10CON3

CON2 3

模块说明:

此模块采用了8位、高速采样(20MHz)的A/D器件TLC5510。模拟信号通过J12插口输入,然后经过A/D采样(J8为最后输入A/D的信号),采用DSP的时钟输入(CLK),由DSP的地址和读写(即图上所标的OE信号)对A/D进行控制,数据输出到DSP的数据线,从而完成A/D的高速采样。 3、D/A转换模块

U1X-12VX+12VX+5VXGND/L1/CSD15D14D13D12D11D10D9D8J1121XAGND1234567891011121314VEEVCCVLLDGND/L1/CSD15D14D13D12D11D10D9D8REFOUTREFINOFFSETVOUTAGNDLDACD0D1D2D3D4D5D6D7AD669AGND2827262524232221201918171615REFOUTREFINOFFSETVOUTXAGNDLDACD0D1D2D3D4D5D6D7J1212BBX+12VU2OUTVOUTAAAAR63212381OP07BBX-12VD2414841486D1OUTX+12V47J4OUT12CON2

图三 D/A转换模块 模块说明:

此模块采用AD公司的高精度16位的D/A转换器件AD669。数据由DSP输入,并由DSP对它进行控制(LDAC、/CS、/L1),经过转换后输出,可由J2插口进行检测。

J5123U12987654321JTD1JTD2JTD3JTD4JTD5JTD6JTD7JTD8VCCRP6JTD3GNDJT1JT2JT3JT412345J4321JJTT2D4J7JTD5JT3JTD6123 JTD2JT1JTD1JTD8J6S2S44、交通灯模块

图四 交通灯模块 模块说明:

此模块既可以由DSP控制,也可以由单片机控制,同时还可以由CPLD直接控制到达运行结果。DSP或单片机对图中JTD1~JTD8送数据(数据与JTD1~JTD8相对应),通过CPLD做逻辑,从而实现模拟交通灯的功能。 5、键盘模块

KEY10S3KEY11S6KEY12S8KEY13S10KEY14S12KEY15S14KEY16S16KEY17S18KEY18S20KEY19S19KEY9S17KEY8S15KEY7S13KEY6S11KEY5S9KEY4S7KEY3S5KEY2KEY1 图五 键盘模块

4

321JJTT4D7GND模块说明:

此模块可做按键输入,其输入信号由系统中的CPLD进行逻辑处理发中断给单片机,同时由CPLD进行编码输出,单片机直接扫描,从而达到按键输入的效果。 6、数码管显示模块

fg10ggndfgnd8ba10abfggbnd7a10fggnd6ba10fggbnd5a10fggbnd4a10fggnd3ba10fggbnd2a10fggnd1ba9876987698769876987698769876ggndfggndfggndfggndfggndfggndfggndfababababababafgeddpegdndegdndcpdabfgceddpegdndcpdabfgceddpegdndcpdabfgceddpegdndcpdabfgceddpegdndcpdabfgceddpegdndcpdabfgceddpegdndcpdabfgceddpcpd12345123451234512345123451234512345RP1987654321abcdefgdpVCCLEDD1LEDD2LEDD3LEDD4LEDD5LEDD6LEDD7LEDD8GND123456789U13IN0IN1IN2IN3IN4IN5IN6IN7GNDOUT0OUT1OUT2OUT3OUT4OUT5OUT6OUT7VHH181716151413121110abcdefgdpVCCLEDW1LEDW2LEDW3LEDW4LEDW5LEDW6LEDW7LEDW8GND123456789U11IN0IN1IN2IN3IN4IN5IN6IN7GNDOUT0OUT1OUT2OUT3OUT4OUT5OUT6OUT7VHH181716151413121110gnd1gnd2gnd3gnd4gnd5gnd6gnd7gnd8VCC 12345abL1L2L3L4L5L6L79876L8bc 图六 数码管显示模块 模块说明:

该模块同样是可由DSP、单片机、CPLD控制显示的模块。工作时可由DSP或单片机对其写数据(十六进制数),例如对数码管的第零位为1时,就可对其送入数据10H,然后通过CPLD译码显示输出。 7 、异步串行口模块

232223262VCC616TXD23212323C14R1 INR2 INT1 INT2 INC1+C1 -2322V+VC-VCGNDC15GND2326GND15VCC 图七 232异步串口模块

模块说明:

该模块可由单片机的串行接收(RXD)和发送(TXD)对它进行数据的接收与发送操作,从而实现异步串行输出。 8、液晶屏显示模块

dednpd8gcdedpgnd7cU9RXD1138111013R1 OUTR2 OUTT1 OUTT2 OUTC2+C2 -2321C132324232512914745RXDTXD123242325C122323GNDRXD1TXD1162738495dednpd6gcdednpd5gcdednpd4gcdedpgnd3cdednpd2gcdednpd1gc

1 5

4.6.1 跟踪/调试程序

1)选择Debut/Restart,重新执行程序

2)不全速运行,而是选择Debug/StepInto或按F8,单步执行.

3)单步执行程序的View/CPU Registers/CPU Register观察主要寄存器的变化。 4)对不熟悉的指令,可查找相应说明。 4.6.2 自己练习的内容

选择Project/Option,找到Define Symbols对话窗,填入FILEIO,然后,重新编译/下载程序,看看有什么变化,如有问题不能解决,请查找CCS的英文帮助手册。 4.6.3 关于出现问题的处理

如果在CCS 的编译连接过程出现问题,CCS都会给出提示,用户可以通过阅读提示,寻找问题出现在什么地方。如果是语法上的错误,请查阅相关的语法资料,如果是环境参数设置上有问题,一般应在Project/Options中进行相应的修改。(新安装程序时的默认设置,不熟悉的用户最好不要随意修改)。如果是下载过程中出现问题,可以尝试Oebug/Reset DSP,或按下硬件上的复位键。 4.7 CCS软件应用和DSP编程 4.7.1 概述

本节介绍DSP应用软件的开发流程和涉及到的软件开发工具。一个DSP应用软件的标准开发流程如图所示。

C源程序 C编程器 汇编源程序

汇编器 宏

COFF目标文件

目标文件库 连接器 运行支持库

COFF执行文件

C5X DSP 交叉参考列表 绝对列表 调试工具

由上图可见,软件开发过程中将涉及到C编译器、汇编器、连接器等开发工具。不过,这里的C编程器不像在PC上开发C程序一样会输出目标文件(.obj),而是输出满足C5X条

16

件的汇编语言(.asm)。而C5X中的C编程效率是较低的,所以它的C编译器才输出汇编程序,让用户可以对该汇编程序进行最大限度的优化,提高程序效率。C编译器将在本章后面介绍,下面从汇编程序开始介绍软件开发流程的各个环节。

编制一个汇编程序,需要经历下列步骤:

(1) 用文本编辑器(Editor)编辑满足C5X汇编器(Assembler)格式要求的汇编源程序

(2) 调用汇编器汇编该源文件,如果源文件中调用了宏,汇编器还会到宏库中搜索该宏。 (3) 汇编之后生成格式为公共目标文件格式(COFF,Common Object File Format)的目标 文件(.obj),称为COFF目标文件.

(4) 调用连接器(Linker)连接目标文件,如果包含了运行支持库和目标文件库,连接器还 会到所保护的库中搜索所需的成员。

(5) 连接之后生成可执行的COFF执行文件(.out)

(6) 将COF执行文件下载到C5XDSP中执行。同时也可借助调试工具(Debugging Tool) 对程序进行跟踪调试和优化,也可利用交叉参考列表器(Cross-reference Lister)和绝对列表器(Absolute Lister)生成一些包含调试信息的表。

下面先介绍汇编文件(.asm)格式。 4.7.2汇编源程序(.asm)格式

C5X的程序以段(Section)为基本单元构成,一个程序文件由若干段构成,每段又由若干语句(Statement)构成。

C5X的程序分为初始化(Initialized)段和未初始化(Uninitialized)段两大类。初始化段可以是程序代码,也可以是程序中用到的常量、数据表等。我们可以从程序下载的角度来理解,初始化就是需要程序空间写数据(代码或数据)的段,如同初始化程序空间一样。而未初始化段为常量,在下载时,这些变量是没有值的。所以无需向程序空间写,只需留出一些空间以便在运行时存放变量的值。所以这段空间在程序未运行前是没有初始化的。

段的名称和属性可以由用户自定义,如果用户不定义,汇编器将按默认的段来处理。C5X汇编器默认的段有3个:“.text”、“.data”、“.bss”。其中,“,text”为程序代码段,而“.data”为数据段,“.bss”为变量段,所以“.text”和“.data”是初始化段,而“.bss”是未初始化段,用户自定义用“.sect”和“.usect”两个汇编指示符来完成。其中“.sect”用于定义初始化段,“.usect”用于定义未初始化段,语法如下:

symbol .set ―section-name‖

symbol .set ―section-name‖,length 4.7.3汇编器

本节介绍C5X汇编器的使用,在编辑好汇编文件后就可调用汇编器对文件进行汇编。先来看看C5X汇编器的情况。

汇编器概述

汇编器把汇编语言源文件汇编成COFF目标文件。TMS320C5X汇编器为:asm500(algebraic assembler)。用于汇编采用C5X的助记符指令编写的源文件:这个汇编器可完成如下工作:

(1) 处理汇编语言源文件中的源语句,生成一个可重新定位的目标文件; (2) 根据要求,产生源程序列表文件,并提供对源程序列表文件的控制;

(3) 将代码分成段,并为每个目标代码段设置一个段程序计数器SPC(Section Progran Counter),并大代码和数据汇编到指定的段中,在存储器中为未初始化段留出空间;

(4) 定义(.def)和引用(.ref)全局符号(global symbol),根据要求,将交叉参考列 表加到源程序列表中;

17

(5) 汇编条件段;

(6) 支持宏调用,允许在程序中或在库中定义宏。

汇编器接受汇编语言源文件作为输入,汇编语言源文件可以是文本编辑器直接编写的

也可以是由C语言竟编译后得到的。

汇编器调用方法

可以在命令行用如下命令格式调用汇编器,也可以在集成开发环境下由CCS调用 asm500(input file (object file (listing file)))(-options)

asm500为调用代数汇编器。

Input file为汇编源文件文件名。如果不写扩展名,汇编器将使用缺省的.asm。

Object file为汇编器输出的COFF目标文件名。如果不写扩展名,汇编器将使用缺省

的.obj ,如果连目标文件名都不写,汇编器将使用输入的文件名作为目标文件名。

Listing fiel为汇编器输出的列表文件名。如果不写列表文件名也不写列表选项—1或

-X,汇编器将不会生成列表文件。如果有列表文件名,将生成列表文件;如果没有列表文件名,而有列表选项,汇编器将使用输入文件名生成扩展名为.list的列表文件。

Options为汇编选项。选项不分大小写,可以放在命令行中汇编命令之后的任何地方。只要有连字符“—”就作为选项处理。不带参数的单个字母选项可以组合在一起,如—lc等效与—1—c。而带有参数的选项,如—1,则必须单独指定。 4.7.4 COFF目标文件

TMS320C5X的汇编器和连接器都会生成公共目标文件格式(COFF,Commimn Object File Format )的目标文件。在本章中,将汇编器生成的文件称为COFF的目标文件,将连接器生成的文件称为COFF执行文件。目前,COFF目标文件格式已被广泛使用,因为它支持模块化(段)编程,能够提供有效灵活的管理代码段和目标系统(Target System)存储空间的方法。 COFF文件结构 1、一个文件头

长度为22字节,包含COFF文件结构的版本号,段头的数量,创建日期、符号表起始 地址和入口数量、可选文件头的长度等信息。 2、 可选的文件头信息

由连接器生成,包含执行代码的长度(字节)和起始地址、初始化数据的长度和起始地址、未初始化段的长度、程序入口地址等信息,以便在下载是进行重定位。 3、 各个段的头信息列表

每个段都有一个头,用于定义各段在COFF文件中的起始位置。段头包含段的名称、物理地址、虚拟地址、长度、原始数据长度等信息。 4、每个初始化段的原始数据

包含每个初始化段的原始数据,即需要写入程序存储空间的代码和初始化数据. 5、每个初始化段的重定位信息

汇编器自动生成各初始化段的重定位入口信息,连接时再由连接器读取该入口信息并结合用户对存储空间的分配进行重定位. 6、 每个初始化段的行号入口(entry)

主要用于C语言程序的符号调试.因为C程序先被编译为汇编程序,这样,汇编器就会在汇编代码前生成一个行号,并将该行号映射到C源程序里相应的行上,便于调试程序。 7、一个符号表

用于存放程序中定义的符号的入口,以便调试。

18

8、一个字符串表

表中直接使用符号名称:当符号名称超过8个字符时,就在符号表中使用指针,该指针指向字符串表中对应的符号名称。 段的顺序

汇编器 在将汇编源程序汇编成COFF目标文件时,将按“.text..data.用户自定义初始化段、.bss.用户自定义未初始化段”的顺序将各段放入生成的COFF文件中。

因为未初始化段(.bss和.usect)仅仅是用于在存储空间中保留空间,并没有代码或数据,所以未初始化只有段头,而没有原始数据、重定位信息和行号等。另外,如果程序中没有使用缺省的段(.text,.data和.bss),那么它们在COFF文件中也没有原始数据、重定位信息和行号等,因为它们的原始数据长度为零。 4.7.5 链接器

汇编器生成COFF目标文件后,就可以调用链接器进行链接了。本节介绍C5X链接器的使用。 链接器概述

C5X的链接器能够把COFF目标文件链接成可执行文件(.out)。它允许用户自行配置目标系统的存储空间,也就是为程序中的各段分配存储空间。链接器能根据用户的配置,将各段重定位到指定的区域,包括各段的起始地址、符号的相对偏移等。因为汇编器并不关心用户的定义,而是直接将“.text”的起始地址、符号的相对偏移等,因为汇编器并不关心用户的定义,而是直接将“.text”的起始地址设为00 0000h,后面接着是.data和用户自定义段。如果用户不配置存储空间,链接器也将按同样的方式定位各段。

C5X的链接器能够接受多个COFF目标文件 (.obj),这些文件可以是直接输入的,也可以是目标文件库(obiect library)中包含的。在多个目标文件的情况下,链接器将会把各个文件中的相同段组合在一起,生成COFF执行文件。

用链接器链接目标文件时,它要完成下列任务: ● 将各段定位到目标系统的存储器中; ● 为符号和各段指定最终的地址;

● 定位输入文件之间未定义的外部引用。

用户可以利用链接器命令语言来编制链接器命令文件(.cmd),自行配置目标系统的存储空间分配,并为各段指定地址。常用的命令指示符有MEMORY和SECTIONS这两个,利用它们可以完成下列功能:

● 为各段指定存储区域; ● 组合各目标文件中的段;

● 在链接时定义或重新定义全局符号。 链接器调用方法

调用链接器的命令格式为:

Ink500 (-options)filenamel??filename n

其中.Ink500为链接器调用命令。Filename为输入文件名,可以是目标文件、链接器 命令文件和库文件。输入文件的缺省扩展名是.obj。使用其他扩展名时必须显示指定。链接器能够确定输入文件是目标文件还是包含链接器命令的ASCLL文件。连接器的缺省输出文件名是.a.out。

Options为链接器的选项,用于控制链接器操作,可以放在命令行或链接器命令文件的 任何地方。链接器的调用方法有下列4种:

1、 定选项和文件名。例如:Ink500-o link.out file1.obj file2.obj. 2、 输入Ink500命令,在链接器给出的提示符下输入相应内容; Command

19

files: 可以输入一个或多个目标文件;Object files(.obj):可以输入一个或多个目标文件,文件名之间用空格或逗号隔开;Output file(a.out)Option:链接器输出文件名,缺省为a.out;Option:选项可以在命令行中给出,也可以在这里给出。

3、 把目标文件名和选项放入一个链接器命令文件。假定一个命令文件linker.cmd包 含有以下几行: -o link.out

file1.obj file2.obj

在命令行运行链接器:Ink500 linker.cmd 。则链接器链接两个文件fild1.obj和file2.obj产生名为Iink.out的输出文件。

在使用命令文件时,仍然可以在命令行使用选项和文件名,例如:

Ink500-m file1.map file2.cmd file3.obj

4、 在集成开发环境CCS下,先写好连接命令文件和相应的选项,然后由CCS自行调 用。

链接器命令文件

如前所述,连接器命令文件允许用户将链接信息放如一个文件中,以便于在相同情 况下的多次调用,同时还可以灵活应用MEMORY和SECTIONS命令配置存储空间。链接器命令文件为ASCLL文件,包含以下内容:

● 输入文件名,可以是目标文件,库文件或其他命令文件; ● 链接器选项;

● MEMORY和SECTIONS命令,MEMORY用于指定目标存储器配置,SECTIONS

用于指定段的地址;

● 赋值语句,用于定义全局符号,并赋值。

注意,在链接器命令文件中,不能将下列保留字用作符号或段的名称: 4.7.6 C编译器及其他

本节介绍C编译器、交叉参考列表器和绝对列表器。 1. C编译器

C编译器包含三个功能模块:语法分析、代码优化和代码产生,如下图所示。其中,语法分析()完成C语法检查和分析;代码优化()对程序进行优化,以便提高效率;代码产生()将C程序转换成C5X的汇编源程序。

C编译器 C源程序 汇编源程序 语法分析 优化可选 代码产生

C5X的C编程器可以单独使用,也可以连同链接器一起完成编译、汇编和链接的工作.C编译器的调用格式为:

C1500(-options)(filenames)(-z(link-options))(object files)

其中, C1500为调用命令。Filenames为输入文件名。Object files为调用连接器时输入的目标文件。Options为编译选项.。如:-q屏蔽列表器输出提示信息。-z为调用链接器的知识,当有-z时就表示在编译之后要调用链接器。Link-options为调用链接器时的链接选项。例如:C1500 symtab.c file.c.seek.asm 就是将文件symtab.c和 file.c编译生成汇编程序 seek.asm。 2、交叉参考列表器

交叉参考列表器属于调式工具,能以链接器输出的文件为输入,生成一个交叉参考列表。该交叉参考列表将列出程序中的符号、符号的定义机器引用等。交叉参考列表器的调用格式为:

20

在C54X中,小数的乘法与整数乘法基本一致,只是由于两个有符号的小数相乘,其 结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。C54X中提供了一个状态位FRCT,将其设置为1时,系统自动将乘积结果左移移位。但注意整数乘法时不能这样处理,所以上面的实验中一开始便将FRCT清除。两个小数(16位)相乘后结果为32位,如果精度允许的话,可以只存高16位,将低16位丢弃,这样仍可得到16位的结果。在本实验中,我们使用下列代码来说明小数乘法运算:

SSBX FRCT ;FRCT=1 ,准备小数乘法

ID TEMP1,16,A ;将变量TEMPL装入寄存器A 的高的16位 MPYA TEMP2 ;完成TEMP2乘寄存器A的高的16位,结果在B中,同时将TEMP2装入T寄存器

STH B,MPY-F ;将乘积结果的高16位存入变量MPY-F 例如,TEMP1=TEMP2=4000H(十进制的0.5),两数相乘后结果为20000000(十进制 的2-2=0.25)。再如,TEMP1=0CCDH(十进制的0.1),TEMP2=0599AH(十进制的0.7),两数相乘后B 寄存器的内容为08F5F0A4H(十进制的0.07000549323857)。如果仅保存结果的高16位08F5H(十进制的0.06997680664063)。有时为了提高精度,可以使用RND或使用MPYR指令对低16位做四舍五入的处理。 (6)实现16定点整数除法

在C54X中没有提供专门的除法指令,一般有两钟方法来完成除法。一种是用乘法来 代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用。另一种方法是使用SUBC指令,重复16次减法完成除法完成除法运算。下面我们以TEMP1/TEMP2为例,说明如何使用SUBC指令实现整数除法,其中变量TMP1为被除数,TMP2为除数,结果即商存放在变量TEMP3中。在完成整数除法时,先判断结果的符号。方法是将两数相乘,保存A或B的高16位以便判断结果的符号。然后只做两个正数的除法,最后修正结果的符号。为了实现两个数相除,先将被除数装入A或B 的低16位,接着重复执行SUBC指,用除数重复减16次后,除法运算的商在累加器的低16位,余数在高16位。详细代码如下:

ID TEMP1,T ;将被除数装入T寄存器

MPY TEMP2,A ;除数与被除数相乘,结果放入A寄存器 ID TEMP2,B ;将除数TEMP2装入B寄存器的低16位 ABS B ;求绝对值

STL B,TEMP2 ;将B寄存器的低16位存回TEMP2

ID TEMP1,B ;将被除数TEMP1装入B寄存器的低16位 ABS B ;求绝对值

RPT #15, ;重复SUBC指令16次

SUBC TEMP2,B ;使用SUBC指令完成除法运算

BCD DIV-END,AGT ;延时跳转,先执行下面两条指令,然后判断A,若A大于0,则跳转到标号DIV-END,结束除法运算

STL B,QUOT-I ;将商(B寄存器的低16位)存入变量QUOT-I

STL B,REMAIN-I ;将余数(B寄存器的高16位)存入变量REMAIN-I XOR B, ;若两数相乘的结果为负,则商也应为负。先将B寄存器清0 SUB QUOT-I,B ;将商反号

STL B,QUOT-I ;存回变量QUOT-I中 DIV-END:

上面给出的是整数除法与前面的整数除法基本一致,也是使用循环的SUBC指令来完

46

成。但有两点需要注意:第一,小数除法的结果一定是小数(小于一),所以被除数一定小于除数。这与整数除法正好相反。所以在执行SUBC指令前,应将被除数装入A或B寄存器的高16位,而不是低16位。其结果的格式与整数除法一样,A或B寄存器的高16位为余数,低16位商。第二,与小数乘法一样,应考虑符号对结果小数点的影响。所以应对商右移一位,得到正确的有符号数。其详细代码如下:

ID TEMP1,T ;将被除数装入T寄存器

MPY TEMP2,A ;除数与被除数相乘,结果放入A寄存器 ID TEMP2,B ;将除数TEMP2装入B寄存器的低16位 ABS B ;求绝对值

STL B,TEMP2 ;将B寄存器的低16位存回TEMP2

ID TEMP1,B ;将被除数TEMP1装入B寄存器的低16位 ABS B ;求绝对值

RPT #15, ;重复SUBC指令16次

SUBC TEMP2,B ;使用SUBC指令完成除法运算

AND #0FFFFH,B ;将B寄存器的高16位 清为0。这时余数被丢弃,仅保留商 BCD DIV-END,AGT ;延时跳转,先执行下面两条指令,然后判断A,若A大

于0,则跳转到标号DIV-END,结束除法运算

STL B-1,QUOT-F ;将商右移

STL B-1,REMAIN-I ;将余数(B寄存器的高16位)存入变量REMAIN-I XOR B, ;若两数相乘的结果为负,则商也应为负。先将B寄存器清0 SUB QUOT-I,B ;将商反号

STL B,QUOT-I ;存回变量QUOT-I中 DIV-END:

注意:上面的C54X的16位定点有符号小数除法通用程序没有保留余数,商保存在变 量TEMP3中。举一个例子,当TEMP1=2CCCH(十进制0.35),TEMP2=55C2H(十进制的0.67),两数相除的结果为TEMP3=42DCH(十进制的0X42DC除以215=0.52233)。 四、实验步骤

本实验需要使用C54X汇编语言实现加、减、乘、除的基本运算,并通过DES的存贮 器显示窗口观察结果。实验分两步完成:

(1) 编写实验程序代码(可参考实验指导书上的算法) (2) 在实验平台上调试运行,并观察结果

五、思考题:

(1) 如何理解DP在数据区中所起的作用? (2) 如何实现无符号数的乘法?

(3) 请利用本实验程序计算以下算式的结果?

0.25*0.58374=? 0.5/0.25=? 4653/345=?

0.789687/0.876=?

实验二、存储器实验

一、实验目的

了解DSP内部数据存储器和程序存储器的结构 了解DSP指令的几种寻址方式 二、实验设备

47

计算机,DSP硬件仿真器,DSP开发实验平台 三、实验原理

主要是对外扩数据存储器进行数据的存储、移动。该实验所需要的硬件主要是DSP、CPLD、DRAM。实验过程是:让学生通过CCS5000的DSP仿真器对DSP进行仿真,向DSP外扩DRAM写入数据、读数据、数据块的移动,其操作结果通过CCS5000仿真界面进行观察其正确性。 四、实验步骤

经过了实验一以后,相信各位同学对于CCS的基本操作已经了解,故在此不再赘述。 1、以Simulator方式启动CCS,打开项目文件,编译程序,加载目标代码文件。 2、打开各个观察窗口,值得注意的是,本实验需要打开三个内存窗口:Data页的.data段起始处、Data页的.stack段起始处、以及Program页的起始处。

3、按照实验一的步骤设置断点,观察方法也基本相同,下面仅对各个小段程序进行简要说明:

bk0: bk1: bk2: bk3: bk4: bk5: bk6: bk7: bk8:

通过对XF引脚的置位和复位实现发光二极管的闪烁 立即数寻址方式

绝对地址寻址方式-数据存储器地址寻址 绝对地址寻址方式-程序存储器地址寻址 累加器寻址方式

直接寻址方式(DP为基准) 直接寻址方式(SP为基准) 间接寻址方式

存储器映射寄存器寻址方式

bk9: 堆栈寻址方式 五、思考题

1、如何将程序存储器其中某一起始地址的0x100个字复制到数据存储器的0x4000为起始地址的空间中?

2、如何实现用C语言编写一个对可用数据内存清零程序?

实验三、浮点数与Q15之间的数据转换

一、实验目的

(1) 练习TMS320C54X汇编程序的编写与调试方法,重点练习C54X程序流程控制 的方法。

(2) 学习并掌握应用TMS320C54X来表达浮点数的各种算术运算。 (3) 练习并掌握TMS320C54X的汇编语言的汇编指令系统的使用方法,重点练习具

有C54X特点的一些在功能上有所扩展的特殊指令。并了解这些指令在进行算术运算或各种控制时所带来的方便。

二、实验设备

计算机,DSP硬件仿真器,DSP开发实验平台 四、 实验原理 1、浮点数的表示方法

48

在定点运算中,小数点是在一个特定的固定位置。例如,如果一个32bit的数把小数点放在最高有效位(也就是符号位)之后,那么就只有分数(绝对值小于1)才能被显示。在定点运算系统中,虽然在硬件上实现简单,但是表示的操作数的动态范围要受到限制。使用浮点数,可以避免这个困难。

一个浮点数由尾数m、基数b和指数e三部分组成。即: m*be

下图举例说明了IEEE标准里的浮点数表示方法。这个格式用带符号的表示方法来表示尾数,指数含有127的偏移。在一个32bit表示的浮点数中,第一位是符号位,记为S。接下来的8bit表示指数,采用127的偏移格式(实际上是e-127)。然后的23bit表示尾数的绝对值,考虑到最高一位是符号位,它也应归于尾数的范围,所以尾数一共有24bit

通常用该格式所表示的浮点数如下:

当0

当e=0且f<>0时,为(-1)S * 2-126 * (0.f)

比如说:十进制数-29.625可以用二进制表示为-11101.101b(-29=>-11101b;0.625=>0.101b),用科学计数法表示为-1.1101101*24,其指数为127+4=131,化为二进制表示为10000011b,故此数的浮点格式表示为1100000111101101000000000000000,转换成16进制表示为0xc1ed0000。又

当e=0且f=0时 为(-1)S*(0.0) 当e=255且f=0时 为(-1)S*无穷大 当e=255且f<>0时 不表示一个数

浮点数(f)转换为定点数I: I = f × 2Q 定点数(I)转换为浮点数f: f = I × 2-Q 例如: 浮点数 f=0.5 采用 Q=15 的定标后, 则定点数 I = 0.5 × 215 = 16384 此时所表示数的范围为 –1 到 1 所表示数的精度为 2-15

2、浮点数转换到Q15

short errorcode = fltoq15 (float *x, DATA *r, ushort nx)

(定义于 fltoq.asm)

参数 x[nx] 指向长度为nx的浮点输入向量。X应为归一化后的浮点数,取值范 围(-1,1)。如果没有归一化,errorcode将返回错误信息。 r[nx] 指向长度为nx的输出向量。 nx 输入向量、输出向量的长度 Errorcode 如果出错,例程将返回以下错误值: ? 1 — 如果有元素太大而不能用Q15格式表示出来; ? 2 — 如果有元素太大而不能用Q15格式表示出来;

49

1 8 23 S Biased Exponent –e Mantissa -f ? 3 — 如果有元素太大而且有元素太小,用Q15格式表 示不出来; 说明 将存储于向量x中的IEEE浮点数转化后存储于向量r中。如果有元素用Q15格式不能表示出来,errorcode返回错误信息。

所有大于1的数都被置成1,小于-1的数都被置成-1,用Q15格式不能表示出来的数被置成0。

3、Q15转换到浮点数

short q15tofl (DATA *x, float *r, ushort nx) (定义于 qtofl.asm) 参数 x[nx] 指向长度为nx的Q15输入向量。 r[nx] 指向长度为nx的浮点输出向量。 nx 输入向量、输出向量的长度 说明 将存储于向量x中的Q15数据转化成IEEE浮点数,转化后存储于向量r中。 四、实验步骤

在内存中定义若干个浮点数,将所定义的浮点数进行浮点数到Q15数据的转换,然后将转换的Q15数据还原(即进行Q15数据到浮点数的转换)成浮点数。比较转换前与后的

浮点数是否一致。并且采用单步仿真方式跟踪整个数据变化过程。

五、 思考题

1、 试分析下列语句的执行方式与含义: .sect \ .global _x .bss _x,64,0,1 .sym _x,_x,54,2,1024,,32

2、 利用本实验程序计算以下数字,看看结果是否正确?

0x3c23d70a浮点到定点?0x3f000000浮点到定点?0xbf000000浮点到定点? 0x4000定点到浮点?0x0000定点到浮点?0xf0f0定点到浮点?

实验三、矩阵相乘实验

一、 实验目的

了解矩阵相乘在54X系列DSP中实现方法

进一步熟悉54X的指令,了解DSP的汇编语言与C语言的混合编程方法 二、 实验设备

计算机,DSP硬件仿真器,DSP开发实验平台 三、实验原理

short oflag = mmul (DATA *x1,short row1,short col1,DATA *x2,short row2,short col2,DATA *r)

(定义于mmul.asm)

参数

x1[row1*col1] 指向长度为row1*col1的输入矩阵 row1 矩阵1的行数 col1 矩阵1的列数 x2[row2*col2]: 指向长度为row2*col2的输入矩阵 其中row2 = col1 row2 矩阵2的行数 col2 矩阵2的列数 r[row1*col2] 指向长度为row1*col2的输出矩阵 50

本文来源:https://www.bwwdw.com/article/dg82.html

Top