DSP通信终结版 - 图文

更新时间:2024-04-05 10:50:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

DSP复习题目

一、填空题

1、在数字信号处理过程中,模/数转换都要前进行低通滤波,其目的 ( 抗混叠 )。

2 、DSP芯片的一个主要特点是采用了哈佛结构,它与传统的冯—洛依曼结构的最主要的区别是( 程序空间与数据空间分开,允许同时取指令和取操作数 )。

3、在TMS320C54X中,解决流水线冲突的办法是插入( 若干条NOP )指令。

4、 执行下列指令后,如果此时系统相应的中断是INT0(序号为16,即10H),则此中断的入口地址应为( 3AC0) H。 STM #3AA0H,PMST

5、执行复位操作后,CPU状态寄存器ST0的值为( 1800 ) H。

6、用DSP实现FIR滤波,常用的数据延迟方式包括( 线性缓冲区法) 和( 循环缓冲区法)。

7、 执行下列指令后,如果此时系统相应的中断是内部定时器中断TINT0,则此中断的入口地址应为 (3ECC) H。 STM #3EA0H,PMST

8、 执行复位操作后,处理器工作方式状态寄存器(PMST)的值为

( FF80H或FFC0H

)。

9、 如果累加器A中的内容是00,1234,FE00H执行下列三条指令后T寄存器和累 加器中的内容分别是( T=0002,A=00 48D3 F800H )。 EXP A ST T,EXPONENT NORM A

10、 在COFF文件格式中,默认的3个块为.text、 .data和(.bss),

未初始化的块由.bss和(.usect)两条汇编伪指令构成。

11、 在C54X的32位数据寻址中中,如果起始地址为偶地址,则下一地址在 (高) 地址(低、高)。

12、延迟分支转移和非延迟分支转移的主要区别(节省两个机器周期,比非延时指令快,但直观性差)。 13、 DARAM是指在一个周期中可访问两次的RAM,但在访问DARAM时,必须是对(不同)的存储器块的访问,才能避免流水线的冲突。

15 、指令(PORTR和PORTW)可以完成对I/O空间的读写。

14、 如果状态寄存器ST1中的SXM=0,16位的数据E234H加到ALU中以后,将被符号扩展为40为的数据,该数用16进制数可表示为(00 0000 E234)H。

15、假设A累加器的内容为123456789AH,在执行下列指令后,TEMP中的值为(1234H)。

STH A,-8,TEMP

16、 桶形移位寄存器作用之一是实现数据的移位,如果A中的值为00,3456,789AH,B中内容为0,执行下列指令后,B累加器中的值为(00 0034 5678H)。 ADD A,-8,B

17、数据存储器00A0H中的内容是4567H,执行下列指令后,A累加器中的内容是 (00000000A0H)。 LD #A0H,A

18、 直接寻址方式中,某指令译码后为0339H,且此时数据页指针DP=13H,则所寻址的数据存储器的地址为(09B9)H。

19、 执行下列两条指令后,定时器的中断周期是系统时钟周期的(2313)倍。

STM #0100H,PRD STM #0E28H,TCR

20、如果累加器A中的内容是3F,FEB5,FE00H执行下列三条指令后T寄存器和 累加器中的内容分别是(FFF9H,00 7FFD 6BFCH)。

EXP A ST T,EXPONENT NORM A

21、 在外部总线的操作中,具有更高优先权寻址的是(数据寻址)(数据寻址、程序寻址)。

22、在进行中断操作时,若要屏蔽某中断,则中断屏蔽寄存器(IMR)中的相应位应被(复位)(置位、复位)。

23、 浮点数0.125 用Q.15 格式表示为定点数为(1000H),用Q.13 格式表示为(0400H)。 24、锁相环(PLL)的主要作用是(频率放大和信号提纯,输出不同分频信频)。 25、用来进行累加器寻址的指令有(READA)Smem 和(WRITA)Smem。

26、 TMS320C54X 系列的DSP芯片的指令系统按功能可以分为(算术运算指令)、逻辑运算指令、程序控制指令、(加载和存储指令)等。

27、DSP芯片的字长每增加一位,则其SQNR将增加(6 dB)的增益。 28、直接寻址方式中,基地址由数据页指针(DP)和堆栈指针(SP)给出。

29、TMS320C54X DSP采用改进的哈佛结构,共有1组程序存储总线,(3)组数据总线和(4) 组地址总线。

30、DSP执行一条指令,需要通过取指、( 译码 )、( 寻址 )、取操作数和执行等阶段。 31、I/O存储器可以用(2)条指令对I/O空间进行寻址。

32、时钟发生器由一个(内部振荡器)和一个(锁相环电路)组成。 33、按数据格式分类,DSP芯片可分为(定点)式芯片和(浮点)式芯片。 34、TMS320C5402 DSP有(2)个定时器。

35、实时数字信号处理技术的核心和标志是( 实时处理

)。

36、DSP的狭义理解为 (数字信号处理器),广义理解为( 数字信号处理方法) 。

37、在直接寻址中,指令代码包含了数据存储器地址的低(7) 位。当ST1中直接寻址编辑方式位CPL(= 0)时,与DP相结合形成16位数据存储器地址;当ST1中直接寻址编辑方式位CPL( = 1 )时,加上SP基地址形成数据存储器地址。

38、TMS320C54有两个通用引脚,BIO和XF,( BIO)输入引脚可用于监视外部接口器件的状态;( XF ) 输出引脚可以用于与外部接口器件的握手信号。

39、累加器又叫做 ( 目的寄存器 ),它的作用是存放从(ALU或乘法器/加法器单元) 输出的数据。它的存放格式为

40、桶形移位器的移位数有三中表达方式:( 立即数 ) ;( ASM );( T低6位 )。 41、复位电路有三种方式,分别是 (上电复位);(手动复位 );( 软件复位 ) 。 42、立即数寻址指令中在数字或符号常数前面加一个( # )号来表示立即数。 43、位倒序寻址方式中,AR0中存放的是 (FFT点数的一半)。

44、COFF目标文件中包含三个缺省的段:( .text )段;(.data )段和(.bss)段。

45、汇编源程序中标号可选,若使用标号,则标号必须从( 第一列 )开始;程序中可以有注释,注释在第一列开始时前面需标上 ( 星号或分号 ),但在其它列开始的注释前面只能标 ( 分号 )。 46、C5402有23条外部程序地址线,其程序空间可扩展到 ( 1M ),内程序区在( 第0页 )。 47、C54x是TI公司( 16位 )定点DSP。

39~32 保护位 31~16 高阶位 15~0 低阶位 48、C54x采用多总线结构,其中(PB)为程序总线,( CB,DB,EB )为数据总线,( EB )为写总线。 49、C54x内核CPU包含一个(40位)的ALU算术逻辑运算单元,(2)个40bit的累加器和一个40bit的桶形移位寄存器。

50、对进入ALU的数进行符号扩展的方法为:当( SXM=0 )时不进行符号位扩展,( SXM=1 ) 时进行符号位扩展。

51、在ALU中运算结果产生溢出时,若( OVM=0 ),则不对结果做任何处理,反之( OVM=1 )则进行溢出处理。

52、当运算结果产生溢出时会在( OVA 或OVB )中置相应的标志位。 53、当C16=1时为( ALU工作在双十六位算术运算方式

),当C16=0时为 (双精度算术运算方式)。

54、累加器A/B结构完全一样,AG为( 保护位 ),AH为( 高阶位 ),AL为( 低阶位 )。 55、桶形移位寄存器可以进行-16——+31之间数的移位,其中正数(左移 ),负数( 右移 )。 56、移位寄存器有三种移位方式:( ST1的ASM )、T的低6位、指令中的立即数。 57、MAC乘——累加器可以在一个流水线周期完成1次乘法和1次加法运算。

58、比较选择存储单元CSSU的功能是将累加器的( 高位字AH和低位字AL )进行比较,将较大存入指定的数据存储器。

59、指数编码器的功能是将累加器中的数变成指数部分和底数两部分,并将指数存于( T寄存器 )。 60、CPU的状态与控制寄存器分别为ST0、ST1、PMST,其中( PMST )主要用以设置处理器的工作模式。 61、C54x片内RAM分成(SARAM)和(DARAM)两个部分,其中(DARAM )允许在一个周期内访问两次。 62、C54x可以工作在2种模式,即微处理器模式(MP)和微计算机模式(MC),具体由MP/MPC#引脚控制。 63、C54x的改进型哈弗结构允许程序存储器和数据存储器之间互相存放内容。当( OVLY=1 )时允许数据存放于程序代码,当(DROM=1)允许程序存储器存放数据。

64、数据存储器按每80H个字为一个页面进行存储器分页管理,共有512个页面,其中数据存储器的(PAGE 0)为CPU存储器映像寄存器MMR。(P25)

65、.C54x共有6级流水线,分别为预取指、取指、( 译码 寻址 )、读数、执行、写数据。 66、( 双字或三字)指令带保护周期,会自动插入一个保护周期从而避免流水线冲突。 67、RS#为C54x系统复位引脚,当RS#=0时,CPU从(

0FF80H )开始执行程序。

