当前位置:文档之家› DSP-C55x期末考试复习要点附历年试卷和答案

DSP-C55x期末考试复习要点附历年试卷和答案

1、简述数字信号处理器的主要特点;

答:(1)存储器采用哈佛或者改进的哈佛结构;(2)内部采用了多级流水;(3)具有硬件乘法累加单元;(4)可以实现零开销循环;(5)采用了特殊的寻址方式;(6)高效的特殊指令;(7)具有丰富的片内外设。

2、请给出数字信号处理器的运算速度指标;

答:常见的运算速度指标有如下几种:

(1)指令周期:执行一条指令所需的最短时间,数值等于主频的倒数;指令周期通常以ns(纳秒)为单位。例如,运行在200MHz的TMS320VC5510的指令周期

为5ns。

(2)MIPS:每秒百万条指令数。

(3)MOPS:每秒百万次操作数。

(4)MFLOPS:每秒百万次浮点操作数。

(5)BOPS:每秒十亿次操作数。

(6)MAC时间:一次乘法累加操作花费的时间。大部分DSP芯片可在一个指令周期内完成MAC操作;

(7)FFT执行时间:完成N点FFT所需的时间。FFT运算是数字信号处理中的典型算法而且应用很广,因此该指标常用于衡量DSP芯片的运算能力。

3、简述C55x的存储器配置情况;(课本11~12页)

C55x采用统一的存储空间和I/O空间。C55x的内存储空间共有352KB,外部存储空间共有16MB。存储区支持的寄存器类型有异步SRAM、异步EPROM、同步DRAM和同步突发SRAM。C55x的I/O空间与程序/地址空间分开。I/O空间的地址为16位,能访问64K 字地址,当CPU读/写I/O空间时,在16位地址前补0来扩展成24位地址。

4、TMS320C55x的寻址空间是多少?当CPU访问程序空间和数据空间时,使用的地址是

多少位;

答:C55x的寻址空间为16MB,当CPU从程序空间读取程序代码时,使用24位地址,当访问数据空间时,使用23位的地址。但是在访问数据空间时,将23位地址左移一位,并将地址总线上的最低有效位(LSB)置0,使得在对数据空间或程序空间寻址时,地址总线都传送24位地址。

5、VC5509A的PGE LQFP封装芯片共有多少个引脚?其中GPIO引脚有多少个?并行地址

总线引脚有多少个?并行双向数据总线引脚有多少个?(此题答案不确定)

芯片共有144个引脚;GPIO引脚:7个;并行地址总线:14个;并行双向数据:16个

6、C55x的指令分为两个阶段,第一阶段为取指阶段,第二阶段为执行阶段;

7、C55x的CPU包含4个40位的累加器,辅助寄存器ARn有16位,XARn有23位;

8、XF位是寄存器ST1_55中的第13位,它是一通用的输出位,能用软件处理且可输出至

DSP引脚。若要使该引脚输出高电平,可用指令BSET XF;

9、CPL位是寄存器ST1_55中的第14位,指令BCLR CPL的功能是对CPL清零;

10、INTM位是寄存器ST1_55中的第11位,该位能够使能或禁止可屏蔽中断,如果INTM=0,C55x使能所有可屏蔽中断。

11、SATA位是寄存器ST3_55中的第5位,如果SATA=1,则执行A单元ALU的饱和模式;

12、MPNMC位是寄存器ST3_55中的第6位,该位使能或禁止片上ROM,如果MPNMC=0,

则为微计算机模式,使能片上ROM;(8—12题在课本41页附近)

13、VC5509A拥有160K字的片内存储器资源,其中有128K字RAM和32K字ROM。外部扩展存储空间由CE[3:0]组成,其中CE0的首字地址为0020000H,CE1的首字地址为200000H;(51—52页)

14、C55x有32个中断向量,中断向量指针IVPD、IVPH应指向中断向量表的首地址;

15、IER0和IER1的功能是什么?

IER0:中断使能寄存器0;IER1:中断使能寄存器1。当寄存器某位的值为1时,开启该位所控制的中断,为0则关闭该位所控制的中断。

16、请写出允许定时器0中断的指令代码。

17、C55x的不可屏蔽中断有哪几种?

三种:硬件中断RESET,硬件中断NMI,软件中断。

18、C55x支持3种类型的寻址方式,分别是绝对寻址模式;直接寻址模式和间接寻址模式

19、什么是绝对寻址方式?C55x有几种绝对寻址方式,分别是什么?

绝对寻址方式:通过在指令中指定一个常数地址完成寻址;有三种绝对寻址方式:K16绝对寻址方式,K23绝对寻址方式,I/O绝对寻址方式。

20、什么是直接寻址方式?C55x有几种直接寻址方式,分别是什么?

