《《dsp原理及应用》试卷答案.doc》由会员分享,可在线阅读,更多相关《《dsp原理及应用》试卷答案.doc(6页珍藏版)》请在金锄头文库上搜索。
1、通信系DSP原理及应用期末考试题(答案)姓名: 学号: 班级: 分数: 考试时间:15:4017: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 #
2、0x3,DPH”使用的寻址方式是 直接寻址模式 ,“mov *(#0x),T2”使用的寻址方式是 绝对寻址模式 。3、 指令执行前AC0的值是,那么汇编语句“AND #0x7f, AC0”,执行之后,AC0的值是 。4、 C55x 的链接器命令文件中,SECTIONS命令的主要作用是 告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出 。MEMORY命令的主要作用是 定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度 。二、简述题(共40分)1、 根据你的理解,试列举 DSP 芯片的特点?(5分)答:哈佛结构;多总线结构;指令系统的流水线操作;专用的硬
3、件乘法器;特殊的DSP指令;快速的指令周期;丰富的外设 2、 TMS320C55x 芯片的总线结构有何特点,主要包括哪些总线?它们的功能是什么?(6分) 答:TMS320C55x DSP采用先进的哈佛结构并具有十二组总线,其独立的程序总线和数据总线允许同时读取指令和操作数,实现高度的并行操作。采用各自分开的数据总线分别用于读数据和写数据,允许CPU在同一个机器周期内进行两次读操作数和一次写操作数。独立的程序总线和数据总线允许CPU同时访问程序指令和数据。 包括12条总线,分别是:PAB和PB、BAB和BB、CAB和CB、DAB和DB、EAB和EB、FAB和FB。功能:3、 DSP 为了降低功耗
4、采取了哪些措施?(6分)答:双电压供电;多种工作模式4、 TMS320C55x 的总存储空间为多少?可分为哪 3 类,它们的大小是多少?存储器空间的各自作用是什么?(6分)答:程序空间16M Byte;I/O空间64K Words;数据空间8M Words5、 TMS320C55x有哪些寻址方式,它们是如何寻址的?试为每种寻址方式列举一条指令(6分)答:直接寻址模式,mov K16,DP;间接寻址模式,mov *AR0,AC0;绝对寻址模式,mov *(#0x),T2;MMR寻址模式,mov *abs16(AR2), T2;寄存器位寻址模式,btstp 30, AC1;圆形寻址模式。6、 将C
5、源程序转换成可执行文件需要经过哪些步骤?(6分)答:创建C源文件;创建工程文件;创建连接器命令文件;编译整个工程文件;链接;生成可执行文件7、 常用的TMS320C55x汇编命令有哪些,它们的作用是什么?(5分)三、程序设计题(共40分)1、 用C55x汇编语言实现计算 的程序。(10分)答:mpym *AR0+, *AR1+, AC0mpym *AR0+, *AR1+, AC1add AC1, AC0mpym *AR0+, *AR1+, AC1add AC1, AC0mpym *AR0+, *AR1+, AC1add AC1, AC0或者:mpym *AR0+, *AR1+, AC0 |rp
6、t #2 macm *AR0+, *AR1+, AC02、 用C55x汇编语言实现计算 的程序。(10分)答:mpym *AR0+, *AR1+, AC3 masm *AR0+, *AR1+, AC33、 以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_ST
7、1 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,f
8、ft.d_L ; Initialize L=1| sfts AC0,T0 ; T0=EXP mov AC0,fft.d_N ; N=1EXP 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 XAR5outer_loop ; for (L=1; L=EXP; L+) mov fft.
9、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=21 | sfts AC0,#-1 sub #1,AC0 ; Init mid_loop counter mov mmap(AC0L),BRC0 ; BRC0=
10、LE1-1 sub #1,AC1 ; Init inner loop counter mov mmap(AC1L),BRC1 ; BRC1=(NL)-1 add AR1,AR0 mov #0,T2 ; j=0 | rptblocal mid_loop-1 ; for (j=0; jLE1;j+) mov T2,AR5 ; AR5=id=i+LE1 mov T2,AR3 add AR0,AR5 ; AR5 = pointer to Xid.re add #1,AR5,AR2 ; AR2 = pointer to Xid.im add AR1,AR3 ; AR3 = pointer to Xi.r
11、e | rptblocal inner_loop-1 ; for(i=j; i#1,dual(*AR3) ; Scale Xi by 1/SCALE mov dbl(*AR3),AC2 scale add T0,AR2| sub dual(*AR4),AC2,AC1 ; Xid.re=Xi.re/SCALE-temp.re mov AC1,dbl(*(AR5+T0) ; Xid.im=Xi.im/SCALE-temp.im| add dual(*AR4),AC2 ; Xi.re=Xi.re/SCALE+temp.re mov AC2,dbl(*(AR3+T0) ; Xi.im=Xi.im/SCALE+temp.iminner_loop