68、软件可编程状态发生器可以通过编程来延长总线等待周期,最多可以达(7)机器周期。

69、C54x的7种寻址方式分别为立即寻址、绝对寻址、累加器寻址、直接寻址、(间接寻址 )、MMR寻址、堆栈寻址。

70、间接寻址的2种扩展寻址为( 位码倒序寻址 )和( 循环寻址 )。

71、直接寻址时,数据存储器的16位地址由基地址( DP或SP )和偏移地址构成。

72、在直接寻址时,以DP或SP为基地址进行寻址的区别是SP能寻址连续的( 64K字单元 ),而DP只能寻址( 128个连续单元 )。

73、( 直接寻址 )操作数前面加@符号,( 间接寻址 )操作数前加*符号。

74、间接寻址中的( 位码倒序寻址 )通常用于FFT快速傅里叶变换,(循环寻址)常用于数字滤波运算。 75、C54X助记符指令由( 操作码 )和( 操作数 )两部分组成。 76、(B[D])为无条件转移指令,(BC[D])为有条件转移指令。 77、(RSBX )为置0指令,(SSBX )为置1指令。

78、段是(在存储器图中占据相邻空间的代码或数据块 ),一个目标文件中的每个段都是分开且各不相同。 79、COFF目标文件都包含以下3种形式的段:( .text , .data , .bss ),通常为未初始化变量保留存储空间。

80、已初始化的段可以包含( 可执行代码或初始化数据 ),主要有.text段(已初始化段),.data段(已初始化段).sect段(已初始化的自定义段),映射在ROM程序存贮器。 81、未初始化数据段它包括( .bss 和 .usect ),映射在RAM数据存储器。

82、汇编器有5条伪指令用以建立各种不同类型的段,分别为:( .text , .data , .bss ,.sect , .usect )。 83、在连接命令文件中,MEMORY指令语句中的(PAGE 0)用来定义程序存储器空间,( PAGE 1 )用来定义数据存储器空间。

84、助记符指令源语句的每一行通常包含4个部分:标号区、( 助记符区)、操作数区和注释区。(p140) 85、(助记符)用来表示指令所完成的操作,可以是汇编语言指令、汇编伪指令、宏伪指令。

86、C54x的堆栈是(由高地址向低地址)增长,入栈时堆栈指针SP先(减1),然后将数据压入数据栈,出栈时数据先从数据栈中弹出,然后堆栈指针SP(增1)。 87、编程时设置堆栈的方法是把栈顶赋给( SP堆栈指针 )。 88、块指令重复操作及其次数,重复次数放置于(BRC)中。

89、采用小数运算时,( 指定点小数在16位)称为定标。小数点在16位数中的位置不同,可以表示不同大小和不同精度的小数。

90、定点数的Qm.n表示方法中,m表示( 整数位数 ),n表示(小数位数)。m位数越多表示( 数的范围越大),n位数越多表示数的(精度越高 )。

91、Qm.n数的规格化方法,(将小数乘以2的N次方),取整数部分,再取这个数的二进制补码。 92、两有符号数相乘,其结果会有2个符号位,可以使( FRCT位置1 )将乘法运算结果自动左移一位,消去多余符号位。

93、C5402的定时器为20位定时器,分别由4位预定标计数器( PSC )和16位定时计数器( TIM )组成,每接收一个CPU时钟减1,当计数器减到0时,产生定时中断(TINT)。 94、定时器的定时时间为:定时周期 =( CLROUT * ( TDDR+1 ) * ( PRD+1 ) )。 95、硬件中断是(由硬件电路产生的中断),软件中断是由软件所触发的中断。 96、对于软件中断和( 非屏蔽中断 ) ,CPU将立即响应,进入相应中断服务程序。

97、中断向量可以映射到程序存储器的任何(128字页面的起始位置/RAM区)(保留区域除外)。 98、C54x的中断向量地址是由(PMST寄存器中的IPTR)和左移2位后的中断向量序号所组成。 99、C54x的边沿中断触发类型中,要求外部输入脉冲宽度至少保持(3~ 5)个时钟周期,才能被CPU采集到。

100、C54x DSP的最小系统包括( 复位电路,电源电路,时钟电路 )3个部分。

101、为了使芯片正常初始化,通常应保证RS低电平的时间至少持续(3~ 5)个外部时钟周期。 102、对PLL编程时,若要改变PLL的倍频,必须先将( PLL的工作方式从倍频方式切换到分频方式 ),然后再切换到倍频方式。

103、I/O端口扩展中,常用74HC573锁存器扩展I/O端口,扩展时通常输入(使用缓存器),输出(锁存器)。

104、为使函数具有中断属性,在函数名前面添加(INTERRUPT)关键字。

105、中断函数是一种特殊的函数,没有返回,也没有参数传递,可以通过(全局变量)来传递函数参数和结果。

106、(局部变量)属于动态变量,即使定义了但没使用是不会分配内存地址;全部变量属于静态变量,只要定义,即使不使用也要为其分配内存单元。

107、在C语言编程时,欲访问DSP的I/O空间,必须使用( ioport )关键字定义变量。 108、 OVLY=(0),则片内RAM只安排到数据存储空间。 109、 DROM=(1),则部分片内ROM安排到数据空间。 110、 C54x DSP 具有两个(40)位累加器。 111、 累加器A的(39~32 )位是保护位。

112、ST1的CPL=( 1 )表示选用堆栈指针(SP)的直接寻址方式。 113、ST1的C16=( 0 )表示ALU工作在双精度算术运算方式。

114、 执行复位操作后,下列寄存器的初始值分别为:ASM=(0)、DP=(0)、XM=(1),XF=(1) 115、软件中断都是由( INTR )、(TRAP)和( RESET )产生。 116、重复执行单条指令的最大次数为( 65536 )。

117、访问不同页的同一单元(dma值相同)的区别在于(基地址)的值不同。 118、对硬件初始化,复位输入信号 至少必须保持(5)个CLKOUT周期的低电平。

119、当C54x响应复位时,CPU终止当前的程序,并强迫程序计数器PC置成( 0FF80H )。 120、如果没有利用MEMORY和SECTIONS命令,链接器就按( 0080H )来定位输出段。 121、如果汇编语言程序中无段命令,那么汇编器把程序中的内容都汇编到( .text )段。 122、TMS320C54xDSP有(6)级流水线。

123、含有29个字的循环缓冲器必须从最低(5)位为0的地址开始。 124、一条k段流水要完成n条指令所需的最少周期数为(n/k)。 125、TMS320C54x内部有(3)种总线。

126、TMS320VC5416-160的指令周期是(6.25X10)毫秒,它的运算速度是(160)MIPS。 127、TMS320VC5402-100的指令周期是(10)毫秒,它的运算速度是(100 )MIPS。

128、TMS320C54x系列DSP芯片的内部总线有8组16位总线:包括(1)组程序总线、(3)组数据总线和(4)组地址总线组成。