直接寻址方式:使用地址偏移量寻址;有四种直接寻址方式:DP直接寻址,SP直接寻址,寄存器位直接寻址,PDP直接寻址。

21、什么是间接寻址方式?C55x有几种间接寻址方式,分别是什么?

间接寻址方式:使用指针完成寻址;有四种间接寻址方式:AR间接寻址,双AR间接寻址,CDP间接寻址,系数间接寻址。

22、指令MOV *abs16(#2002h), T2 采用的是绝对/ k16绝对寻址方式。设DPH=03h,该指令的功能是#k16=2002H,CPU从032002H处读取数据装入T2;

23、指令MOV port(@0), T2 采用的是直接/ PDP直接寻址方式。设PDP=511,该指令的功能是PDP:Poffset=FF80H,CPU从FF80H读取数据进T2;

24、已知AC1=0200FC00H,AR3=0200H,(200)= 3400H,0

MOV *AR3+ <<#16, AC1

执行上面指令后,AC1和AR3的值分别是多少?

指令功能是把AR3指向的地址里面的内容左移16位(二进制左移16位相当于十六进制左移四位,所以在右边补四个0),把AR3指向的地址里面的内容左移后的内容送进AC1,之后指针AC3自加一次。所以AC1=34000000H ,AR3=0201H。

说明:其实AC0~AC3是40位,如果问AC1的内容,则AC1=0034000000H

25、已知AC0=EC000000H,AC1=00000000H,AR1=0200H,(200)= 3300H,TC2=1,

ADDSUBCC *AR1, AC0, TC2, AC1

执行上面指令后,AC1、AR1和AC0的值分别是多少?

指令功能是:如果TC2=1,则AC1=AC0+(*AR1)<<#16;否则AC1=AC0–(*AR1)<<#16,这里TC2=1,所以AC1=AC0+(*AR1)<<#16,AC1=EC000000H+33000000H=11F000000H,AR1=0200H,AC0=EC000000H。

说明:其实AC0~AC3是40位,AC0的内容是00EC000000H,AC1的内容是011F000000H

26、在.text、.data和.bss段,初始化段是.text和.data,未初始化段是;.bss

27、利用.sect指令可创建已初始化段,利用.usect指令可创建未初始化段;

28、请指出汇编语言文件中的伪指令.def、.ref和.global的区别;

是指在一个模块中定义,可以在另一个模块中引用的符号.可以用伪指令.def、.ref

或.global来定义.

.def 在当前模块中定义,可在别的模块中使用;

.ref在当前模块中使用,但在别的模块中定义;

.global全局符号变量。

29、DSP链接器命令文件中,MEMORY和SECTIONS伪指令的作用是什么?

MEMORY伪指令用来表示实际存在的目标系统中可被使用的存储器范围,每个存储器范围都有名字、起始地址和长度。

SECTIONS伪指令的作用是:描述输入段怎样被组合到输出段内;在可执行程序内定义输出段;规定在存储器内何处存放置输出段;允许重命名输出段。

30、CCS有两种工作模式,分别是软件仿真器模式和硬件在线编程模式;

31、在大存储模式下编译代码时,必须和rts55x.lib运行时间库链接;

32、给出函数int fn(long l1, long l2, long l3, int *p4, int *p5, int *p6, int *p7, int *p8, int i9, int i10)中传送参数所使用的寄存器;

分别为:AC0, AC1, AC2, AR0, AR1, AR2, AR3, AR4, T0, T1

即是longl1存放在AC0,……对应下去。

33、以下的汇编语句实现两个整型数的饱和加法,请编写C语言程序调用该汇编函数,实现整数20000和30000的饱和加法,并在CCS中输出和的值;

.def _sadd_asmfun

_sadd_asmfun: BSET ST3_SATA

ADD T1, T0

BCLR ST3_SATA

RET

#include "stdio.h"

main()

{

int c=0;

int sadd_asmfun(int a, int b); //声明函数

c = sadd_asmfun(20000, 30000);

printf( "c=%d",c);

}

int sadd_asmfun(int a, int b) //定义函数

{

return _sadd_asmfun(a,b)

}

34、TMS320VC5509A系统的晶体振荡器频率为12MHz,试通过设置DPLL,使系统的时钟频率为144MHz;

(1)使DPLL工作在锁定模式:D4(PLL ENABL)=1B(这里B表示二进制,不是11,下面的也是,D4表示时钟模式寄存器(CLKMD)的第5位,D0为第1位,下面D11~D5意思类似)

(2)根据题意有

144MHz=[PLL MULT/(PLL DIV+1)]×12MHz (“/”表示除号)

解得PLL MULT/(PLL DIV+1)=12,取PLL DIV=0,PLL MULT=12,

即有: D6D5(PLL DIV)=00B ,D11~D7(PLL MULT)=01100B

(3)时钟模式寄存器(CLKMD)的其他未均取为0。(时钟模式寄存器(CLKMD)共16位) 综合(1)、(2)、(3),得CLKMD=0000 0110 0001 0000 B 或者CLKMD=0C10H

用汇编予以实现:

mov #0000 0110 0001 0000 B, port(#1c00h) 或者 mov 0C10H, port(#1c00h)

;1c00h 是时钟模式寄存器(CLKMD)的地址。

35、设DSP 定时器输入时钟频率为100MHz ,如果要求定时器发送中断信号的频率为1000次每秒,需要如何对定时器进行设置?

答:根据公式 )

