2、浮点 DSP:数据以浮点格式工作的DSP芯片称为浮点DSP芯片,该芯片运算精度高、运行速度快。浮点数在运算中,表示数的范围由于其指数可自动调节,因此可避免数的规格化和溢出等问题。但浮点DSP一般比定点DSP复杂,成本较高。
3、TI公司常用的DSP芯片可以归纳为三大系列: TMS320C2000系列:TMS320C2xx/C24x/C28x等; TMS320C5000系列:TMS320C54x/C55x等; TMS320C6000系列:TMS320C62x/C67x/C64x
4、在对I/O空间访问时,除了使用数据总线和地址总线外,还要用到IOSTRB、IS和I/W控制线。 5、C54x C语言 相同点:
1)结构化程序设计的思想,以函数为单位
2)大部分变量、常量、结构体、枚举、联合体、指针的定义 3)局部变量、全局变量、静态变量、动态变量 4)宏定义、宏展开、宏调用
5)算术、关系、逻辑、位操作运算符以及运算符之间的优先级和结合性 6)函数的组织:顺序结构、分支结构、循环结构 不同点:
1)所处理数据的性质不同;程序结构不同
PC :采集好的,数据量大;DSP:实时采集,量小 2)数据的输入输出设备不同
3)死循环”的对待上不同。 4)语法结构及细节上的不同
6、汇编器有5条伪指令可识别汇编语言程序的各个部分: .bss 为未初始化的变量保留空间; .data 通常包含了初始化的数据;
.sect 定义已初始化的命名段,其后的数据存入该段; .text 该段包含了可执行的代码;
.usect 在一个未初始化的有命名的段中为变量保留空间。 7、段的处理
链接器在处理段的时候,有如下2个主要任务:
(1)将由汇编器产生的的一个或多个.obj文件链接成一个可执行的.out文件; (2)重新定位,将输出的段分配到相应的存储器空间。 链接器有2条命令支持上述任务:
(1) MEMORY命令。定义目标系统的存储器配置图,包括对存储器各部分命名,以及规定它们的起始地址和长度;
(2) SECTIONS命令。告诉链接器如何将输入段组合成输出段,以及将输出段放在存储器中的什么位置。 1. MEMORY命令
作用:定义系统中所包含的各种形式的存储器,以及它们占据的地址范围。 句法: MEMORY {
PAGE0:name 1[(attr)]: orign=constant, length=constant; PAGE1:name n[attr]: orign=constant, length=constant; }
MEMORY {
PAGE 0: ROM: origin=0c00h, length=1000h; PAGE 1: SCRATCH: origin=60h, length=20h; ONCHIP: origin=80h, length=200h; }
上述MEMORY命令所定义的系统的存储器配置如下:
PAGE 0为程序存储器,名ROM,起始地址0C00H,长度4K字。 PAGE 1为数据存储器,名SCRATCH,起始地址60H,长32字。 PAGE 1为数据存储器,名ONCHIP,起始地址80H,长度512字。 2. SECTIONS命令
作用:说明如何将输入段组合成输出段;
规定输出段在存储器中的存放位置;
并允许重新命名输出段。
编写链接命令文件example.cmd(三个部分组成) 编写的命令文件用来链接两个目标文件(输入文件) 生成一个映像文件example.map和一个可执行的输 出文件example.out。标号start是程序的入口。
假设目标存储器的配置如下:
程序存储器 EPROM E000h~FFFFh(片外) 数据存储器 SPRAM 0060h~007Fh(片内)
DARAM 0080h~017Fh(片内) 链接器命令文件example.cmd。
vectors.obj /*输入输出文件*/ example.obj -o example.out -m example.map -e start
MEMORY /*MEMORY*/ {
PAGE 0:
EPROM : org = 0E000H len = 0100H VECS: org = 0FF80H len = 0004H PAGE 1:
SPRAM : org = 0060H len = 0020H DARAM : org = 0080H len = 0100H }
SECTIONS /*SECTION*/ {
.text :>EPROM PAGE 0 .data :>EPROM PAGE 0 .bss :>SPRAM PAGE 1 STACK :>DARAM PAGE 1 .vectors:>VECS PAGE 0 }
8、MEMORY和SECTIONS命令的默认使用
如果没有利用MEMORY和SECTIONS命令,链接器就按默认算法来定位输出段。 将所有的.text输入段链接成一个.text输出段,并配置到PAGE 0上的存储器; 将所有的.data输入段组合成.data输出段,定位到PAGE 0上的存储器;
所有的.bss输入段则组合成一个.bss输出段,并由链接器定位到配置为PAGE 1上的存储器。
如果输入文件中包含有已初始化的命名段,则链接器将它们定位到程序存储器,紧随.data段之后。 如果输入文件中包括有未初始化的命名段,则链接器将它们定位到数据存储器,并紧随.bss段之后。 在默认的方式下,链接器将从存储器的0080h开始,对组合后的各段进行存储器配置。 MEMORY {
PAGE 0:PROG: origin=0x0080, length=0xFF00 PAGE 1:DATA: origin=0x0080, length=0xFF80 }
SECTIONS {
.text: >PROG PAGE 0 .data: >PROG PAGE 0 .bss: PAGE 1
4 } yaixi9、例 编制计算 i 1 的程序段,其中数据均为小数:a1=0.1,a2=0.2,a3=-0.3,a4=0.4,x1=0.8, x2=0.6,x3=-0.4,x4=-0.2。 title “cjy4.asm” .mmregs
STACK .usect “STACK”,10H
.bss a,4 ;为a分配4个存储单元 .bss x,4 ;为x分配4个存储单元 .bss y,1 ;为结果y分配1个存储单元 .def start
.data ;定义数据代码段
table: .word 1*32768/10 ;在table开始的8个
.word 2*32768/10 ;地址放数据 .word -3*32768/10
.word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word -2*32768/10 .text ;定义可执行程序代码段
start:SSBX FRCT ;设置FRCT位,表示进行小数乘 STM #x,AR1 ;将x的首地址传给AR1 RPT #7 ;重复8次下条指令
MVPD table,*AR1+ ;将程序空间8个数传给数据存储器 STM #x,AR2 ;将数据存储器第一个数x1的地址传给AR2 STM #a,AR3 ;将数据存储器第五个数a1的地址传给AR3 RPTZ A,#3 ;将A清零,重复4次下条指令
MAC *AR2+,*AR3+,A ;执行乘法累加和,结果放在A中 STH A,@y ;将A的高端字存入结果y,低端字省去 end: B end ;原处循环等待 .end
结果y=0x1EB7。转换为十进制数:y=(1×163+14×162+11×161+7×160)/32768=0.24
10、DSP仿真器是在程序开发和调试阶段连接开发板与CCS开发环境/visual DSP++环境的桥梁。仿真器的用途有:下载程序:把DSP的工程文件下载到DSP开发板上。调试程序:在CCS开发环境中查看DSP的寄存器值、内存地址上的值或查看图形等等所有关于开发板上DSP的问题都是通过仿真器来交互数据的。
一、 填空题
1. 在DSP处理器中,数据地址的产生是由(数据地址发生器)来完成的。 2. TMS320C54x的累加器分别称为(累加器A)和(累加器B),它们的数据宽度是(40)位。
3. TMS320C54x 的DSP采用先进的(哈佛)结构,其独立的(程序)总线和(数据)总线允许同时读取
(指令)和(操作数),实现高度的并行操作。 4. 5. 6. 7. 8.
TMS320C54x的通用I/O引脚有(跳转控制输入引脚BIO )和(外部标志输出引脚XF)。 指令MPY 0Dh, A中乘数和被乘数分别在( 累加器B高16位 )和(累加器A)中。 TMS320C54x有(3)个状态和控制寄存器。
在DSP处理器中,配有两个地址生成器,包括(数据地址发生器)和(程序地址发生器)。
TMS320C54x使用一个40位的(ALU)和两个40位的(累加器ACCA和ACCB)来完成算数算术运算和逻辑运算。
9. TMS320C54x存储器由3个独立的可选择空间组成:(程序空间)、(数据空间)和(I/O空间)。 10. TMS320C54x的指令系统包含(助记符指令)和(代数指令)两种形式。
11. 编译器对于符号地址和变量的处理都是相对于本段的开始。连接器为每个段选择了合适的起始地址,
就必须相应地修改这些符号地址和变量,同时修改所有对这些地址和变量的引用,这个过程称为(重定位)。
12. TMS320C54x的总线由(1)组程序总线、(3)组数据总线和(4)组地址总线组成,可在一个指令周
期内产生两个数据存储地址,实现流水线并行数据处理。 一、 单项选择题
1. 1.TMS320C54x中累加器分为三个部分,低位字,高位字和保护位,其中高位字是指( B ) A. 15~0位 B. 31~16位 C. 39~32位 D. 39~23位 2. 2.TMS320C54x中,暂存器T的数据宽度是( C )
A. 40位 B. 32位 C. 16位 D. 8位 3. 3.TMS320C54x的立即数寻址中,位数最长的短立即数的长度是(B ) A. 16位 B. 9位 C. 8位 D. 5位 4. TMS320C54x汇编语言中,用于自定义段的是( A )
A. .sect B. .bss C. .text D. .data 5. 下列TMS320C54x的中断,不是可屏蔽中断的是( D )
A. RINT0 B. HPIINT C. DMAC4 D. reset
6. 1.TMS320C54x中累加器分为三个部分,低位字,高位字和保护位,其中保护位字是指( C ) A. 15~0位 B. 31~16位 C. 39~32位 D. 39~23位 7. TMS320C54x中,ALU的数据宽度是( A )
A. 40位 B. 32位 C. 16位 D. 8位 8. TMS320C54x的立即数寻址中,长立即数寻址的长度是( A )
A. 16位 B. 9位 C. 8位 D. 5位 9. 4.TMS320C54x汇编语言中,用于定义未初始化段的是( B )
A. .sect B. .bss C. .text D. .data 10. 5.下列哪个浮点数表示的是无效的数( C )
A .99e9 B 9.9e9 C 99e9 D 99.e9 三、判断题
1.TMS320C54x汇编语言中,符号常量可以用.set定义,不占用存储器。( X )
2.TMS320C54x的中断处理分为3个阶段:一是请求中断,二是响应中断,三是执行中断服务程序。 ( √ )
3.TMS320C54x在执行中断之前,要完成所有流水线中的指令。所以,最大的中断延时取决于进入流水线的指令。 ( √ )
4.TMS320C54x在执行中断服务程序(ISR)时,在进入中断服务程序后,CPU将首先把程序计数器(PC)的值,也即返回地址,压入堆栈,然后把中断矢量的地址装入PC。( × )
5.TMS320C54x有三个状态和控制寄存器,分别是:状态寄存器ST0,状态寄存器ST1,以及处理器方式状态寄存器PMST。 ( √ )
6.如果在程序中未用任何段伪指令,则汇编器将把所有的程序块或数据块统一汇编至.text段中。( × )
7.MEMORY命令是告诉连接器如何将输入段组合成输出段。 ( × )
8.TMS320C54x在执行中断之前,要完成所有流水线中的指令。所以,最大的中断延时取决于进入流水线的指令。 ( × )
9.局部标号可以用伪指令来定义。 ( √ )
10.TMS320C54x只有两个状态和控制寄存器,分别是:状态寄存器ST0,状态寄存器ST1。 ( × ) 四、简答题
1.简述哈佛结构的基本特征,并画出示意图。P3
哈佛结构结构采用双存储空间,程序存储器和数据存储器分开,取指和读数可以同时进行,扩展了存储器带宽,增加了系统的吞吐量。
2.简述TMS320C54x DSP的ALU的可能的输入数据来源。P44 第一种答案:
ALU的X输入端的数据:
移位器的输入 来自数据总线DB的数据存储器操作数 ALU的Y输入端的数据:
累加器A中的数据 累加器B中的数据 来自数据总线CB的数据存储器操作数 ④T寄存器中的数据 第二种答案:
可以使用的输入形式包括:16位的立即数,从数据存储器读出的16位字,暂存器T中的16位字,从数据存储器中读出的2个16位字,从数据存储器读出的1个32位字,从其中一个累加器输出的40位值 3.简述辅助寄存器(AR0~AR7)的主要功能。
辅助寄存器(AR0~AR7)属于数据地址生成逻辑单元,产生16位数据空间,通用R,为各种寻址服务。 4.简述TMS320C54x中硬件定时器的功能。
TMS320C54x有一个带有4位预定标器的16位定时电路。这个定时计数器每个时钟周期减1,减至0时就产生一个定时中断。可以通过设置特定的状态位,来使定时器停止、恢复运行、复位或禁止。 5.列举四种绝对地址寻址。P142
数据存储器地址(dmad)寻址 程序存储器地址(pmad)寻址 端口地址(PA)寻址 *(lk)寻址 6.简述TMS320C54x DSP的总线组成和功能。P31
C54x的内部有8组16位总线:4条程序/数据总线和4条地址总线。这些总线功能: (1) 1组程序总线PB 主要用来传送取自程序存储器的指令代码和立即操作数。 (2) 3组数据总线CB、DB、EB CB和DB用来传送从数据存储器读出的数据;
EB用来传送写入存储器的数据。
(3) 4组地址总线PAB、CAB、DAB、EAB 用来提供执行指令所需的地址。 7.简述TMS320C54x DSP的乘法器的输入数据来源。P51 输入端XM数据来自: T寄存器
累加器A的位32-16
DB总线传送过来的数据存储器操作数 输入端YM的数据来自: 累加器A的位32-16
由DB总线和CB总线传送过来的数据存储器操作数 由PB总线传送过来的程序存储器操作数 9.简述TMS320C54x指令系统的特点。
10.列举出TMS320C54x的7种基本的数据寻址方式。P141
立即寻址、绝对寻址、累加器寻址 、直接寻址、间接寻址、存储器映像寄存器寻址、 堆栈寻址
五、程序阅读题
1.请说明下面语句执行后,A,T,FRCT、AR5、数据存储器中0100h的数据。
MAC *AR5, A
指令执行前 执行后
A 00 0000 1000 00 0048 E000 T 0400 0400 FRCT 0 0 AR5 0100 0100 数据存储器
0100h 1234 1234
2.阅读下面的程序段,说明每一条语句的功能,以及整个程序段的功能。 .bss x, 8 为数组x分配8个存储单元 STM #x, AR1 将目的地首地址赋给AR1
RPTZ A, #7 执行一次下一条指令在循环执行7次并对ACC清0 STL A, *AR1+ 把累加器的低端存放到数据存储器中 整个程序段的功能是对数组进行初始化,使x[8]={0,0,0,0,0,0,0,0}
3.阅读下面的程序段,利用长字指令来完成下面程序段的功能,并说明整个程序段完成什么功能。P241
LD @xhi,16,A ADDS @xlo,A ADD @yhi,16,A ADDS @ylo,A STH A,@zhi
STL A,@zlo
答案:DLD @xhi,A
DADD @yhi,A DST A,@zhi
整个程序段完成: Z(32)=X(32)+Y(32) 4. 阅读下面的程序段,说明每一条语句的功能。
STM #88H,AR0 ;将操作数88H装入AR0
LD #1000H,A ;将操作数1000H装入ACC
zhong: SUB AR0,A ;ACC中的值减去AR0中的值,结果存入A
BC zhong,AGT,AOV;若累加器A>0且溢出,则转至zhong,否则往下执行
5. 阅读下面的程序段,说明每一条语句的功能。
STM #123H,AR0 ;将操作数123H装入入AR0 LD #456H,AR1 ;将操作数456H装入ACC CALL new ; 调子程序new
LD AR1,16,A ;将AR1的内容左移16位后装入A
new:MPY AR0,AR1,A ;AR0 与AR1的内容相乘,结果存入A中 RET ;子程序返回
6.请说明下面语句执行后,A,C,AR1、SXM、数据存储器中0100h的数据。
SUB *AR1+, 14, A
指令执行前 指令执行后
A 00 0000 1200 FF FAC0 1200 C X 0 AR1 0100 0101 SXM 1 1
数据存储器
0100h 1500 1500 7.阅读下面的程序段,说明每一条语句的功能,以及整个程序段的功能。
rsbx FRCT ;清楚FRCT标志,表明以下是做整数乘法。 ld temp1, T ;将变量temp1装入T寄存器。
mpy temp2, a ;完成temp1*temp2,结果放入累加器A。 sth a, temp3 ;结果的高16位存入temp3
stl a, temp4 ;结果的低16位存入temp4.
整个程序段的功能是计算temp1×temp2,32位的结果分别存入temp3和temp4. 8.阅读下面的程序段,说明语句1、2和3的功能,以及整个程序段的功能。
.mmregs .global start .data
dst .space 18*16 len .word 18
.text
src .string \"this is the source\" .start
stm #dst, ar1 ; 语句1 将dst的地址存入ar1
stm #len, ar2
rpt *(ar2) ; 语句2 循环执行*(ar2)次指令mvpd src, *ar1+ mvpd src, *ar1+
b $ ; 语句3 原地执行
.end
整个程序的功能是将源数据存储区(src)的字符串复制到目的的数据存储区(dst). 9. 阅读下面的程序段,说明每一条语句的功能,以及整个程序段的功能。
SUM3: LD @x1,T ; T=x1 MPY @a1, B ; B=x1×a1 LD @x2, T ; T=x2 MAC @a2, B ; B=x2×a2
STL B,@y ;计算结果的低字BL存入y中 STH B,@y+1 ;计算结果的高字BH存入y+1中 整个程序段的功能是计算y=x1×a1+x2×a2
10. 请说明下面语句执行后,累加器A,寄存器T,FRCT、DP、数据存储器中040Dh的数据。
MPY 0Dh, A
指令执行前 指令执行后
A 00 0000 A039
T 50 50 FRCT 1 1 DP 008 008
数据存储器
040Dh 4000 4000
六、 编程题
1、求4项乘积aixi(i=1,2,3,4)中的最大值,并存放累加器A中。P224 .mmregs
STACK .usect “STACK “,10h .bss a,4 .bss x,4 .bss y,1 .def start .data
table: .word 1,2,3,4 .word 8,6,4,2 .text
start: STM #0,SWWSR
STM #STACK+10h,SP STM #a,AR1 RPT #7
MVPD table,*AR1+
CALL SUM end: B end SUM: STM #a,AR3 STM #x,AR4
RPTZ A,#3
MAC *AR3+,*AR4+,A STL A,@y RET .end
252、编制求解yai1ixi的程序。 P235
.mmregs
STACK .usect “STACK “,30h .bss a,25 .bss x,25 .bss y,2 .def start .data
table: .word 1,2,3,4,5,6,7,8,9,10
.word 11,12,13,14,15,16,17,18,19,20 .word 21,22,23,24,25,26,27,8,29,30 .word 1,2,3,4,5,6,7,8,9,10
.word 11,12,13,14,15,16,17,18,19,20 .text
start: SSBX FRCT STM #a,AR1 RPT #49
MVPD table,*AR1+ LD #0,B STM #a,AR2 STM #x,AR3 RPTZ A,#24
MAC *AR2+,*AR3+,A STL A,@y STH A,@y+1 .end 七、 作图题
1、扩展程序存储器 p123
2、’C54x与A/D转换器的接口 p126 3、’C54x与D/A转换器的接口 八、 程序设计题
对y(n)bix(ni), p273例子
i071、利用线性缓冲区法和循环缓冲区法设计一个FIR滤波器,其中滤波系数为b0=0.1,b1=0.2,b2=-0.4,b3=0.3,b4=-0.4,b5=0.2,b6=0.1;(8分) 线性缓冲区法: .title “FIR1.Asm .mmregs
.def start
x “x”,7
PA0 .set 0 PA1 .set 1 .data
COEF: .word 1*32768/10 ;b0=0.1
.word 2*32768/10 ;b1=0.2 .word -4*32768/10 ;b2=0.4 .word 3*32768/10 ;b3=0.3 .word -4*32768/10 ;b4=0.4 .word 2*32768/10 ;b5=0.2 .word 1*32768/10 ;b6=0.1 .text
Start: SSBX FRCT STM #x+7,AR2 STM #6,AR0 LD #x+1,DP PORTR PA1,@x+1 FIR: RPTZ A,#6 MACD *AR2-,COEF,A
STH A,*AR2 ; 保存滤波器输出结果 PORTW *AR2+,PA0 ;将滤波器的输出从端口送出去 BD FIR1 PORTR PA1,*AR2+0 循环缓冲区法:
.title “FIR2.ASM” .mmregs .def start .bss y,1 xn .usect “xn”,7 b0 .usect “b0”,7 PA0 .set 0 PA1 .set 1 .data
table: .word 1*32768/10 ;b0=0.1 .word 2*32768/10 ;b1=0.2 .word 3*32768/10 ;b2=0.3 .word 4*32768/10 ;b3=0.4 .word 5*32768/10 ;b4=0.5
.word 6*32768/10 ;b5=0.6 .word 7*32768/10 ;b6=0.7
.text
start: SSBX FRCT STM #b0,AR1 RPT #6 MVKD table,*AR1+ STM #xn+6,AR2 STM #b0+6,AR3 ;AR3指向系数a6 STM #7,BK ;缓冲区长度为7 STM #-1,AR0 ;AR0 = -1 LD #xn,DP PORTR PA1, @xn ; 从端口PA1读入采样值 FIR: RPTZ A, #6 MAC *AR2+0%,*AR3+0% STH A,@y PORTW @y,PA0 BD FIR2 PORTR PA1,*AR2+0% .END
2、编写连接命令文件FIR.CMD。(4分)
程序存储器:4K字ROM,起始地址为C00h,取名为EPROM。 数据存储器:32字RAM,起始地址为60h,取名为SPRAM。 4992字RAM,起始地址为80h,取名为DARAM MEMORY
{ PAGE 0: EPROM: origin = c00H, length = 1000H PAGE 1: SPRAM : origin = 60H, length = 20H DARAM: origin = 80H, length = 1380H }
SECTIONS { .text: > EPROM PAGE 0 .data: > EPROM PAGE 0
.bss: > SPRAM PAGE 1
STACK: > DARAM PAGE 1 }
TMS320C54x提供哪几种数据寻址方式?举例说明它们是如何寻址的? (1)立即数寻址 LD #10,A (2)绝对地址寻址 STL A,*(y) (3)累加器寻址 READA x (4)直接寻址 LD @x,A (5)间接寻址 LD *AR1,A (6)存储器映射寄存器寻址 LDM ST1,B (7)堆栈寻址 PSHM A 定点DSP中如何表示小数?
用Q15格式表示小数。 正数:乘以32768;负数:取绝对值,其绝对值部分乘以32768再取反加1.
因篇幅问题不能全部显示,请点此查看更多更全内容