129、TMS320C54x系列DSP芯片的内部有两种片内数据存储器: (1)在一个指令周期内,可对其进行两次存取操作,即一次读出和一次写入,称为(SARAM)。

(2)在一个指令周期内,只能进行一次存取操作,称为(DARAM)。

130、DSP芯片的运算速度是一个重要的性能指标,(MFLOP)是每秒执行百万次浮点操作的简写。 131、DSP芯片的运算速度是一个重要的性能指标,(BOPS)是每秒执行十亿次操作的简写。 132、TMS320C54x芯片属于(16位定点)DSP。 133、TMS320C54x系列DSP芯片的核心部件是(CPU)。

134、累加器A=FF 0123 4567H,执行带移位的STH指令后,求STH A,-8,T暂存器T和A的内容。(T=FF01H,A的内容不变)

135、累加器A=FF 0123 4567H,执行带移位的STH指令后,求STL A,8,T暂存器T和A的内容。(T=6700H,A的内容不变)

136、TMS320C54x提供三个16位寄存器来作为CPU状态和控制寄存器分别是 (ST0,ST1,PMST)

137、TMS320C54x共有192K字的存储空间,分成(3)个相互独立可选择的存储空间。(程序,数据,I/O空间 )

138、主要设定和控制处理器的工作方式和存储器的配置,反映处理器的工作状态的寄存器是(PMST)。 139、TMS320C5402的存储器中断矢量的起始地址为(F80H )。 二、简答题

-5

-6

1、链接器对块的重新定位方法有哪些?为什么要重新定位?答:P147

2、子地址寻址方式的含义和功能是什么?主要用于什么场合?通过程序说明如何进行子地址寻址?答:含义:先将要寻址的寄存器子地址写入DMA的子库地址寄存器DMSA,再将数据写入DMA的数据寄存器。 功能:以使大量的DMA控制器共用少数几个存储器映像寄存器空间。场合:DMA控制寄存器除通道优先级和使能控制寄存器(DMPERC)等4个寄存器采用直接寻址外,其他的采用子地址寻址方式进行寻址。程序说明:P99

3、TMS320C54x片内存储器一般包括哪些种类?如何控制存储器片内或片外的分配?(P20)

答:TMS320C54x的片内存储空间分为3个可选择的存储空间:64K的程序空间,64K的数据空间和64K的I/O空间,所有TMS320C54x芯片都包括RAM、SARAM、DARAM。

程序空间:MP/MC=1 4000H~FFFFH 片外

MP/MC=0 4000H~EFFFH 片外 FF00H~FFFFH 片内 OVLY=1 0000H~007FH 保留 0080H~007FH 片内 OVLY=0 0000H~3FFFH 片外

数据空间:DROM=1 F000H~FEFFH 只读空间 FF00H~FFFH 保留 DROM=0 F000H~FEFFH 片外

4、当TMS320C54x CPU接收到可屏蔽的硬件中断时,满足哪些条件中断才能被响应?P57

5、循环寻址中,如何确定循环缓冲的起始地址?如果循环缓冲大小为17,其起始地址必须从什么地址开始?BK初始化为多少?P46; 起始地址:XXXX XXXX XXX0 00002 BK=17 6、TMS320C54X DSP芯片的CPU主要由哪几部分组成?P27、28 7、TMS320C54XX DSP的寻址方式分哪几种?P39

8、C54XX DSP的指令集按功能可分为哪几种基本类型的操作?P135

9、什么是哈佛结构和冯诺依曼结构?结合TMS320C5401芯片详述冯诺依曼结构与结构的特点,比较它们的异同。P2

答: 哈佛结构是一种将程序指令存储和数据存储分开的存储器结构;冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。

冯·诺伊曼(Von Neuman)结构:该结构采用单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行。当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,其工作速度较慢;哈佛(Harvard)结构:该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。 10、简要说明冯.若依曼和哈佛体系结构各自的特点。

答:冯.若依曼采用单存储空间,即程序指令和数据公用一个存储,使用单一的数据地址总线,取指和取数据都是通过一条总线分时进行的;哈佛结构采用双存储空间,程序存储器和数据存储分开,有各自独立的程序总线和数据总线,可单独编址和独立访问。 11、简要说明C54x的七种寻址方式及其各自特点。P47

12、简要说明汇编器中的段的类型、各段所包含的内容、建段方法。P145 答:(1) 已初始化段 .text .data .sect (2) 未初始化段 .bss .usect

.text段:可执行的代码段;.data段:已初始化的数据;.bss段:未初始化的自命名段; .usect:未初始化的自命名段;.sect:已初始化的自命名段 建段的方法用五条伪指令,.text .data .bss .usect .sect

13、简要说明中断矢量的入口地址的计算方法,若PMST=0080H,中断矢量INT3的中断号为18,当CPU响应该中断时,程序计数器指针PC的值等于多少?P58

答:在C54x中,中断向量地址是由PMST寄存器中的IPTR(中断向量指针,9位)和左移2位后的中断向量(序号为0~31,左移2位后变成7位)所组成。PC=4048H 14、桶形移位寄存器的作用是什么?其移位方式有哪些?作用P31 移位方式:ASM、T的低六位、指令中的立即数

15、 什么是DSP技术?答:DSP技术是利用计算机或专用处理设备,以数字的形式对信号进行分析、采集、合成、变换、滤波、估算、压缩、识别等加工处理,以便提取有用的信息并进行有效的传输与应用。 16、 DSP芯片的结构特点有哪些?P2 ~ P4 17、 简述DSP系统设计的一般步骤。P8 ~ P9

18、 简述TI公司C2000/C5000/C6000系列DSP的特点及主要用途。P10 ~ P11 19、 试述TMS320C54x的主要优点及基本特征。P13、P14

21. 什么是定点DSP芯片和浮点DSP芯片?它们各个什么优缺点?

答:根据芯片工作的数据格式,按其精度或动态范围,可将通用DSP划分为定点DSP和浮点DSP两类。

定点DSP和浮点DSP主要是按DSP芯片工作的数据格式来分类的。 数据以定点格式工作的DSP芯片成为定点DSP芯片。 数据以浮点格式工作的成为浮点DSP芯片。

浮点DSP能直接进行浮点运算,一次完成,是直接用硬件完成的。而定点DSP无法直接完成浮点运算,需要用程序来辅助完成浮点运算。

22、TMS320VC5416-160的指令周期是多少毫秒?它的运算速度是多少MIPS? 答:P16 23、 简述TMS320C54x芯片的存储器分配方法。 答:P21 24、 简述TMS320C54x芯片的程序空间。 答:P23 25、 简述TMS320C54x芯片的数据空间。 答:P24

26、 简述TMS320C54x芯片的中断系统。中断系统是为计算机提供的实时操作、多任务和多进程操作的关键部件。一般来说,中断系统是由外设(如ADC)向CPU传送数据或者外设(如DAC)向CPU提取数据的硬件设备而产生的,也可以由定时器(用于发生特殊信号)产生。当CPU相应中断时,将暂时停止当前程序的执行,而转去执行中断服务程序。TMS320C54x既支持软件中断,又支持硬件中断。(参考P55) 27、 ST0、ST1、PMST的作用是什么?它们是如何影响DSP工作过程的? 答:P34 28、TSM320C54x的总存储空间为多少?可分为哪3类,它们的大小是多少? 答:P19 29、 TSM320C54x片内随机存储器有哪两种,片内与片外RAM的区别是多少? 答:单寻址RAM(SARAM)和双寻址RAM(DARAM),区别在P20 30、试述三种存储器空间的各自作用是什么? 31、试述RAM、ROM的分配和使用方法。答:

32、 片内DARAM可否用作为程序空间?对哪些情况要用两个机器周期才能访问到存储器

33、 以DP和SP为基地址的直接寻址方式,其实际地址是如何生成的?当SP=2000h,DP=2,偏移地址为25h时,分别寻址的是哪个存储空间的哪个地址单元?

答:直接寻址中,操作数是一个数据页内的偏移地址,而所在的数据页由数据页指针DP或SP决定,该偏移地址与DP和SP的值决定了在数据存储器中的实际地址;

