DSP(知识点+思考题)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP复习要点
第一章绪论
1、数的定标:Qn表示。
例如:16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示
2、‟C54x小数的表示方法:采用2的补码小数;.word 32768 *707/1000
3、定点算术运算:
乘法:解决冗余符号位的办法是在程序中设定状态寄存器STl中的FRCT位为1,让相乘的结果自动左移1位。
第二章CPU结构和存储器设置
一、思考题:
1、C54x DSP的总线结构有哪些特点?
答:TMS320C54x的结构是围绕8组16bit总线建立的。
(1)、一组程序总线(PB):传送从程序存储器的指令代码和立即数。
(2)、三组数据总线(CB,DB和EB):连接各种元器件,
(3)、四组地址总线(PAB,CAB,DAB和EAB)传送执行指令所需要的地址。
2、C54x DSP的CPU包括哪些单元?
答:'C54X 芯片的CPU包括:(1)、40bit的算术逻辑单元(2)、累加器A和B(3)、桶形移位寄存器(4)、乘法器/加法器单元(5)、比较选择和存储单元(6)、指数编码器(7)、CPU状态和控制寄存器(8)、寻址单元。
1)、累加器A和B分为三部分:保护位、高位字、地位字。
保护位保存多余高位,防止溢出。
2)、桶形移位寄存器:将输入数据进行0~31bits的左移(正值)和0~15bits的右移(负值)
3)、乘法器/加法器单元:能够在一个周期内完成一次17*17bit的乘法和一次40位的加法
4)、比较选择和存储单元:用维比特算法设计的进行加法/比较/选择运算。
5)、CPU状态和控制寄存器:状态寄存器ST0和ST1,由置位指令SSBX和复位指令RSBX控制、处理器模式状态寄存器PMST
2-3、简述’C54x DSP的ST1,ST0,PMST的主要功能。
答:’C54x DSP的ST1,ST0,PMST的主要功能是用于设置和查看CPU的工作状态。
•ST0主要反映处理器的寻址要求和计算机的运行状态。
ST1主要反映处理器的寻址要求、计算初始状态的设置、I/O及中断的控制等。
PMST主要设定和控制处理器的工作方式和存储器的配置,反映处理器的工作状态。
ST0的ARP用于指示当前使用的辅助寄存器,TC为测试/控制的状态位,C表示加减法的进借位,OV A、OVB为累加器的溢出状态,DP表示当前使用的数据页。
•ST1的BRAF为块重复标志,CPL表示编译方式,HM表示挂起方式,INTM用于中断屏蔽控制,OVM为溢出方式设置,SXM 用于设置符号扩展,C16用于设置双16位或者双精度方式,FRCT用于设置小数计算,CMPT为兼容模式位,ASM用于设定移位数。
•PMST的IPTR用于配置中断向量指针,MP/MC、OVLY、DROM用于配置片内存储器的使用,A VIS用于配置地址是否可见,CLKOFF用于关断时钟输出,SMUL、SST分别用于乘法、存储的饱和处理设置。
4、C54x DSP存储器可采用软件配置吗?如何配置?
答:’C54X通过在处理器工作方式状态寄存器(PMST)中的三个状态位来设置片内存储器。
MP/MC=0:片内ROM安排到程序空间;MP/MC=1:片内ROM不安排到程序空间;
OVLY=0:片内RAM只安排到数据空间;OVLY=1:片内RAM安排到数据空间和程序空间;
PROM=0:片内不安排到数据空间;PROM=1:片内安排到数据空间;
5、C54x数据存储器前1K如何划分?
答:1)存储器映象CPU寄存器(0000h~001Fh,共26个单元) 2)外围电路寄存器(0020h~005FH) 3)32字暂存器DARAM(0060h~007Fh) 4)896字DARAM(0080h~03FFh)。
6、C54x程序存储器ROM的保留部分的内容是什么?
答:(1)自举加载程序。
从串行口、外部存储器、I/O口、或者主机接口(如果有的话)自举加载。
(2)256字U律压扩表。
(3)256字A律压扩表。
(4)256字正弦函数值查找表。
(5)中断向量表。
7、C54x DSP的IO空间有何特点?
答:(1)它是一个64K字的地址空间(0000h—FFFFh),都在片外。
(2)可以用两条指令(PORTR和PORTW)对I/O空间寻址。
(3)用于与外部设备连接;(4)读写信号均为对通过外部总线实现。
二、重点:
1、C54x的三个独立存储器空间:(1)、64K字的程序存储空间(2)、64K字的数据空间(3)、64K字的I/O空间,
片内存储器的有DARAM、SARAM和ROM三种类型
第三章指令系统
一、思考题:
1、C54指令有哪些数据类型?
答:16位数的单精度和32位数的双精度、长字指令
2、C54指令有哪些数据寻址方式?
答:‘C54x提供了七种基本的数据寻址方式:
(1)、立即数寻址——指令中嵌有一个固定的数。
(2)、绝对地址寻址——指令中有一个固定的地址。
(3)、累加器寻址——按累加器内的地址去访问程序存储器中的一个单元。
(4)、直接寻址——指令中的7bits是—个数据页内的偏移地址,而所在的数据页由数据页指针DP或SP决定。
该偏移加上DP和SP的值决定了在数据存储器中的实际地址。
(5)、间接寻址——按照辅助寄存器中的地址访问存储器。
(6)、存储器映射寄存器寻址——修改存储器映射寄存器中的值,而不影响当前DP或SP的值。
(7)、堆栈寻址——把数据压入和弹出系统堆栈。
3、直接寻址的数据地址是如何形成的?
答:(1)、CPL=0时状态寄存器ST0的9位数据页指针(DP)和指令中的操作数的低七位偏移地址合成16位有效地址(2)、CPL=1时状态寄存器ST0的16位堆栈指针(SP)和指令中的操作数的低七位偏移地址合成16位有效地址4、什么是循环寻址?如何实现?(算法可以不用记)
答:使所寻址的数据存储器地址在指定的范围内循环的寻址方式成为循环寻址。
循环缓冲器的有效基址是用户选定的辅助寄存器ARX的低N位置0后所得的值,其尾地址是通过BK的低N位代替ARX的低N位得到的。
循环寻址的算法实际上是以BK的值为模进行的取模运算。
5、什么是位倒序寻址?如何实现?
答:AR0存放的整数N是FFT点数的一半,—个辅助寄存器指向一数据存放的物理单元。
当使用位倒序寻址把AR0加到辅助寄存器中时,地址以位倒序的方式产生,即进位是从左向右,而不是从右向左。
6、什么是循环缓冲器?如何实现?
答:循环缓冲器是一个包含了最近的数据的滑动窗口,当新的数据来到时,缓冲器就会覆盖最早的数据。
循环缓冲器实现的关键是循环寻址的实现。
循环缓冲器大小寄存器(BK)确定了循环缓冲器的大小。
大小为R的循环缓冲器必须从一个N-bit边界开始(也就是说,循环缓冲器基地址的最低N位必须为0 ),N是满足2N>R的最小整数。
R 的值必须装入BK。
循环缓冲器的有效基地址(EFB)就是用户选定的辅助寄存器(ARx)的低N位置0后所得到的值。
循环缓冲器的尾地址(EOB)是通过用BK的低N位代替ARx的低N位得到。
1)对于N阶的FIR滤波器,在数据存储器中开辟一个称之为滑窗的N个单元的缓冲区,滑窗中存放最新的N个输入样本。
2)每次输入新的样本时,以新样本改写滑窗中的最老的样本数据,而滑窗中的其他数据不需要移动。
3)利用片内BK(循环缓冲区长度)寄存器对滑窗进行间接寻址。
二、重点:
1、C54X的汇编指令由操作符和操作数两部分组成。
基本形式为
2、LD # 80h,A 如果漏掉了…#‟号,指令:LD 80h,A
3、双操作数寻址方式:只能选择4个辅助寄存器:AR2~AR5。
4、四条使用堆栈寻址方式访问堆栈的指令:
PSHD:把一个数据存储器的值压入堆栈。
PSHM:把一个存储器映射寄存器的值压入堆栈。
POPD:把一个数据存储器的值弹出堆栈。
POPM:把一个存储器映射寄存器的值弹出堆栈。
整数小数乘法程序、MAC、MACR指令、例27
★第四章汇编语言的程序设计
一、思考题:
1、汇编、链接时哪些选项是必须的?
答:源文件名%1是必须的,链接时目标文件是必须的。
2、.lst,.cmd,.map,.out,.obj各为什么文件?有何作用?
答:1).lst:输出列表文件,用于调试2).cmd:链接器命令文件,用于控制链接器连接和程序重定位3).map:存储器映像文件,用于调试4).out:输出可执行文件,用于运行5).obj:目标文件,对其链接生成.map和.out文件3、子程序如何调用?
答:采用CALL:无条件调用;CALA根据累加器规定地址调用子程序;CC:有条件调用。
二、重点:
1、汇编语言源程序是以“.asm”为其扩展名的程序,每一行都可以由四个部分组成,用空格或TAB隔开。
句法如下:
[标号] 助记符[操作数] [;注释]
(1)、标号:必须从第1列写起,最多可达32个字符(A~Z,a~z,0~9,_,以及$ ),但不能以数字开头,后面可以加或不加“:”。
标号的值就是SPC(段程序计数器)的值。
(2)、助记符:助记符指令、汇编指令、宏指令和宏调用;一般用大写;汇编指令、宏指令以(.)开始,且为小写。
(3)、操作数——指令中的操作数或汇编命令中定义的内容。
操作数之间必须用逗号“,”隔开。
有的指令无操作数,如:NOP、RESET。
(4)、注释从“;”开始,可以放在指令或汇编命令的后面,也可以放在单独的一行或数行。
2、7种常数数据类型:二进制、八进制、十进制、十六进制、浮点数、字符、字符串
符号仅在定义它的汇编程序有效,使用.global伪指令定义的符号为全局符号;
3、伪指令:提供数据、控制汇编过程
(1)段定义伪指令:己初始化段:.text .data和.sect命令用于建立已初始化段;未初始化段:.bss和.usect命令建立未初始化
(2)、段程序计数器定位伪指令:.align [size in bits]该指令使段程序计数器SPC对准1~128字的边界;不同操作数代表不同的含义:“1”——SPC对准字边界“2”——SPC对准长字或偶地址边界“128”——SPC对准页边界(缺省值)
4、宏命令:其使用过程包括三个部分:宏定义、调用、宏展开
5、DSP的软件开发方式(3种):直接编写汇编语言源程序;编写C语言程序;混合编程(既有C代码又含汇编代码)
6、程序:程序一般由数据段、代码段、堆栈段组成;
程序的四种基本结构:顺序结构、分支结构、循环结构、子程序结构
7、常用汇编命令选项:(1)、%1:用源文件名代入。
(2)、-s:将所有定义的符号放在目标文件的符号表中。
(3)、-1:产生一个列表文件。
(4)、-x:产生一个交叉汇编表,并把它附加到列表文件的最后。
8、最常用的连接命令选项为-m和-o。
(1)、-m filename:生成一个filename.map映像文件。
.map文件中列出了输入/输出段布局,以及外部符号重定位之后的地址等。
(2)、-o fllename:指定可执行输出模块的文件名。
如果缺省,则此文件名为 a.out。
9、汇编语言程序的过程:
(1)、编辑:生成.asm文件(2)、汇编:生成.lst列表文件和.obj目标文件(3)、链接:生成.map和.out文件。
应掌握的程序:
1、链接器命令文件
2、例题2;
3、例题3;
4、正弦信号发生器
5、FIR滤波器
第五章C54x 的结构
1、C54x有一个6 级深度的指令流水线:程序预取指、取指、指令译码、寻址、读和执行指令。
可以延迟寻址或者是调整指令顺序或者插入空操作指令加以解决流水线冲突问题。
2.、软件可编程等待状态发生器:在‟C54x与外部慢速器件相接口时,用于将外部总线周期延长最多为7个机器周期。
如果要求插入7个以上的等待周期,则可利用硬件READY线来接口。
3、分区转换逻辑:允许‟C54x在外部存储器分区之间切换时不需要外部为存储器插等待状态。
当寻址跨越程序或
数据的存储器分区界线时,分区转换逻辑会自动地插入一个周期。
其额外周期的作用是防止总线冲突。
第六章片内外设
1.54X DSP的CLKMD寄存器的作用是什么?其中的PLLCOUNT是用来设置什么?
答:时钟电路可以通过硬件和软件配置,CLKMD用于软件可编程PLL,可控制输出信号的频率。
PLLCOUNT用于存放初值,每16个输入时钟到来后减一。
在PLL开始工作之后,到PLL成为处理器时钟之前的一段时间内进行计数定时,PLL计数器能够确保PLL锁定之后以正确的时钟信号加到处理器。
2. 54X DSP有哪几种省电模式?
有四种,IDLE1,暂停所有的CPU活动,但片内外设仍然在工作,使用IDLE1指令可进入这个模式,可使用唤醒中断结束这个方式。
IDLE2,暂停CPU和片内外设的工作。
使用IDLE2指令可进入这个模式,通过在DSP芯片外部中断引脚/RS、/NMI或/INTn上加上10ns的低脉冲,可以启动唤醒中断服务,结束这个模式IDLE3,这个模式类同于IDLE2,它使片内锁相环PLL暂停工作,这样就完全使芯片停止了工作,使用IDLE3指令可进入这个模式,通过在DSP芯片外部中断引脚/RS、/NMI或/INTn上加上10ns的低脉冲,可以启动唤醒中断服务,结束这个模式
HOLD模式,它使外部总线、数据总线、和控制总线进入高阻状态,也可以使CPU暂停工作,这取决于HM位的状态,当HM=1时,CPU停止工作状态,当HM=0时,CPU继续工作,这时CPU 不能进行外部数据的存取,CPU只能在内部工作。
这种模式不能停止片内外设的工作,只有在/HOLD 信号无效是才能结束HOLD模式
3. 54X DSP有几个中断管理寄存器,各有什么作用?
有两个寄存器,中断屏蔽寄存器和中断标志寄存器。
IMR中的相应位和状态寄存器ST1中的中断允许控制位INTM编程来屏蔽或开放该中断。
中断标志寄存器IFR,当有一个中断出现的时候,芯片收到一个相应的中断请求(中断挂
起),此时IFR中相应的中断标志位为1.
4.54X DSP的中断向量如何生成?
芯片给每个中断源都分配有一个确定的中断向量偏移地址,该地址为可屏蔽中断服务程序进入各中断源服务程序的偏移地址,这样就可以判断中断源的身份,并进入相应的中断源服务程序。
中断向量地址=PMST中的IPTR(9位)+左移两位后的中断向量序号(7位)
5.中断编程时如何开放可屏蔽中断?写出相应的指令。
当有中断请求时,IFR中相应的标志置为有效电平。
无论处理器是否响应中断,这个标志都处于有效电平。
在响应中断后,这个标志自动清除CPU接收到硬件或软件的申请后,要判断是否响应该中断。
软件中断和非屏蔽的硬件中断可以立即被响应。
而可屏蔽的硬件中断只有在以下条件下才能被响应:
(1)优先级最高的中断。
当同时有几个硬件请求中断时,‟54x根据其优先级对其进行响应。
(2)INTM位是0。
当执行软件中断时,INTM自动置1。
如果存在用RETE返回指令的中断服务程序(ISR),INTM清0。
INTM也可以用硬件复位或用RSBX INTM指令(禁止中断)来置位;用RSBX INTM指令(允许中断)来对INTM复位。
INTM实际上不修改IMR或IFR。
(3)IMR屏蔽位是1。
表示允许中断。
STM #0,SWWSR
RSBX INTM
STM #04H,IMR
6.定时器的中断速率如何计算?设DSP的时钟为100MHZ,要产生10ms的定时,请问如何初始化?
T INT周期=CLOCKOUT*(TDDR+1)*(PRD+1)
1、C54x的在片外围电路包括:(1)通用I/O引脚:XF和BIO; (2)定时器; (3)时钟发生器; (4)主机接口; (5)软件可编程等待状态发生器; (6)可编程分区开关; (7)串行口
2、时钟发生器由内部振荡器和锁相环(PLL)电路两部分组成。
3、软件可编程PLL:具有高度的灵活性。
它的时钟定标器提供各种时钟乘法器系数,并能直接接通和关断PLL。
PLL的锁定定时器可以用于延迟转换PLL的时钟方式,直到锁定为止。
4、C54x器件有四种节电模式:通过执行IDLEl、IDLE2和IDLE3三条指令,或使HOLD信号为低电平,可使处理器进入不同的节电模式。
5、中断系统:(1)、中断类型:可屏蔽中断、非屏蔽中断;(2)、中断管理寄存器:中断标志寄存器(IFR)和中断屏蔽寄存器(IMR)(3)、中断矢量地址是把中断矢量号(0~31)左移两位再加上PMST的中断指针产生。
6、在片定时器是一个软件可编程定时器,可以用来周期地产生中断。
定时器主要由3个寄存器组成:
(1)定时器寄存器(TIM):一个减1计数器;(2)定时器周期寄存器(PRD):存放时间常数;(3)定时器控制寄存器(TCR):定时器的控制位和状态位。
定时中断的周期为:CLKOUT×(TDDR+1)×(PRD+1)
其中,CLKOUT为时钟周期,TDDR和PRD分别为定时器的分频系数和时间常数。
7、主机接口HPI主要由5部分所组成:
(1)HPI存储器(DARAM):用于‟C54x与主机之间传送数据,也可以用作通用的双寻址数据RAM或程序RAM (2)HPI地址寄存器(HPIA):由主机对其直接访问。
寄存器中存放当前寻址HPI存储单元的地址。
(3)HPI数据锁存器(HPID):由主机对其直接访问。
存放当前进行读/写的数据
(4)HPI控制寄存器(HPIC);C54x和主机都能对它直接访问,用于主处理器,与DSP相互握手,实现中断要求。
(5)HFI控制逻辑。
用于处理HPI与主机之间的接口信号。
当‟C54x与主机(或主设备)交换信息时,HPI是主机的一个外围设备。
HPI的外部数据线是8根,HD(7~0),在‟C54x与主机传送数据时,HPI能自动地将外部接口传来的连续的8位数组合成16位数后传送给‟C54x。
8、C54x的四种串行口:标准同步串行口、缓冲串行口(BSP)、多通道缓冲串行口(MCBSP)、和时分多路中行口(TDM)。
第八章芯片的应用
一、思考题:
1.54X C/C++编译器支持的数据类型有哪些?大小为多少位?(课本232表8-1)
2.C语言的存储器、寄存器、IO口的访问方法有何异同?
答:(1)片内寄存器采用指针方式访问。
将DSP寄存器地址的列表定义在头文件.regh中,DSP寄存器地址定义为
(2)存储器采用指针方式访问,通过指针操作对内部存储器单元和外部存储器党员访问。
(3)、I/O端口的访问通过ioport关键字实现。
定义的形式为: ioport type port hex_num
3.DSP混合编程的方法有哪几种?采用独立编写程序时,如何实现数据交换?
答:(1)独立编写C程序和汇编程序;分开编译或汇编以形成各自目标代码模块
(2)在C语言程序的相应位置直接嵌入汇编语句;较直接的方法asm(“汇编语句”)
(3)对C程序进行编译生成相应的汇编程序,然后对汇编程序进行手工优化和修改。
4.中断函数定义方法有几种?如何定义?
答:(1)通过给每个中断函数前面加关键字interrupt来声明一个函数为中断处理函数。
(2)c中断程序采用特殊的函数名,格式为:c_intnn
5、采用C语言设计时,可屏蔽中断要响应应如何处理中断向量文件和连接命令文件?
答:可屏蔽中断要响应应如何处理中断向量文件和连接命令文件;中断向量文件在响应的中断处加一条跳转指令,跳转到中断端函数处,链接命令文件中,中断向量应定位到复位起始段。
6、C编译器对C程序编译后生成哪几个段?各有什么作用?
答:C编译器对C语言程序编译后生成6个可以进行重定位的代码和数据。
已初始化段:.text、 .cinit、.const:
.text段:包含可执行代码和字符串。
.cinit段:包含初始化变量和常数表。
.const段:字符串和switch表。
未初始化段:.bss、.stack和.sysmem
.bss段:保留全局和静态变量空间。
.stack段:为系统堆栈分配存储器。
.sysmem段:为动态存储器函数malloc、calloc 和realloc分配存储器空间。
一般地:.text、.cinit和.const连同汇编语言中的.data段可链入到系统的ROM或RAM 中,.bss .stack和.sysmem 段则应链入到RAM中。
7、C系统的堆栈可以实现哪些功能?
答:(1)保护函数的返回地址;(2)分配局部变量;(3)传递函数变量(4)保护临时结果。
二、重点:
1、堆栈的大小由链接器设定,链接器创建一个全局符号_stack_size,并给它分配一个与堆栈大小一样的数值,其缺省值为400H,即1K字。
2、在链接时,如果用c或cr选项,并包含实时运行支持库rts.lib,则c_int00就自动链入。
链接C程序时,链接器将可执行模块的入口点设置为c_int00。
补充:
1、程序中为变量开辟空间:用.bss伪指令
2、在程序中设置SWWSR的目的:让存储器的速度与CPU匹配
3、如何开辟堆栈空间,设置堆栈指针
(1)、用.usect伪指令来开辟堆栈空间:STACK .usect “STACK”,10H(2)、用STM指令来对堆栈指针进行赋值:STM #STACK +10H,SP(3)、将堆栈指针SP置于栈底的位置
4、定时器的初始化:
(1)、TCR中的TSS位置1,关闭定时器:STM #0010H,TCR;(2)、加载PRD: STM #0100H,PRD;(3)、重新加载TCR: STM #0C20H,TCR
若要开放定时中断,INTM=1
(1)、将IFR中的TINT置1,消除所有定时器的中断;STM #0008H,IFR;
(2)、将IMR中的TINT置1,开放定时器中断:STM #0008H,IMR
(3)、将STI中的INTM置0,从整体上开放中断:RSBX INTM。