1、DSP 原理及应用复习资料1DSP 的狭义理解为 数字信号处理器 ,广义理解为 数字信号处理方法 。2在直接寻址中,指令代码包含了数据存储器地址的低 7 位。当 ST1 中直接寻址编辑方式位 CPL =0 时,与 DP 相结合形成 16 位数据存储器地址;当 ST1 中直接寻址编辑方式位CPL =1 时,加上 SP 基地址形成数据存储器地址。4累加器又叫做 目的寄存器 ,它的作用是存放从 ALU 或乘法器/加法器单元 输出的数据。它的存 放格式为5桶形移位器的移位数有三中表达方式: 立即数 ; ASM ; T 低 6 位 6DSP 可以处理双 16 位或双精度算术运算,当 C16=0 位双精度
2、运算方式,当 C16=1 为双 16 位运算方式。7复位电路有三种方式,分别是 上电复位 ; 手动复位 ; 软件复位 。8立即数寻址指令中在数字或符号常数前面加一个 # 号,来表示立即数。9位倒序寻址方式中,AR0 中存放的是 FFT 点数的一半 。11汇编源程序中标号可选,若使用标号,则标号必须从 第一列 开始;程序中可以有注释,注释在第一列开始时前面需标上 星号或分号 ,但在其它列开始的注释前面只能标 分号 。12 C5402 有 23 条外部程序地址线,其程序空间可扩展到 1M ,内程序区在 第 0 页 。13指令执行前有关寄存器及数据存储器单元情况如下图所示,请在下图分别填写指令执行后
3、有关寄存器及数据存储器单元的内容。 ADD *AR3+,14,AA 00 0000 1200数据存储器3932保护位3116高阶位150低阶位A 00 0000 2700C 1 C 1AR3 0101AR3 01000100h 1500 0100h 1500一、 简答(共 40 分)1 分别解释以下指令的功能。 (6 分)LD #80h, A; 把立即数 80H 装入累加器 ALD 80h, A; 把 80H 为地址的数据装如累加器 ALD #80h,16, A; 把立即数 80H 左移 16 位后装如累加器 A1实现计算 z=x+y-w 的程序。title “example1.asm“mmr
4、egsSTACK usect “STACK“, 10hbss x,1bss y, bss w,1bss z,1def startdatatable: word 10,26,23textstart: STM #0,SWWSR STM #STACK+10h, SP ;初始化堆栈指针 SPSTM #x,AR1RPT #2 MVPD table,*AR1+ ;数据从程序存储器传送到数据存储器CALL SUMBend: B endSUMB: LD x, AADD y, ASUB w,A ;实现减法运算STL A, zRETend2实现对数组 X5=1,2,3,4,5的初始化,然后将数据存储器中的数组 X
5、5复制到数组Y5。最后实现数组 X 和数组 Y 中对应元素相乘并累加,即 z=1*1+2*2+3*3+4*4+5*5mmregsbss x, 5bss y, 5bss z, def starttable: word 1,2,3,4,5text start: STM #x, AR1RPT 4 MVPD table,*AR1+ ;从程序存储器传送到数据存储器数组 X5 STM # x, AR2STM # y, AR3RPT 4 MVDD *AR1,*AR3 ;从数据存储器数组 X5传送到 Y5SSBX FRCT ;准备整数乘法STM # x, AR2STM # y, AR3STM # z, AR4
6、RPTZ 4 MAC *AR2+,*AR3+,A STL A,*AR4 End: B endend四、分析程序回答问题(共 8 分)def _c_int00mmregsstack: usect “stack“,10hbss a,4bss x,4bss y,1datatable: word 1,2,4,3word 8,6,4,2text_c_int00: STM #stack+10h,spSTM #a,AR1RPT #7MVPD table,*AR1+CALL sumend: B endsum: STM #a,AR3STM #x,AR4RPTZ A,#3MAC *AR3+,*AR4+,ASTL
7、A,yretend (1) 说明该程序的功能:(4 分)答:a1*x1=a2*x2+a3*x3+a4*x4(2) 说明以下各量的理论值(4 分)A: 2A a1 的地址:81H 内容:1 AR1: 88H AR3: 84H1、对于 TMS320C54x 系列 DSP 芯片,下列说法正确的是 ( C )(A) 专用型 DSP (B)32 位 DSP (C) 定点型 DSP (D) 浮点型 DSP 2、要使 DSP 能够响应某个可屏蔽中断,下面的说法正确的是 (B )A. 需要把状态寄存器 ST1 的 INTM 位置 1,且中断屏蔽寄存器 IMR 相应位置 0B. 需要把状态寄存器 ST1 的 I
8、NTM 位置 1,且中断屏蔽寄存器 IMR 相应位置 1C. 需要把状态寄存器 ST1 的 INTM 位置 0,且中断屏蔽寄存器 IMR 相应位置 0D. 需要把状态寄存器 ST1 的 INTM 位置 0,且中断屏蔽寄存器 IMR 相应位置 13、若链接器命令文件的 MEMORY 部分如下所示:MEMORYPAGE 0: PROG: origin=C00h, length=1000hPAGE 1: DATA: origin=80h, length=200h则下面说法不正确的是(A )A、 程序存储器配置为 4K 字大小 B、程序存储器配置为 8K 字大小C、 数据存储器配置为 512 字大小
9、D、数据存储器取名为 DATA5、C54X DSP 的流水线是由( B )级(也即是由多少个操作阶段)组成。(A) 4 (B) 6 (C) 8 (D) 106、假定 AR3 中当前值为 200h,AR0 中的值为 20h,下面说法正确的是( C )A、在执行指令*AR3+0B 后,AR3 的值是 200h;B、在执行指令*AR3-0B 后, AR3 的值为 23Fh;C、在执行指令*AR3-0B 后, AR3 的值是 180h;7、下面对一些常用的伪指令说法正确的是:( D )A、.def 所定义的符号,是在当前模块中使用,而在别的模块中定义的符号;B、.ref 所定义的符号,是当前模块中定义
10、,并可在别的模块中使用的符号;C、.sect 命令定义的段是未初始化的段;D、.usect 命令定义的段是未初始化的段。8、在采用双操作数的间接寻址方式时,要使用到一些辅助寄存器,在此种寻址方式下,下面的那些辅助寄存器如果使用到了是非法的( D )A、AR2 B、AR4 C、AR5 D、AR6二、填空题(每空 2 分,共 20 分)1、DSP 芯片按照其用途分类,可以分为通用型和 专用型 两种。2、在堆栈操作中,PC 当前地址为 4020h,SP 当前地址为 0033h,运行 PSHM AR2 后,PC= 4021h , SP= 0032h 。 (PSHM AR2 为单字指令)3、TMS320
11、C54xDSP 芯片四种串行口类型是指 SP 、 BSP 、McBSP 和TDMcBSP。4、请简要说明 TMS320C5402VCDSP 以下引脚的功能: 复位引用脚 , : I/O 选通信号引脚 。RSIOSTRB5、 TMS320C54xDSP 的内部总线主要包括 程序总线 、 数据总线 和 地址总线 。三、问答题与程序阅读题(共计 24 分)1、简述 DSP 程序的段 .text, .data, .bss,各包含什么内容。 (6分).答: .text 代码段,该段包含程序代码.data 数据段,该段包含已初始化的数据.bss 变量段,该段为未初始化的变量保留空间2、比较伪指令 .use
12、ct 和 .sect。 (6分).答:.sect : 定义初始化了的带名称的段Unsect:在一个未初始化的段中保留空间 3、TMS320C54X 芯片的流水线共有多少个操作阶段?每个阶段执行什么任务?(8分)答: 共有 6 个操作阶段:1,预取址 2,取址 3,译码 4,寻址 5,读数 6,执行4、假设 AR3 的当前值为 200h,当使用以下 TMS320C54XX 寻址模式后其中的值为多少?假定AR0 的值为 20h。(4 分)(1)*AR3+0(2)*AR3-0(3)*AR3+(4)*AR3四、程序设计题。 (本大题 2 小题,共 24 分)1、 在进行 DSP 的程序设计时,如果程序
13、中要使用堆栈,则必须要先进行设置。下面程序段是对堆栈的设置,完成的功能是在 RAM 空间开辟了 200 个字的空间作为堆栈区,请完成程序段。 (4 分)size .set (1) stack .usect “STACK”, size;STM #stack+ (2) , SP2、 采用 TMS320C54xDSP 的定时器 0 产生方波,DSP 主频为 40MHz。要求:周期为 20s的方波发生,从 DSP 的通用 I/O 引脚 XF 输出,定时中断周期为 10ms,需要中断 1000 次,输出端 XF 引脚电平取一次反。 请在空处填写正确指令完成下面程序段。(12 分);初始化定时器 0,定时
14、为 10ms,本设置中 TDDR=9,PRD=39999,主频为 40MHz;T=25ns;定时长度计算公式:T=CLKOUT* (TDDR+1) * (PRD+1)=10ms;定时器 0 寄存器地址TIM0 .set 0024HPRD0 .set 0025HTCR0 .set 0026H;K_TCR0:设置定时器控制寄存器的内容K_TCR0_SOFT .set 0b11 ;Soft=0K_TCR0_FREE .set 0b10 ;Free=0K_TCR0_PSC .set 1001b6 ;PSC=9HK_TCR0_TRB .set 1b5 ;TRB=1K_TCR0_TSS .set 0b4
15、;TSS=0K_TCR0_TDDR .set 1001b0 ;TDDR=9K_TCR0 .set K_TCR0_SOFT| K_TCR0_FREE| K_TCR0_PSC| K_TCR0_TRB| K_TCR0_TSS| K_TCR0_TDDR ;初始化定时器 0STM #039999,TIM0STM #039999,PRD0STM (1) ,TCR0 ;启动定时器 0 中断RET;定时器 0 的中断服务子程序t0_flag .usect “vars”,1 ;当前 XF 输出电平标志位,;若 t0_flag=1,则 XF=1;若 t0_flag=0,则 XF=0 t0_counter .usect “vars”,1 ;计数长度变量time0_rev: PSHM TRNPSHM TPSHM ST0(2) RSBX CPLADDM # -1,*(t0_counter)CMPM *(t0_counter),#0BC (3) ,NTC ;NTC 表示 TC 为 0ST #1000, (4) BITF t0_flag, #1BC xf_out, NTCSSBX XFST #0, t0_flagB still_waitxf_ out: (5) ST #1, t0_flagStill_wait: POPM ST1POPM (6) POPM TPOPM TRNRETE