位于状态寄存器ST1中的编译方式位(CPL)(bit14)决定选择采用哪种方式来产生实际地址。 CPL=0 偏移地址与9bits的DP域相结合形成16bits的数据存储器地址。 CPL=1 偏移地址加上SP的值形成16bits的数据存储器地址。 当CPL=0时,寻址的是数据存储空间的0125h地址单元; 当CPL=1时,寻址的是数据存储空间的2025h地址单元;

34、使用循环寻址时,必须遵循的3个原则是什么?试举例说明循环寻址的用法。

答:① 循环缓冲区的长度 R<2N,且地址从一个低N位为0的地址开始; ② 步长小于或等于循环缓冲区的长度; ③ 所使用的辅助寄存器必须指向缓冲区单元 举例: LD *+AR1(8)%,A; STL A ,*+AR1(8)%; 假定:BK=10,N=4,AR1=100H

由上可知:index = 0 (因为 AR1的低四位),Step =8(*+AR1(8)%) 执行第一条指令时:index = index + step = 8 (寻址108H单元) 执行第二条指令时:index = index+ step= 8+8=16 〉BK; 故:index=index+step-BK=8+8-10=6 →(寻址106H单元)

35、简述位码倒寻址的主要用途及实现方法,试举例说明位码倒寻址的实现过程。

答: 位码倒寻址主要用于FFT算法中。实现方法:ARD存放的整数N是FFT点数的一半,一个辅助寄存器只想一个数据存放的物理单元,当使用位码倒寻址把ARD加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是通常的从右向左。举例:

36、汇编语句格式包含哪几部分?编写汇编语句需要注意哪些问题?答:P140 ① 所有语句必须以标号、空格、星号或分号(*或;)开始; ② 标号是可选项,若使用标号,则标号必须从第一列开始; ③ 所有包含有汇编伪指令的语句必须在一行完成指定; ④ 各部分之间必须用空格分开,Tab字符与空格等效;

⑤ 程序中注释是可选项。如果注释在第一列开始时,前面必须标上星号或分号,在其他列开始的注释前面必须以分号开头;

⑥ 如果源程序很长,需要书写若干行,可以在前一行用反斜杠字符(\\)结束,余下部分接着在下一行继续书写。

37、当采用*AR2+0B寻址,若AR0为00001000b,试写出位模式和位反转模式与AR2低4位的关系。P44、P45

38、循环寻址和位倒序寻址是DSP数据寻址的特殊之处,试叙述这两种寻址的特点和它们在数字信号处理算法中的作用。

答:循环寻址可以和任意一种间接寻址模式一起使用每一个辅助寄存器和系数数据指针,作为对数据或寄存器位的指针时,都可以独立配置成线性或循环寻址。

位倒序寻址提高了执行速度和在FFT算法的程序中使用存储器的效率。在这种寻址方式中,AR0存放的整数N是FFT点数的一半,一个辅助寄存器指向一个数据存储的物理单元。当使用位倒序寻址方式把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是通常的从右向左。位倒序寻址通常应用于FFT运算,可以提高FFT算法的执行速度和使用存储器的效率。FFT运算主要实现采用数据从时序到频域的转换,用于信号分析,FFT要求采样点输出时倒序时,输出是顺序;若输入是顺序,输出就是倒序。

39、堆栈寻址的作用是什么?压栈和弹出堆栈操作是如何实现的? 答:P47

系统堆栈用来在中端或调用子程序期间自动存放程序计数器,也能用来存放用户当前的程序环境或传递数据值处理器使用一个16位存储器映像存储器的一个堆栈指针来寻址堆栈,SP始终指向存放在堆栈中的最后一个单元,当调用一个子程序或一个中断响应发生时,PC被自动压栈,堆栈指针SP指向存放最后一个数据的堆栈单元;返回时,返回地址从堆栈中弹出并装入PC。堆栈存放数据是从高地址向低地址进行的,压入堆栈时,先减小SP,再将数据压入堆栈,弹出堆栈时,先从堆栈弹出数据,再增加SP值。 40、什么是COFF和段?段的作用是什么?COFF目标文件包含哪些段?P143 ~ P144

汇编器和链接器生成的目标文件,是一个可以由’C54x器件执行的文件。这些目标文件的格式称之为公共目标文件格式(COFF)。

段就是在存储器图中占据相邻空间的代码或数据块。

段的作用:在编写汇编语言程序时,COFF采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更加方便。段的使用可以更加有效的分配目标存储器 COFF目标文件都包含以下3种形式的段: .text 段(文本段),通常包含可执行代码; .data 段(数据段),通常包含初始化数据;

.bss 段(保留空间段),通常为未初始化变量保留存储空间。

41、简述汇编伪指令的作用及功能,说明 .text段、.data段、 .bss段、 .sect段、 .usect段分别包含什么内容? 答:伪指令的作用:①程序定位的作用。把各程序段之间的相互关系和在存储器的位置告诉编译器。②为非指令代码进行定义。包括逻辑变量、字符和存储区等。③为程序完整性做标注。程序段的开始和结束。④有条件地引用程序段。比如条件循环、条件选择以及宏等。.text段包含可执行代码;.data段包含初始化数据;.bss段通常为未初始化变量保留存储空间;(.sect段汇编到段名所指的已初始化段;.usect段是在所给段名的未初始化段预留空间。) 42、链接器对段是如何处理的?P146

43、链接命令文件有什么作用?在生成DSP代码过程中何时发挥作用?P158

1)链接命令文件通过段定位控制命令,分配程序代码空间、数据代码空间、程序运行空间、堆栈空间;2)此命令文件链接example.obj和vector.obj两个目标文件(输入文件),并生成一个映像文件example.map以及一个可执行的输出文件example.out,标号“start”是程序的入口。

44、要使程序能够在DSP上运行,必须生成可执行文件。请说出能使DSP源程序生成可执行文件所需要的步骤。答:1)用汇编语言编写源文件,经C编译器、汇编器生成COFF格式的目标文件,再用链接器进行链接,生成在’C54x上可执行的目标代码;2)利用’C54x的汇编器ASM500,对一个或多个源程序分别进行汇编,并生成列表文件(.lst)和目标文件(.obj);3)利用’C54x的链接器LNK500,根据链接器命令文件(.cmd)对已汇编过的一个或多个目标文件(.obj)进行链接,生成输出文件(.out)和存储器映像文件(.map) 。

45、如果一个用户在编写完C54x汇编源程序后,未编写相应的Linker伪指令文件,即开始汇编、链接源程序,生成可执目标代码文件。这个目标代码文件中的各个段是如何安排的,程序能正确运行吗? 46、HPI8接口有几个寄存器?他们的作用是什么?

答:HPI8接口有3个寄存器:控制寄存器、地址寄存器、数据寄存器;

好处:进行控制和实现数据传输

47、以.asm为扩展名的汇编语言源程序由哪几个部分组成,对他们有何规定?

答:

48、常用汇编命令有哪些,它们的作用是什么? P140

49、汇编器和链接在对段进行管理时的区别是什么?

答:编译器将原代码c或c++编译成汇编asm文件,汇编器将asm文件汇编为目标文件obj(二进制文件),连接器将obj和lib等连接为最后的out文件(二进制)

50、段程序计数器(SPC)是怎样工作的?试述已初始化段和未初始化段的的区别?

答:SPC表示一个程序代码段或数据段内的当前地址。开始时,汇编器将每个SPC置0,当汇编器将程序代码或数据加到一个段内时,相应的SPC增加。如果汇编器再次遇到相同段名的段,继续汇编至相应的段,

且相应的SPC在先前的基础上继续增加。

区别:已初始化段中包含数据表和可执行代码,常用的有3个:.text 段、.cinit段和.co

nst段。其中,.text 段中包含所有可执行的代码以及常量;.cinit段中包含未用const 声明的外部(external)或静态(static)数据表;.const段中则包含已用const声明的外部或静态数据表以及字符串常量;未初始化段在存储器(通常为RAM)中保留空间,用于程序运行时创建和存储变量,常用的有两个:.bss段和.stack段。其中,.bss段用于为全局和静态变量保留空间,在程序开始执行时,由C引导程序将.cinit段中的已初始化数据复制到.bss段中。.stack段用作C的系统堆栈,向被调函数传递参数,并为局部变量分配空间。 51、宏指令与子程序有何异同?

