1. TMS320C54X DSP缓冲串行接口是在同步串口基础上,增加了一个自动缓冲单元,主要提供灵活的数据串长度,并降低服务中断销。
2.循环缓冲区是一个滑动窗,包含最近的数据,若有新的数据到来,它将覆盖旧的数据。 3.浮点DSP与定点DSP相比,价格便宜、功耗较小、运算精度稍低。 4.TMS320C54X DSP的40位ALU和累加器,仅支持16位算术运算。
对的:
3.MEMORY伪指令用来指定链接器将输入段组合成输出段方式,以及输出段在存储器中的位置。 5.DSP和MCU属于软件可编程微处理器,用软件实现数据处理;而不带CPU软核的FPGA属于硬件可编程器件,用硬件实现数据处理。 6. C54x系列DSP的CPU寄存器及片内外设寄存器映射在数据存储空间的0000h-0080h中。 9. 在TMS320VC5402型DSP所有中断向量中,只有硬件复位向量不能被重定位,即硬件复位向量总是指向程序空间的0FF80H位置。 10. C54x系列DSP只有两个通用的I/O引脚。 3.哈佛结构的特点是数据总线和程序总线分开。 4. 在C54x系列DSP中断向量表中,每个中断向量的入口地址间隔4个字。 5. 在DSP处理器汇编程序中,标号区分大小写。 7. DSP 处理器TMS320VC5402的软件中断是不可屏蔽的中断。
10. TMS320VC5402型DSP汇编语言的寻址方式可以实现FFT算法中的位倒序寻址方式。 1. 在C54x系列DSP中断向量表的最大长度只能128字。 4. DSP处理器TMS320VC5402的堆栈是向低地址方向生长的。 6. 在C54x系列DSP中断向量表中,每个中断向量的入口地址间隔4个字。 8. DSP 处理器TMS320VC5402的定时器可以构成20位的定时器。 9. TMS320C54X系列DSP的汇编语言中分支转移指令执行需要4个机器周期。 5.C5000系列DSP低功耗、大运算量,主要用于便携式信息处理终端产品。
1. 阅读下面的程序,回答问题。 .bss x, 8 LD #0001H,16,B STM #7,BRC STM #x,AR4 RPTB next-1
ADD *AR4,16,B,A STH A,*AR4+ next: LD #0,B 问题:(1)寄存器“BRC”的功能是什么?
(2)汇编语句“ADD *AR4,16,B,A”执行了多少次?
(3)执行语句“LD #0001H,16,B”后,累加器B的内容是多少?
1.(1) 寄存器“BRC”的功能是暂存块循环的次数 (2) 8次 (3) B=0x0100H; 2. 已知DSP的三个时钟引脚状态CLKMD1-CLKMD3=111,外部晶振=10MHz,参数设置表: CLKMD1 CLKMD2 CLKMD3 CLKMD复位值 时钟方式 0 0 0 E007H PLL×15 0 0 1 9007H PLL×10
0 1 0 4007H PLL×5 1 0 0 1007H PLL×2 1 1 0 F007H PLL×1 1 1 1 0000H 2分频 1 0 1 F000H 4分频 STM #00H,CLKMD
Status:LDM CLKMD,A AND #01H,A BC Status,ANEQ STM #9007H,CLKMD
问题(1)DSP复位后,DSP的工作时钟是多少?
(2)执行上面的程序片段后,DSP的工作时钟是多少? 2. 答:(1)5MHz (2)100MHz
3. 阅读下面的命令连接文件(简称CMD文件)和程序文件: CMD文件: MEMORY
{ PAGE 0:PROG:origin = 0x1000,length = 0x1000 PAGE 1:DATA:origin = 0x2000,length = 0x1000 }
SECTIONS { .text: {}>PROG PAGE 0 .data: {}>DATA PAGE 1 } .data
table: .word 1,2,3,4 ; 变量初始化 .text
start: STM # 0,SWWSR ; 插入0个等待状态 问:(1)MEMORY和SECTIONS的作用各是什么?
(2)标号“table”和“start”的地址分别是什么,分别位于程序空间还是数据空间? 3. 答:MEMORY和SECTIONS链接伪指令,用来指定目标存储器结构和地址分配。 标号table:1000h(程序空间) 标号start:2000h(数据空间) 三.程序阅读题(本题总分30分,每小题10分) 1. 阅读下面的程序: .mmregs
DAT0 .SET 60H DAT1 .SET 61H DAT2 .SET 62H DAT3 .SET 63H
add3 .macro P1,P2,P3,ADDRP LD P1,A ADD P2,A ADD P3,A STL A,ADDRP .endm
ST #0034h,DAT0 ST #0243h,DAT1 ST #1230h,DAT2
ADD3 DAT0,DAT1,DAT2,DAT3 问题:(1)语句“.mmregs”的含义。
(2)语句“ADD3 DAT0,DAT1,DAT2,DAT3”是一条什么类型的语句?作用是什么? (3)执行此段程序后,存储单元(DAT3)的运行结果多少? 1.答(1) 定义存储器映像寄存器的符号名称。(2)宏调用。执行三个数相加。(3) 14a7H 2. 阅读下面的程序,回答问题。 MEMORY
{ PAGE 0:PROG:origin = 0x2000,length = 0x1000 PAGE 1:DATA:origin = 0x4000,length = 0x1000 }
SECTIONS { .text: {}>PROG PAGE 0 STACK: {}>DATA PAGE 1 }
汇编程序
size .set 0x0120 stack .usect “STACK”,size .text
STM # stack + size,SP 问题:(1)指令“stack.usect“STACK”,size”的作用是什么? (2)标号“stack”的存储器地址是多少?
(3)执行这段代码之后,SP寄存器的内容是多少? 2.答:(1)定义一个未初始化段,段名为”STACK”,目的是为变量stack保留size个单元的存储空间。(2) stack的存储空间为0x4000; (3) SP=0x4120;
3. 阅读程序,回答后面的问题 STM #9,AR4
begin: STM #7,BRC RPTB next-1 nop
next: LD #0,B banz begin,*AR4-
问(1)BRC寄存器是做什么用途?
(2)其中的“nop”语句被执行了多少次?
3.答:BRC保存着RPTB指令的循环次数 80次 三.程序阅读题(本题总分30分,每小题10分) 1.阅读下面的程序片断,写出运行结果 .mmregs DAT0 .SET 60H LD #004h,DP ST #0345h,DAT0
STM #0002h,T MPY DAT0,A NOP
问题:(1)寄存器T的作用是什么?
(2)执行“MPY DAT0,A”后,累加器A的内容是什么?
1.答:寄存器T的作用是暂存被乘数,累加器A的内容为0x68A或68Ah 2. 阅读程序,回答后面的问题 STM #6,AR4 begin: STM #9,BRC RPTB next-1 nop
next: LD #0,B
banz begin,*AR4-
问题:(1) BRC寄存器是做什么用途?
(2)语句“banz begin,*AR4-”的作用是什么? (3)其中的“nop”语句被执行了多少次? 2. 答:BRC保存着RPTB指令的循环次数
判断AR4的内容是否为零,若不为零,跳转到标号begin。 70次 3. MEMORY
{PAGE 0: PROM: org=0E000h,len=100h VECS: org=0FF80h,len=04h PAGE 1: SPRAM: org=0060h,len=20h DARAM: org=0080h,len=100h }
SECTIONS
{ .text :>EPROM PAGE 0 .data :>EPROM PAGE 0 .bss :>SPRAM PAGE 1 STACK :>DARAM PAGE 1 vectors :>VECS PAGE 0 }
问题:(1)该文件是如何配置程序空间和数据空间的?
(2)该文件中出现了几个段?哪些是初始化段?哪些是未初始化段?各段是如何分配的?
3.答:该文件使用MEMORY伪指令将程序空间划分为两个小区间:名为PROM的区间其起始地址为0E000h,长度为100h字;名为VECS的区间其起始地址为0FF80h,长度为4字。将数据空间也分为了两个小区间: 名为SPRAM的区间其起始地址为0060h,长度为20h字;名为DARAM的区间其起始地址为0080h,长度为100h字。
(2)出现了5个段,.text,.data和vectors是初始化段,.bss和STACK段是未初始化段。 .text和.data分配到程序空间的EPROM区间;.bss分配到数据空间SPRAM区间;STACK段分配到数据空间的DARAM区间; vectors段分配到程序空间的VECS区间
例3-3 编写计算 的主要程序部分。
.bss x,4 ;为X建立4个单元,放置X1、X2、X3、X4 .bss y,1 ;为Y建立1个单元,放置Y STM #x,AR1 ;将X1的地址传给AR1 STM #3,AR2 ;将循环次数3传给AR2 LD #0,A ;对A清零
loop:ADD *AR1+,A ;对X1、X2、X3、X4循环累加,结果放A中 BANZ loop, AR2- ;检查循环是否应结束 STL A,y ;将累加结果存入Y中
例3-5 利用单条指令的重复操作对数组x[5]={0,0,0,0,0}进行初始化。 .bss x,5 ;为数组x分配5个存储单元 STM #x,AR1 ;将x的首地址赋给AR1 LD #0,A ;对A清零
RPT #4 ;设置重复执行下条指令5次 STL A,*AR1+;对x[5]各单元清零 或者 .bss x,5
STM #x,AR1
RPTZ A,#4;对A清零并设置重复执行下条指令5次 STL A,*AR1+
例3-6 对数据组x[5]中的每个元素加1。
.bss x,5 ;为数组x分配5个存储单元
begin:LD #1,16,B ;将1左移16位放入B的高端字的最低位 STM #4,BRC ; 4→BRC,(PC)+2 →RSA STM #x,AR4 ;将x的首地址赋给AR4 RPTB next-1 ;将NEXT-1 →REA
ADD *AR4,16,B,A ;x地址的内容左移16位加 B的高端字,结果放A STH A,*AR4+ ;将A的高端字存入x单元,完成加1操作 next: LD #0,B ;对B清零
例3-8 在完成R=(x+y)*z操作后转至next。 可以分别编出如下两段程序:
利用普通分支转移指令B 利用延迟分支转移指令BD LD @x,A LD @x,A ADD @y,A ADD @y,A STL A, @s STL A, @s LD @s,T LD @s,T MPY @z,A BD next STL A, @r MPY @z,A B next STL A, @r
(共8个字,10个T) (共8个字,8个T) 例5-1 设计一存储空间为100个单元的堆栈。
size .set 100 ;设置堆栈空间的大小为100
stack .usect “STK”,size ;设置堆栈段的首地址和堆栈空间 STM #stack+size,SP ;将栈底地址指针送SP,对其初始化