第一章 绪论
1、简述DSP系统的构成和工作过程。
答:DSP系统的构成:
一个典型的DSP系统应包括抗混叠滤波器、数据采集A/D转换器、数字信号处理器DSP、D/A转换器和低通滤波器等。
DSP系统的工作过程:
①将输入信号x(t)经过抗混叠滤波,滤掉高于折叠频率的分量,以防止信号频谱的混叠。
②经过采样和A/D转换器,将滤波后的信号转换为数字信号x(n)。
③数字信号处理器对x(n)进行处理,得数字信号y(n)。
④经D/A转换器,将y(n)转换成模拟信号;
⑤经低通滤波器,滤除高频分量,得到平滑的模拟信号y(t)。
9、简述DSP系统的设计步骤。
答:①明确设计任务,确定设计目标。
②算法模拟,确定性能指令。
③选择DSP芯片和外围芯片。
④设计实时的DSP芯片系统。
⑤硬件和软件调试。
⑥系统集成和测试。
第二章 TMS320C54x硬件结构
1、 TMS320C54X芯片的基本结构都包括哪些部分?
答:①中央处理器
②内部总线结构
③特殊功能寄存器
④数据存储器RAM
⑤程序存储器ROM
⑥I/O口
⑦串行口
⑧主机接口HPI
⑨定时器
⑩中断系统
2、TMS320C54X芯片的CPU主要由哪几部分组成?
答:①40位的算术运算逻辑单元(ALU)。
②2个40位的累加器(ACCA、ACCB)。
③1 个运行-16至31位的桶形移位寄存器。
④17×17位的乘法器和40位加法器构成的乘法器-加法器单元(MAC)。
⑤比较、选择、存储单元(CSSU)。
⑥指令编码器。
⑦CPU状态和控制寄存器。
3、TMS320VC5402共有多少可屏蔽中断?它们分别是什么?和属于哪一类中断源?
答:TMS320VC5402有13个可屏蔽中断,和属于外部硬件中断。
4、试分析下列程序的流水线冲突,画出流水线操作图。如何解决流水冲突?
STLM A,AR0
STM #10,AR1
LD *AR1,B
解:流水线图如下图:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
预取指 | 取指 | 译码 | 寻址 | 读数 | 执行 | ||||
STLM A,AR0 | 写AR1 | ||||||||
预取指 | 取指 | 译码 | 寻址 | 读数 | 执行 | ||||
STM #10,AR1 (1st Word) | 写AR2 | 写AR2 | |||||||
预取指 | 取指 | 译码 | 寻址 | 读数 | 执行 | ||||
STM #10,AR1 (2nd Word) | |||||||||
预取指 | 取指 | 译码 | 寻址 | 读数 | 执行 | ||||
LD *AR1,B | 读AR2 | ||||||||
解决流水线冲突:
最后一条指令(LD *AR1,B)将会产生流水线冲突,在它前面加入一条NOP指令可以解决流水线冲突。
5、试根据等待周期表,确定下列程序段需要插入几个NOP指令。
①LD @GAIN, T
STM #input,AR1
MPY *AR1+,A
解:本段程序不需要插入NOP指令
②STLM B,AR2
STM #input ,AR3
MPY *AR2+,*AR3+,A
解:本段程序需要在MPY *AR2+,*AR3+,A语句前插入1条NOP指令
③MAC @x, B
STLM B,ST0
ADD @table, A, B
解:本段程序需要在ADD @table, A, B语句前插入2条NOP指令
第三章 TMS320C54x指令系统
1、已知(80H)=50H,AR2=84H,AR3=86H,AR4=88H。
汇编指令有多少个MVKD 80H,*AR2
MVDD *AR2,*AR3
MVDM 86H, AR4
运行以上程序后,(80H)、(84H)、*AR3和AR4的值分别等于多少?
解:(80H)=50H,(84H)=50H,*AR3=50H,AR4=50H
2、已知,(80H)=20H、(81H)=30H。
LD #0,DP
LD 80H,16,B
ADD 81H,B
运行以上程序,B等于多少?
答:(B)=00 0000 0000H
3、阅读以下程序,分别写出运行结果。
.bss x,4
.data
table:.word 4,8,16,32
……
STM #x,AR1
RPT #2
MVPD table,*AR1+
解:数据表table中的常量4传送到以变量x 的地址为地址的存储单元中;数据表table中的常量8传送到以变量x+1 的地址为地址的存储单元中;数据表table中的常量16传送到以变量x+2 的地址为地址的存储单元中;
.bss x,4
.data
table: .word 4,8,16,32
……
STM #x,AR1
RPT #2
MVPD table,*+AR2
解:数据表table中的常量4传送到以变量x+1 的地址为地址的存储单元中;数据表table中的常量8传送到以变量x+2 的地址为地址的存储单元中;数据表table中的常量16传送到以变量x+3 的地址为地址的存储单元中;
第四章 汇编语言程序的开发工具及CCS集成开发环境
1、软件开发环境有哪几种?在非集成开发环境中,软件开发常采用哪些部分?
答:可以在两种开发环境中进行C54X的开发:非集成的开发环境和集成的开发环境。在非集成开发环境中,软件开发常采用:编辑、汇编、链接、调试等部分。
2、链接器对段是如何处理的?
答:链接器将一个或多个COFF目标文件中的各种段作为链接器的输入段,经过链接后在一个可执行的COFF输出模块中建立各个输出段,通过情况下是将不同目标文件中的同名段进行合并,并为各个输出段分配进具体的存储器中。
3、链接器能完成什么工作?链接器命令文件中,MEMORY命令和SECTIONS命令的任务是什么?
答:链接器将各个目标文件合并起来,并完成如下工作:
(1)将各个段配置到目标系统的存储器。
(2)对各个符号和段进行重新定位,并给它们指定一个最终的地址。
(3)解决输入文件之间的未定义的外部引用。
MEMORY命令的作用:
MEMORY命令用来建立DSP应用系统中的存储器模型。通过这条命令,可以定义系统中所包含的各种形式的存储器,以及它们占用的地址范围。
SECTION命令的作用:
说明如何将输入段结合成输出段;在可执行程序中定义输出段;规定输出段在存储器中的存储位置;允许重新命名输出段。
第五章 TMS320C54x的汇编语言程序设计
1、伪指令和注释有什么差别?它们在程序中的作用一样吗?
答:伪指令用于为程序提供数据并指示汇编程序如何汇编程序,是汇编语言程序的一个重要内容。汇编伪指令主要完成以下工作:
(1)将代码和数据汇编进指定的段
(2)为未初始化的变量在存储器中保留空间
(3)控制清单文件是否产生
(4)初始化存储器
(5)汇编条件代码块
(6)定义全局变量
(7)为汇编器指定可以获得宏的库
(8)考察符号调试信号
注释是程序的任选项。注释可以由ASCII码和空格组成。注释在汇编源清单中要显示,但不能影响汇编。注释在程序中的作用是说明程序语句的含义,以便对软件进行维护。
2、在堆栈操作中,PC当前地址为4020H,SP当前地址为1013H,运行PSHM AR7后,PC和SP的值分别是多少?
解:SP=1012H; PC=4021H
3、试编写0.25×(-0.1)的程序代码。
参考程序如下:
.title "FracAmp.asm"
.mmregs
.global _c_int00
.bss x,1
.bss y,1
.bss z,1
.data
AmpCoef: .word 25*32768/100
.word -1*32768/10
.text
_c_int00: ssbx FRCT
stm #x,ar1
rpt #0x1
mvpd #AmpCoef,*ar1+
stm #x,ar2
stm #y,ar3
mpy *ar2,*ar3,A
sth A,*ar1
Wait: b Wait
.end
4、将定点数0.00125用浮点数表示。
解:A=28H;T=19H
8、试写出以下两条指令的运行结果:
①EXP A
A=FFFD876624 T=0000
则以上指令执行后,B、T的值各是多少?
解: A=0xFFFD876624;T=5
②NORM B
B=420D0D0D0D, T=FFF9
则以上指令执行后,B、T的值各是多少?
解:B=0x841A1A1A, T=FFF9
第六章 应用程序设计
1、FIR滤波器的算法为y(n)=a0x(n)+a1x(n-1)+a2x(n-2)+a3x(n-3)+a4x(n-4),试用线性缓冲区和直接寻址方法实现。
解:参考教材P179—P181。
2、FIR低通滤波器的截止频率为,其输出方程为:
。
存放的系数表以及存放数据的循环缓冲区设置在DARAM中,如图6.1所示。试用MATLAB中的fir1函数确定各系数ai,用循环缓冲区实现。
解:运行Coef.m文件,生成滤波器所需系数文件。Coef.m文件内容如下:
n=79;
b=fir1(n,0.1);
fid=fopen('FIRCoef.inc','wt');
fprintf(fid,'%s %s %s\n','FIRCoef',' .sect',' "FIRCOEF"');
fprintf(fid,' %s\n','');
for j=1:1:(n+1)
fprintf(fid,' %s %6.0f\n','.word',round(b(j)*16384));
end
fclose(fid)
用循环缓冲区实现的参考程序如下:
;FIR滤波器的参考程序,使用循环缓冲区法。
.title "fir_main.asm"
.mmregs
.global _c_int00
K_FIR_BFFR .set 80
K_FIR_INDEX .set 1
K_FRAME_SIZE .set 256
stack_len .set 100
stack .usect "STACK",stack_len
FIR_DP .usect "fir_vars",0
d_filin .usect "fir_vars",1
d_filout .usect "fir_vars",1
fir_coff_table .usect "fir_coff",K_FIR_BFFR
d_data_buffer .usect "fir_bfr",K_FIR_BFFR ; buffer size for the filter
FIR_Dinbuf .usect "fir_dinbuf",K_FRAME_SIZE
FIR_Doutbuf .usect "fir_doutbuf",K_FRAME_SIZE
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论