答:目标代码的存储形式与执行方式不相同。子程序调用是在程序运行过程中执行的,而宏调用是在汇编过程中完成。所以采用子程序方式的程序的进行要花额外的开销,而宏指令方式则不同。在源程序中,n次宏调用就要生成n个代码段,而子程序只生成一个代码段,所以采用宏指令需要较大的内存空间。 52、MEMORY命令和SECTIONS命令的作用是什么?如何使用?

答:MEMORY:定义目标板物理存储空间分配,默认状态下,PAGE0为程序空间, PAGE1为数据空间。 SECTIONS:定义程序连接过程中各个输入段与输出段之间的关系,并给出输出段地址。①给出输入段组合成输出段的方式; ②定义可执行程序的输出段;③指出输出段存放在存储空间中的位置④允许重命名输出段。 如何使用:确定程序和数椐的装载运行空间,校验数据和程序代码的长度,定义输入/输出文件,安排系统中可用的存储器,程序段、数据段、堆栈以及复位向量和中断向量的地址空间。 53、C源程序如何与汇编语言程序接口?

答:

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

答:创建C源文件;创建工程文件;创建连接器命令文件;编译整个工程文件;链接;生成可执行文件 55、C源程序调用汇编程序函数时,哪些辅助寄存器需要保护?答:BP,SP,CS,DS,SS 56、比较单操作数与双操作数乘法以及长字运算和并行运算的差异。

答:(1)单操作数用间接寻址获得操作数,使用寄存器,而双操作数只能用AR2-AR5,且双操作数占用程序小,运算快.长指令中,\每次存储一个32位数,要用E总线两次,需要两个机器周期;其他指令是单字周期,在一个周期内同时利用C总线和D总线,得到32位操作数;并行运算c54x能够同时利用D总线和E总线实现并行运算,D总线用来执行加载或算数运算,E总线用来保存先前结果。 57、比较实现数据块传送各种指令的应用和区别。P227-228 58、怎样进行小数乘法运算和除法运算以及浮点运算?P235 ~ P238

乘法:在运算小数乘法之前,将ST1中的FRCT位置1,c54x再把乘积传到累加器时,会自动左移一位,消除冗余符号位。

除法:(1)用乘法代替除法,将除数换成其倒数,做乘法。(2)将除法分解成一系列减法和移位运算(3)除法过程中,以绝对值进行计算,最后确定上符号。 浮点运算:将浮点数换成定点数,进行计算。

59、在C语言程序中如何嵌入汇编程序?在汇编程序中如何与C语言程序相连接?

答:(1)在c语言程序中填入#asm,#endasm的编译命令,在职中填入汇编代码,通过链接定位器和特殊的编译方式加入到所有程序的目标代码中。

60、TMS320C54x是如何解决冗余符号以区别小数乘法和整数乘法的?小数系数应如何书写?P236;P235 61、在一般的DSP中,都没有除法器硬件,如何完成除法运算? P237

在通用DSP芯片中没有硬件除法器,一般不提供单周期的除法指令,要完成除法运算一般有两种方法:一是用乘法实现,即要除以某个数,就可以转化为乘以该数的倒数,该方法因计算繁琐而在程序设计中很少采用;二是把二进制除法看作是乘法的逆运算,乘法包括一系列的移位和加法,则除法可分解为一系列的减法和移位。

62、TMS320C54x如何将定点数转换为浮点数或将浮点数转换为定点数? P239-240 63、数据存储区的哪些区域可用作线性缓冲区? 10h—17h

64、DSP的并口总线与串口各有何用途?哪种速度快?哪种连线简单?

答:串口总线用途:它有两个互斥的选通信号:MSTRB 和IOSTRB 。前者用于访问外部程序或数据存储器,后者用于访问I/O设备 串口用途:用于与系统中的其他C54x器件、编码解码器、串行A/D转换器以及其他的串行器件直接借口。 并口总线速度快,串口连线简单。

65、使用循环寻址的数据缓冲区的地址能否任意设置?

答:必须从N位地址的边界开始,N满足2的N次方大于R的最小整数

66、TMS320C54x芯片的流水线操作共有多少个操作阶段?每个阶段执行什么任务?完成一条指令都需要那些操作周期? 答:2个,剩下的见P60

67、试分析下列程序的流水线冲突,划出流水线操作图。如何解决流水线冲突? P68 SLTM A,AR0 STM #10,AR1 LD *AR1,B

68、以y = 0.1*X1 + 0.5*X2 – 0.3X3为例,叙述在CCS2.0集成开发环境下,调试程序的基本步骤。P208 1.打开C5000setup进行配置

2.打开C5000运行文件,进行CCS2.0开发环境 3.建立新的工程文件

4.编辑源程序“XX1.asm”/“XX2.asm”/“XX3.cmd” 5.编译源程序——链接程序——执行文件(.out) 6.装载程序到内部存储器 7.复位DSP

8.执行程序(单步执行、连续执行、断点执行)检查运行结果(寄存器、存储器、端口等 69、一个典型的DSP系统通常由哪些部分组成?画出原理框图。

答:包括:DSP芯片及DSP基本系统、程序和数据存储器、数/模和模/数转换器、模拟控制与处理电路、各种控制口和通信口、电源处理电路和同步电路。

70、 假定N=37,辅助寄存器用AR4,循环缓冲区自定义段的名字为MY_BUF,则.ASM和.CMD两个文件中相应部分应包含哪些内容? .ASM(P149);.CMD(P159)

71、简单论述C语言的数据结构类型及语句结构类型,并举例说明之。

答:1.整型数据(16bit) 整型变量就是用关键字int定义的变量符号,比如: int r;

2.实型数据(32bit) 实型数据结构就是定义一个实数变量或常量。实型数据用float关键字定义比如:float R=3.125;

3.字符型数据(16bit)使用关键字char定义。如char a;

4.指针型数据 指针也即地址的概念,是表示一个变量所在存储器地址。在C5000中,一些操作只有指针操作才能完成。比如:

unsigned int *ADC=0xc005; #define ADC *(volatile*)0xc005 ADC=0xfe00;

(1)一维数组 定义方式为: 类型说明符 数组名[常量值]

如:char led_tab[4]={0x003f,0x0006,0x005b, 0x4f}; (2)二维数组 定义方式为:

类型说明符 数组名[常量值N][常量值M] 如:int arry[2][3]={}; 72.说明McBSP特点。

答:(1)全双工通信;(2)拥有两级缓冲发送和三级缓冲接收数据寄存器,允许连续数据流传输;(3)为数据发送和接收提供独立的帧同步脉冲和时钟信号;(4)能够与工业标准的解码器、模拟接口芯片(AICs)和其他串行A/D和D/A设备直接连接;(5)支持外部移位时钟或内部频率可编程移位时钟;(6) 128个通道用于接收传送;(7)支持A-bis ;(8)接口直接连接工业标准的多媒体数字信号编解码器,A/D、D/A和模拟芯片。此外,McBSP还具有以下特殊功能:(1)可以与IOM-2、SPI、AC97等兼容设备直接连接;(2)支持多通道发送和接收,每个串行口最多支持128通道;(3)串行字长度可选,包括8、12、16、20、24和32位;(4)支持μ-Law和A-Law数据压缩扩展;(5)进行8位数据传输时,可以选择LSB或MSB为起始位;(6)帧同步脉冲和时钟信号的极性可编程;(7)内部时钟和帧同步脉冲的产生可编程,具有相当大的灵活性。

McBSP内部包括数据通路和控制通路两部分,并通过7个引脚与外部器件相连。引脚功能如下: 引脚 方式 功能

CLKR I/O/Z 接收时钟

CLKX I/O/Z 发送时钟 CLKS I 外时钟 DR I 串行数据接收 DX O/Z 串行数据发送 FSR I/O/Z 接收帧同步 FSX I/O/Z 发送帧同步

在28xx系列的DSP中,它具有2个16级的32位FIFO;包括接收、发送和控制通道,通过6个引脚与DSP外部设备联系。

73、简述用DSP芯片进行产品开发需要经过的环节和在CCS上如何进行基本操作。

答:环节:1)明确设计任务,确定设计目标 2)算法模拟,确定性能指标3)选择DSP芯片和外围芯片4)设计实时的DSP应用系统5)硬件和软件调试6)系统集成和测试

