您的当前位置:首页DSP复习资料+习题+答案

DSP复习资料+习题+答案

2022-07-12 来源:爱问旅游网
1、定点 DSP:数据以定点格式工作的DSP芯片称为定点DSP芯片,该芯片简单、成本较低。两种基本表示方法:整数表示方法:主要用于控制操作、地址计算和其他非信号处理的应用。小数表示方法:主要用于数字和各种信号处理算法的计算中。定点表示并不意味着一定是整数表示。

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 } yaixi9、例 编制计算 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、编制求解yai1ixi的程序。 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(ni), p273例子

i071、利用线性缓冲区法和循环缓冲区法设计一个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.

因篇幅问题不能全部显示,请点此查看更多更全内容