1()1( +?+=PRD TDDR TINT 输入时钟频率频率 输入时钟频率为100MHz ,TINT 频率为1kHz ,由于TDDR 为4位,这里我们把TDDR 设为9,即TDDR=0101B ,则PRD 为9999,PRD 为16位,即PRD=0010011100001111B =270FH 。

36、写出使C5509A 的GPIO4、GPIO6和GPIO7引脚输出高电平的C 语言代码。

#define IODIR (*(ioport unsigned int*)0x3400)

#define IODATA (*(ioport unsigned int*)0x3401)

IODIR |=0xF0;

IODA TA |=0xF0;

附一历年考题及答案:

通信系《DSP 原理及应用》期末考试题(答案)

姓名: 学号: 班级: 分数:

考试时间:15:40~17:30 考试方式:开卷;

注意:所有答案必须写在答题纸上,试卷上的答案无效!

一、 填空题(每空2分,共20分)

1、在C 语言和C55x 汇编语言的混合程序设计中,C 函数的参数和返回值传递到

C55x 的寄存器中。在函数“long func(int *p1, int i2, int i3, int i4)”中,*p1传递到 AR0 寄存器,i2传递到 T0 寄存器,i4传递到 AR1 寄存器,返回值由 AC0 寄存器传递。

2、汇编语言“mov *AR0,AC0”使用的寻址方式是间接寻址模式,“mov #0x3,

DPH”使用的寻址方式是直接寻址模式,“mov *(#0x011234),T2”使用的寻址方式是绝对寻址模式。

3、指令执行前AC0的值是0012345678,那么汇编语句“AND #0x7f, AC0”,

执行之后,AC0的值是0000000078。

4、C55x 的链接器命令文件中,SECTIONS命令的主要作用是告诉链接器如何将输

入段组合成输出段,以及在存储器何处存放输出。MEMORY命令的主要作用是定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。

二、简述题(共40分)

1、根据你的理解,试列举 DSP 芯片的特点?(5分)

答:哈佛结构;多总线结构;指令系统的流水线操作;专用的硬件乘法器;特殊的DSP 指令;快速的指令周期;丰富的外设

2、TMS320C55x 芯片的总线结构有何特点,主要包括哪些总线?它们的功能是什

么?(6分)

答:TMS320C55x DSP采用先进的哈佛结构并具有十二组总线,其独立的程序总线和数据总线允许同时读取指令和操作数,实现高度的并行操作。

采用各自分开的数据总线分别用于读数据和写数据,允许CPU在同一个机器周期内

进行两次读操作数和一次写操作数。独立的程序总线和数据总线允许CPU同时访问

程序指令和数据。

包括12条总线,分别是:PAB和PB、BAB和BB、CAB和CB、DAB和DB、EAB和EB、FAB和FB。

功能:

3、DSP 为了降低功耗采取了哪些措施?(6分)

答:双电压供电;多种工作模式

4、TMS320C55x 的总存储空间为多少?可分为哪 3 类,它们的大小是多少?存

储器空间的各自作用是什么?(6分)

答:程序空间16M Byte;I/O空间64K Words;数据空间8M Words

5、TMS320C55x有哪些寻址方式,它们是如何寻址的?试为每种寻址方式列举一

条指令(6分)

答:直接寻址模式,mov #K16,DP;

间接寻址模式,mov *AR0,AC0;

绝对寻址模式,mov *(#0x011234),T2;

MMR寻址模式,mov *abs16(#AR2), T2;

寄存器位寻址模式,btstp @30, AC1;

圆形寻址模式。

6、将C源程序转换成可执行文件需要经过哪些步骤?(6分)

答:创建C源文件;创建工程文件;创建连接器命令文件;编译整个工程文件;链接;

生成可执行文件

7、常用的TMS320C55x汇编命令有哪些,它们的作用是什么?(5分)

三、程序设计题(共40分)

1、用C55x 汇编语言实现计算 ∑==4

1i i i x a y 的程序。(10分)

答:mpym *AR0+, *AR1+, AC0

mpym *AR0+, *AR1+, AC1

add AC1, AC0

mpym *AR0+, *AR1+, AC1

add AC1, AC0

mpym *AR0+, *AR1+, AC1

add AC1, AC0

或者:

mpym *AR0+, *AR1+, AC0

||rpt #2

macm *AR0+, *AR1+, AC0

2、用C55x 汇编语言实现计算 22111**a x a x y -=的程序。(10分) 答:mpym *AR0+, *AR1+, AC3

masm *AR0+, *AR1+, AC3

3、以8点的FFT 为例,用C55x 的汇编语言实现FFT 的算法,并且解释该算法的实现方法。(20分)

答: .sect "fft_code"

_fft:

aadd #(ARGS-Size+1),SP ; Adjust stack for local vars

mov mmap(ST1_55),AR2 ; Save ST1,ST3

mov mmap(ST3_55),AR3

mov AR2,fft.d_ST1

mov AR3,fft.d_ST3

btst @#0,T1,TC1 ; Check SCALE flag set

mov #0x6340,mmap(ST1_55) ; Set CPL,XF,SATD,SXAM,FRCT (SCALE=1) mov #0x1f22,mmap(ST3_55) ; Set: HINT,SATA,SMUL

xcc do_scale,TC1

mov #0x6300,mmap(ST1_55) ; Set CPL,XF,SATD,SXAM (SCALE=2)

do_scale

mov T2,fft.d_T2 ; Save T2

|| mov #1,AC0

mov AC0,fft.d_L ; Initialize L=1

|| sfts AC0,T0 ; T0=EXP

mov AC0,fft.d_N ; N=1<

mov XAR1,XCDP ; CDP = pointer to U[]

mov XSP,XAR4

add #fft.d_temp,AR4 ; AR4 = pointer to temp

mov XAR0,XAR1 ; AR1 points to sample buffer

mov T0,T1

mov XAR0,XAR5 ; Copy externd bits to XAR5

outer_loop ; for (L=1; L<=EXP; L++)

mov fft.d_L,T0 ; note: Since the buffer is

|| mov #2,AC0 ; arranged in re,im pairs

sfts AC0,T0 ; the index to the buffer

neg T0 ; is doubled

|| mov fft.d_N,AC1 ; But the repeat coutners

sftl AC1,T0 ; are not doubled

mov AC0,T0 ; LE=2<

|| sfts AC0,#-1

mov AC0,AR0 ; LE1=LE>>1

|| sfts AC0,#-1

sub #1,AC0 ; Init mid_loop counter

mov mmap(AC0L),BRC0 ; BRC0=LE1-1

sub #1,AC1 ; Init inner loop counter

mov mmap(AC1L),BRC1 ; BRC1=(N>>L)-1

add AR1,AR0

mov #0,T2 ; j=0

|| rptblocal mid_loop-1 ; for (j=0; j

mov T2,AR5 ; AR5=id=i+LE1

mov T2,AR3

add AR0,AR5 ; AR5 = pointer to X[id].re

add #1,AR5,AR2 ; AR2 = pointer to X[id].im

add AR1,AR3 ; AR3 = pointer to X[i].re

|| rptblocal inner_loop-1 ; for(i=j; i

mpy *AR5+,*CDP+,AC0 ; AC0=(X[id].re*U.re

:: mpy *AR2-,*CDP+,AC1 ; -X[id].im*U.im)/SCALE

masr *AR5-,*CDP-,AC0 ; AC1=(X[id].im*U.re :: macr *AR2+,*CDP-,AC1 ; +X[id].re*U.im)/SCALE

mov pair(hi(AC0)),dbl(*AR4); AC0H=temp.re AC1H=temp.im

|| mov dbl(*AR3),AC2

xcc scale,TC1

|| mov AC2>>#1,dual(*AR3) ; Scale X[i] by 1/SCALE

mov dbl(*AR3),AC2

scale

add T0,AR2

|| sub dual(*AR4),AC2,AC1 ; X[id].re=X[i].re/SCALE-temp.re mov AC1,dbl(*(AR5+T0)) ; X[id].im=X[i].im/SCALE-temp.im || add dual(*AR4),AC2 ; X[i].re=X[i].re/SCALE+temp.re mov AC2,dbl(*(AR3+T0)) ; X[i].im=X[i].im/SCALE+temp.im inner_loop ; End of inner loop

amar *CDP+

amar *CDP+ ; Update k for pointer to U[k] || add #2,T2 ; Update j

mid_loop ; End of mid-loop

sub #1,T1

add #1,fft.d_L ; Update L

bcc outer_loop,T1>0 ; End of outer-loop

mov fft.d_ST1,AR2 ; Restore ST1,ST3,T2

mov fft.d_ST3,AR3

mov AR2,mmap(ST1_55)

mov AR3,mmap(ST3_55)

mov fft.d_T2,T2

aadd #(Size-ARGS-1),SP ; Reset SP

ret

.end

相关主题
文本预览
相关文档 最新文档