CCS操作:1)软件设计:主要包括程序模块的划分,算法和流程的确定以及执行结果的预测等工作2)程序编辑和编译链接:主要进行工程文件的创建,编写头文件,配置文件和源程序,使用汇编和C编译器进行编译,排除语法,变量定义等错误3)程序调试:利用CCS软件的调试工具,采用单步执行,设置断点和探测点等手段对应用程序进行调试 4)结果分析:利用CCS软件提供的分析工具,对应用程序运行的结果进行分析,如图形显示数据或统计运行时间等。若算法不能满足要求,则需要重新进行软件设计。 三、读程题

A、现有一汇编语言程序和与它相对应的链接程序 汇编语言源程序(.asm) .title \ .mmregs STACK .usect \ .bss a,4 .bss x,4 .bss y,1 .def f_start .data table: .word 1,2,3,4 .word 5,6,7,8 .text

f_start: LD #0,DP STM #0,SWWSR STM #STACK+10h,SP STM #a,AR1 RPT #7 MVPD table,*AR1+ STM #a,AR3 STM #x,AR4 LD #0,B STM #3,BRC RPTB next-1 LD *AR3+,T MPY *AR4+,A ADD A,B

next: STL B,@y .end 链接程序为(.cmd文件) example.obj _O example.out _m example.map _e f_start MEMORY

{

PAGE 0:

EPROM :org=0E000h,len=100h

PAGE 1:

SPRAM :org=0080h,len=0020h DARAM :org=00A0h,len=10h } SECTIONS

{

.text :>EPROM PAGE 0 .data :>EPROM PAGE 0 .bss :>SPARAM PAGE1 .STACK :>DARAM PAGE 1 }

汇编程序编译链接后,整个目标文件在程序存储器中共占用30个存储单元,其中,.text占用了前22个程序存储单元,数据表占用了后8个程序存储单元,试回答下列问题:

1、画出程序存储器和数据存储器的具体配置图,要求表明各自的起始地址、结束地址,并表明没一部分的具体配置内容。

2、汇编伪指令_O example.out, _e f_start的作用是什么? 3、执行完指令STM #a,AR1 后,AR1中的内容是多少? 4、执行完

RPT #7

MVPD table,*AR1+ 两指令后,它所指向的数据存储器中的内容是多少? 5、执行完

RPT # 3

MAC *AR3+,*AR4+

两指令后,AR3中的内容是多少?它所指向的数据存储器中的内容是多少? 6、 能否将指令RPTZ A,#3 改成用两条指令来实现,怎样改写? 答:1.

2. -O example.out的作用:规定生成的输出文件(P158)

-e f_start的作用:定义一个全局符号,这个符号所对应的程序存储器地址,就是使用开发工具调

试这个链接后的可执行文件时程序的入口地址(P157)

3. 0080h 4.0088h

5. AR3中的内容是:0084h 内容是: 6. 能 LD #0,A RPT #3

B、用TMS320C5402作为方波发生器实例如下,试分析该程序有哪几部分组成?各部分完成的主要功能?画出程序流程图。

答:该程序有初始化、主程序、定时器0中断服务程序3部分组成。

初始化完成定时器R地址、定时器R初值、标志单位、中断初始化等。主程序省略。定时器0中断服务程序根据编制为标志位输出高或低电平。

;源程序清单

;---------------------------------- TIM0 PRD0 TCR0

.set 0024H ;设置定时器R地址 .set 0025H .set 0026H

;----------------------------------- t0_flag .usect“vars”, 1 STM

ST #1, t0_flag ;设置输出标志单元 #79, TIM0

STM

#79, PRD0

STM #0269H, TCR0 ;设置定时器R初值

STM #0008H, IFR

;----------------------------------

STM #0008H, IMR

RSBX INTM ;中断初始化 ;----------------------------------

?

B

LOOP ;主程序

LOOP:

;----------------------------------- timer0_rev: PSHM TRN PSHM T

PSHM ST0 PSHM ST1

BITF t0_flag, #1 ;测试标志位 BC xf_out,NTC ;标志位为0转移

SSBX XF ;标志位为1输出高电平 ST #0, t0_flag ;标志位置0

B next

xf_out: RSBX XF ;标志位为0,输出低电平

ST #1, t0_flag ;标志位置1

POPM

ST1

POPM ST0 POPM T POPM TRN RETE

next:

C、说明下面程序段完成什么功能?

答: ① 浮点数转换格式② 判断符号③ 指数比较④ 浮点数格式转换 ① dld op1_hsw,a ②bitf op1se,#100h sfta a,8 bc testop2,NTC sfta a,-8 ld #0,a bc op1_zero,AEQ dsub op1hm,a

sth a,-7,op1se dst a,op1hm stl a,op1lm testop2: bitf op2se,#100h and #07Fh,16,a bc compexp,NTC add #080h,16,a ld #0,a sth a,op1hm dsub op2hm,a dst a,op2hm

③compexp: ④op1_gt_op2: ld op1se,a abs b

and #00ffh,a sub #24,b ld op2se,b bc return_op1,BGEQ and #00ffh,a add #23,b sub a,b stl b,rltsign bc op1_gt_op2,BLT dld op2hm,a bc op2_gt_op1,BGT rpt rltsign a_eq_b:

dld op1hm,a dadd op2hm,a bc res_zero,AEQ ld op1se,b sfta a,-1 bd normalize ld op1se,b dadd op1hm,a

D、阅读以下程序,写出运行结果。 .bss y, 5

table .word 1,2,3,4,5 STM #y, AR2 RPT #5

MVPD table,*AR2+ LD #0,B LD #81h, AR5 STM #0,A STM #4, BRC STM #y, AR5 RPTB sub-1 ADD *AR5,B,A STL A,*AR5+ sub: LD #0,B

运行以上程序后,(81H),(82H),(83H),(84H)和(85H)的值分别是多少? 答:(81H)=0001H;(82H)=0002H;(83H)=0003H;(84H)=0004H;(85H)=0005H E、已知(30H)=50H,AR2=40H,AR3=60H,AR4=80H。 MVKD 30H,*AR2 MVDD *AR2,*AR3 MVDM *AR3,AR4

运行以上程序后,(30H)、(40H)、*AR3和AR4的值分别等于多少呢? 答:都是50H F、已知(80H)=20H,(81H)=30H。 LD #0,DP LD 80H,16 ,B ADD 81H,B

9.运行以上程序后,B等于多少? 20030H G、指出下段程序将执行多少次循环 ( 5 ) 次 。 STM #5,AR1 STM #10,AR0 loop: ? ? *AR1+ ? ? CMPR LT,AR1 BC loop,TC

H.试写出以下两条指令的运行结果: (1) EXP A

A=FF FD87 6624 T=0000

则以上指令执行后,A、T的值各为多少? (2) NORM B

B=42 0D0D 0D0D T=FFF9

则以上指令执行后,B、T的值各为多少?

答:(1)A不变,T=0005(2)B=008 5E1A 1A1A T不变

I. 在32位数寻址时,如DST B, *AR3+ ;AR3=0101,B=00 C621 AAEE,则执行完该指令后,数据存储器0101、0102、0103单元的内容是多少? (0101)=0AAEEH; (0102)=0C621H; (0103)=0000H 四、编程题

1、使用块重复等指令实现数组x[N]中的最大值的寻找,N 为已知数组元素的个数,要求写出完整的汇编主程序。

答:.title “example.asm” .mmregs .bss y,1 .text

begin: STM #N-1, BRC STM #x,AR1 LD *AR1+, A RPTB next-1 LD *AR1+, B MAX A next: STL A , @y end: B end .end

2、使用块重复指令实现数组

x[N]和数组y[N]中的内容互换,N为已知的数组元素的个数,写出完整

的汇编主程序。 答: .title\ .mmregs

STACK .usect \ .bss X,N .bss Y,N .bss Z,N .def _c_int00 .data .mmregs

_c_int00: STM #0,SWWSR STM #STACK+3N,SP STM #X,AR2 STM #Z,AR3 RPT #N-1 MVDD *AR2+,*AR3+ STM #Y,AR4 STM #X,AR2 RPT #N-1 MVDD *AR4+,*AR2+ STM #Z,AR3 STM #Y,AR4 RPT #N-1 MVDD *AR3+,*AR4+ .end

3、试编写一段程序,将程序存储器中的5个数据(1,2,3,4,5)首先传送到DATA1开始的5个数据存储器单元,然后将DATA1开始的5个单元内容分别加10后,传送到DATA2开始的单元中。 要求:① 源程序含必要的伪指令; ② 加入适当的指令注释。

答:.title “example.asm” ;为汇编源程序取名 .mmregs ;定义存储器映象寄存器 .def start

STACK .usect “STACK”,100 ;设置堆栈

.bss DATA1,5 ;为数组DATA1分配5个存储单元 .bss DATA2,5 .data

table: .word 1,2,3,4,5 ;为标号地址table开始的5个单元赋初值 .text ;定义代码段起始地址 start: STM # DATA1,AR1 ;将目的地首地址赋给AR1 PRT #4 ;设置重复执行5次下条指令 MVPD table,*AR1+ ;数据从程序存储器传送到数据存储器 STM # DATA1,AR2 ;将DATA1的首地址存入AR2 STM # DATA2,AR3 ;将DATA2的首地址存入AR3

LD #10,16,B ;立即数10先左移16位后,再加载累加器B

STM #4,BRC RPTB next-1 ADD *AR2+,16,B,A

STH A,*AR3+ ;将A的高端字存入结果AR3中,低端字省去 next:B end ;原处循环等待 .end

4. 在文件的链接过程中,需要用到Linker命令文件(.cmd)。请按如下参数设计一个命令文件,其参数为: 中断向量表 起始地址为7600h,长度为8000h; 源程序代码 在中断向量之后;

初始化数据 起始地址为1F10h,长度为4000h; 未初始化数据 在初始化数据之后。 答:a.obj b.obj -o prog.out -m prog.map MEMORY { PAGE 0:

VECS origin = 7600h, length = 8000h FLASH: origin = F600h, length = h SARAM_P: origin = 1F10h, length = 4000h PAGE 1:

B2: origin = 0060h, length = 020h B0: origin = 200h, length = 100h B1: origin = 300h, length = 100h SARAM_D: origin = 5F10h, length = 8000h }

SECTIONS {

vectors: > VECS PAGE 0 .text: > FLASH PAGE 0 .cinit:

.switch:

>FLASH PAGE 0

PAGE 0

>FLASH

.bss: > SARAM_D PAGE 1 .stack: > SARAM_D PAGE 1 .stack: }

5. 编写一段程序,将程序存储器中的10个数据首先传送到数据存储器中(以DATA1开始),再将DATA1开始的10个单元内容传送到DATA2开始的数据存储器中。 答:.title “eample.asm” .mmmregs

STACK .usect \

> SARAM_D PAGE 1

.sysmem: > SARAM_D PAGE 1

.bss DATA1,10 .bss DATA2,10 .data

table: .word 01h,02h,03h,04h,05h,06h,07h,08h,09h,0Ah .text

START: STM #0,SWWSR STM #STACK+10H,SP

STM #DATA1,AR3

STM #DATA2+0Ah,AR4 RPT #9

MVPD table,*AR3+ RPT #9 MVDD *-AR3,*-AR4 End: B end .end

6. 试编一程序,计算 ,并找出3项乘积 (i=1,2,3,)中的最小值,放入MIN单元中。 答:.title \ .mmregs

STACK .usect \ .bss a,3 .bss x,3 .bss y,1 .bss min,1 .def start .def _c_int00 .data

table: .word 1,5,3 .word 8,6,7 .text

_c_int00: STM #0,SWWSR STM #STACK+10H,SP STM #a,AR1 RPT #7

MVPD table,*AR1+ CALL min end: B end

min: STM #a,AR1 STM #x,AR2 STM #2,AR3 LD *AR1+,T MPY *AR2+,A loop: LD *AR1+,T MPY *AR2+,B

MIN A BANZ loop,*AR3- STL A,@min RET .end

7. 编一程序,首先实现对DATA开始的100个单元赋初值0,1,2,3,?,99,然后再对每个单元内容加1。

答:.title“exp11.asm” .mmregs

STACK .usect “STACK”,70H .bss DATA,100

Table: .word 0,1,2,3,4,5,6,7,8,99 .text start:STM #DATA,AR4 RPT #99

MVPD table,*AR4+ LD #1,16,B STM #99,BRC STM #DATA,AR4 RPTB next-1 ADD *AR4,16,B,A STH A,*AR4+ Next:LD #0,B end:B end .end

或者.title“exp11.asm” .mmregs

STACK .usect “STACK”,70H .bss DATA,100

_c_int00: STM #0,SWWSR STM #STACK+10H,SP STM #DATA,AR1 LD #99 ,AR2 LD #0,A LOOP: STL A,*AR1+ ADD #1,A BANZ AR2-,LOOP ADD1: LD #1,16,B STM #99,BRC STM #DATA,AR3

RPTB next-1 ADD *AR3,16,B,A STH A,*AR3+ Next:LD #0,B

end:B end .end

8. 编写一个能显示\的DSP程序。 #include void main()

{ puts(\9. 编写程序用CCS仿真INT2中断。

答:① 编写中断产生文件

设置输入文件,列出中断发生间隔。在文件zhongduan.txt 中写入100(+100)rpt 10之后存盘,此文件与中断的INT2引脚连接后,系统每隔100个时钟周期发生一次中断。

② 将输入文件zhongduan.txt连接到中断引脚

在命令行输入pinc INT2,zhongduan.txt,将INT2引脚与zhongduan.txt文件连接。 ③ 用汇编语言仿真中断 a) 编写中断向量表

;建立中断向量 .sect “vectors”

.space 93*16 ;按中断向量在表中预留一定空间 INT2 NOP ;外部中断INT2 NOP NOP GOTO NT2 NOP

.space 28*16 ;68h~7Fh保留区

b) 编写主程序(注意:对中断有关的寄存器进行初始化) .data

a0 .word 0,0,0,0,0,0,0,0 .text

.global _main

_main:PMST = #01a0h ;初始化PMST寄存器 SP=#27FFh ;初始化SP寄存器 DP=#0

IMR=#04 ;初始化IMR寄存器 AR1=#a0 a=#9611h

INTM=0 ;开中断 w1: wait ;等待中断信号 NOP NOP GOTO w1 c)编写中断服务程序。 INT2: NOP NOP (*AR1+)=a;

NOP NOP return_enable .end

10. 用DSP/BIOS的LOG对象方法实现\的输出。 答:/* DSP/BIOS header files*/ #include #include

/* Objects created by the Configuration Tool */ extern LOG_Obj trace; /* ======== main ======== */ Void main() {

LOG_printf(&trace, \!\/* fall into DSP/BIOS idle loop */ return;}

11. 编程实现周期为4ms的方波发生器(设时钟为100MHz)。 答:分析:设f=100MHz,定时最大值是:10ns?2定时器周期=10ns×(1+9)×(1+19999)=5ms。 PERIOD

.set 49999 ;定义计数周期

STM #0000000000010000B,TCR ;停止计数器 STM #PERIOD,TIM ;给TIM设定初值49999 STM #PERIOD,PRD ;PRD与TIM一样 STM #0000001001101001B,TCR;开始定时器 STM #0008H,IMR ;开TIME0的中断 RSBX INTM ;开总中断 End: NOP B End 中断服务程序:TINT0_ISR TINT0_ISR:

PSHM ST0 ;保护ST0,因要改变TC BITF *AR2,#1 ;分别到setXF或ResetXF BC ResetXF,TC

XF ;置XF为高 ST #1,*AR2 B Next

4?216?10ms,要输出4ms的方波,1和0分别为2ms.

setXF: SSBX

ResetXF: RSBX XF ;置XF为低

ST #0, *AR2

POPM ST0 RETE .end

Next:

12. 编程实现外部总线访问延时。设I/O空间延时5个周期,数据空间延时2个周期,程序空间延时5个周

期。

答:STM #54AD,SWWSR 54ADH=0101 0100 1010 1101 SWWSR=0 101 010 010 101 101 I/O空间:5个等待状态; 数据空间:2个等待状态; 程序空间:5个等待状态。

13. 编制一个有3个目标文件组成的.cmd文件,并对存储器空间进行分配。 P211

14. 用线性缓冲区和带移位双操作数寻址方法实现FIR滤波器,编写计算N=4,y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)的程序。P254

25. 编写使用带MAC指令的循环寻址模式实现FIR滤波器的程序片段,其中输入数据在BL中,滤波结果在BH中,FIR滤波系数存放FIR_COFF_P指定在数据存储区中。 答:STM #1,AR0 ;AR0=1

STM #N, AK ;AK=N,循环滤波寻址BUFFER大于为N STL B,*FIR-DATA-P+% ;更新滤波窗口中的采样数据 RPTZ B,#(N-1)

MAC *FIR-DATA-P+0%,*FIR-COFF-P+0% B ;完成滤波计算。注意FIR滤 ;系数存放在数据存储区 26. 用汇编语言实现: y1=x1*a1-x2*a2 y2=12/3+1

Y3=0.3*(-0.5)+1 .title \

27. 试设计一大小为200个单元的堆栈并初始化指针。 答: P223-p224 Size .set 200 Stack .usect LD

“STK”,size

STM #stack+size,SP

#-8513,A #200,AR1 SP,AR7

*AR7-

STM MVMM

LOOP:SLT A

BANZ LOOP,*AR1-

28. 在各项中找出最小值的项,并存放在累加器B中。P225 29. 对累加器A的内容进行归一化,已知A=FF FFFF FFC3。 答:EXP A ST

T,EXPONENT

A

\11

\loop

NORM

30. 试设计一个段名为MYSTACK的有11个单元的堆栈,并为堆栈指针赋初值。 答: .title

size .set stack .usect

.mmregs

.def .text

STM LD

STM MVMM BANZ

#stack+size,sp #-9224,B #length,AR1

SP,AR4

loop: STL B,*AR4-

loop,*AR1-

31.写出提取B=03 6543 4321中的指数值的指令,执行后T中的值为多少。 答:指令:EXP B 执行后:T=FFFDH(-3)

32.编制一段计算y=555/222+1的汇编程序。 答:.bss num,1 ;分子 .bss den,1 ;分母 .bss quot,1 ;商 .def _c_int00 .data

table: .word 022Bh .word 00DEh .text

_c_int00: STM #num,AR1 RPT #1 MVPD LD MPYA ABS LD ABS RPT #15 SUBC XC NEG A ADD #1,A STl A,@quot

33.编制计算 的程序

a1=0.3 a2=0.2 a3=-0.4 a4=0.1 x1=0.6 x2=0.5 x3=-0.1 x4=-0.2 计算y = xl al + x2 a2 答:.title \

.mmregs .bss a,4 .bss x,4 .bss y,1 STACK .usect \

@den,A 1,BLT

table,*AR1+ ;传送两个数据 @den,16,A @num A @num,A A

STH A,@den

.def _c_int00 .def _c_int02 .data .mmregs

.word 0.6,0.5,-0.1,-0.2 .text

table: .word 0.3,0.2,-0.4,0.1

_c_int00: STM #0,SWWSR STM #STACK+10h,SP RSBX INTM STM #00004H,IMR STM #a,AR1 RPT #7

MVPD table,*AR1+ CALL SUM end: B end _c_int02: NEG A RETE

SUM: STM #a,AR3 STM #x,AR4 RPTZ A,#3

MAC *AR3+,*AR4+,A STL A,@y RET

.end 35.试编写0.25 x (-0.1)的程序代码 答:百度: .title \

.mmregs .bss x,1 .bss y,1 .bss z,1 .data

.word -1*32768/10 .text stm #x,ar1 rpt #0x1

mvpd #AmpCoef,*ar1+ stm #x,ar2 stm #y,ar3 mpy *ar2,*ar3,A sth A,*ar1

.global _c_int00

AmpCoef: .word 25*32768/100

_c_int00: ssbx FRCT

Wait:

b Wait

.end

自己写的: .title “float.asm” .def start

STACK: .usect “STACK”,100 .bss x1,1 .bs9 x2,1 .bss el,1 .bss m1,1 .bss e2,1 .bss m2,1 .bss ep,1 .bss mp,1 .bss product,1 .bss temp,1 .data

table: .word 25*32768/100 .wotd -1*32768/10 .text

start: STM #STACK+100,SP ;设置堆栈指针 SP

MVPD table,@x1 ;将 x1 和 x2 传送至数据存储器 MVPD table+1,@x2

LD @x1,16,A ;将 xl 规格化为浮点数 EXP A

ST T,@el ;保存 x1 的指数 NORM A

STH A,@ml ;保存 x1 的尾数 LD @x2,16,A ;将 x2 规格化为浮点数 EXP A

ST T,@e2 ;保存 x2 的指数 NORM A

STH A,@m2 ;保存 x2 的尾数 CALL MULT ;调用浮点乘法子程序 done: B done

MULT: SSBX FRCT SSBX SXM

LD @e1,A ;指数相加 ADD @e2,A

STL A,@ep ;乘积指数→ep LD @ml,T ;尾数相乘

MPY @m2,A ;乘积尾数存放在累加器 A 中 EXP A ;对尾数乘积规格化

ST T,@temp ;规格化时产生的指数→temp

NORM A

STH A,@mp ;保存乘积尾数→mp LD @temp,A ;修正乘积指数 ADD @ep,A ;(ep)+(temp)→A STL A,@ep ;保存乘积指数→ep NEG A ;将浮点乘积转换成定点数 STL A,@temp ;乘积指数反号,并加载到 T 寄存器 LD @temp,T

LD @mp,16,A ;再将尾数按 T 移位 NORM A

STH A,@product ;保存定点乘积 RET .end

36. 在8.2节中,正弦波信号发生器产生了一个2kHz的正弦信号,请修改程序,产生一个频率相同的余弦信号。 P277

37. 在第1题的基础上,新建一个工程文件,使用'VC5402的定时器1产生余弦信号,同时使用定时器0产生正弦信号。

38. 在FIR滤波器设计中,请使用C54x的FIRS指令完成滤波运算。 书上258页程序6-4

39. 利用位倒序循址方式对512个数据进行位倒序排列,应如何编写程序代码? 40. 请编写一个128点的实数FFT程序。

书上266~273页,将FFT.ASM中K_FFT_SIZE.set32中32改为128,K_LOGN. set5改为set7 41. 将TMS320VC5402芯片从2分频方式切换到4分频方式,试编写相应的程序。 答:STM #00H,CLKMD ;切换到DIV方式 Status:LDM CLKMD,A

AND #01H,A ;测试PLLSTATUS位 BC Status,ANEQ ;若A≠0,则转移, 表明还没有切换到DIV方式

STM #F000H ,CLKMD;若A=0,则顺序执行, 已切换到DIV方式

43试设计一个段名为MYSTACK的有11个单元的堆栈,并为堆栈指针赋初值 答:size .set 100 stack .usect \ STM #stack+size,SP LD #-8531,A STM #length,AR1 MVMM SP,AR7 loop: STL A,*AR7- BANZ loop,*AR1-

1 VCC

2 3 4 MAX706R MR WDO VCC RES GND WDI 8 7 6 5 至DSP的复位端 RS CLK来自DSP的输出端

本文来源:https://www.bwwdw.com/article/6jxr.html

Top