DSP复习资料doc3.docx
《DSP复习资料doc3.docx》由会员分享,可在线阅读,更多相关《DSP复习资料doc3.docx(34页珍藏版)》请在冰豆网上搜索。
DSP复习资料doc3
DSP复习资料
第一章绪论
1.掌握DSP的概念
☉DSP(DigitalSignalProcessing)----数字信号处理的理论和方法。
☉DSP(DigitalSignalProcessor)----用于数字信号处理的可编程微处理器。
☉DSP技术(DigitalSignalProcess)----是利用专门或通用数字信号处理芯片,通过数字计算的方法对信号进处理的方法与技术。
2.DSP的实现方法
1)PC机软件实现
2)PC机+专用处理机
3)通用单片机(51、96系列等)
4)专用DSP芯片
5)通用可编程DSP芯片
注:
我们现在通常用的是(5)
3.名词解释或问答
冯•诺依曼结构:
以奔腾为代表的通用微处理器,其程序代码和数据共用一个公共的程序存储空间和单一的地址与数据总线,取指令和取操作数只能分时进行,这样的结构成为冯•诺依曼结构。
哈佛结构:
程序代码和数据的存储空间分开,各有自己的地址总线与数据总线这就是所谓的哈佛结构。
改进的哈佛结构:
在哈佛结构的基础上加以改进,使得程序代码和数据存储空间之间也可以进行数据的传送,称为改进的哈佛结构。
流水线技术:
DSP处理器流水线技术是将各指令的各个步骤重叠起来执行,而不是一条指令执行完成之后,才开始执行下一条指令。
MIPS(millionsofInstructionsPerSecond,每秒执行百万条指令)
4.DSP芯片的分类
(1)按用途分类:
通用型DSP芯片(本课程主要讨论的芯片)
专用型DSP芯片
(2)按数据格式分:
定点DSP
浮点DSP
5.TI公司常用的DSP芯片可以归纳为三大系列:
•TMS320C2000系列:
TMS320C2xx/C24x/C28x等;
•TMS320C5000系列:
TMS320C54x/C55x等;
•TMS320C6000系列:
TMS320C62x/C67x/C64x。
注:
掌握每个系列的主要用途:
•C2000系列DSP芯片价格低,具有较高的性能和适用于数字化控制领域的功能。
因此在工业自动化、电动机控制、家用电器和消费电子等领域得到广泛应用。
•C5000系列DSP芯片包括C54x和C55x两大类
C54x:
16位定点DSP,适应远程通信等实时嵌入式应用的需要。
C55x:
C55x非常适合个人的和便携式的应用,以及数字通信设施的应用。
•C6000系列主要应用:
(1)数字通信
(2)图像处理
6.DSP系统设计过程(要求会画图)
7.DSP芯片的选择(考虑因素)---掌握
(1)DSP芯片的运算速度
(2)DSP芯片的运算精度
(3)片内硬件资源
(4)DSP芯片的功耗及价格
(5)DSP芯片的开发工具
(6)其他因素:
•封装的形式
•质量标准
•供货情况
•生命周期
第二章TMS320C54x的硬件结构
1.TMS320C54x内部结构(3大块)
(1)CPU:
包括算术逻辑运算单元(ALU)、乘法器、累加器、移位寄存器、各种专门用途的寄存器、地址生成器及内部总线。
(2)存储器系统:
(3)片内外设与专用硬件电路
2.TMS320C54x的CPU部分
•先进的多总线结构(1条程序总线、3条数据总线和4条地址总线)。
•40位算术逻辑运算单元(ALU),包括1个40位桶形移位寄存器和2个独立的40位累加器。
•17×17位并行乘法器,与40位专用加法器相连,用于非流水线式单周期乘法/累加(MAC)运算。
•比较、选择、存储单元(CSSU):
用于加法/比较选择。
•指数编码器:
可以在单个周期内计算40位累加器中数值的指数。
•双地址生成器:
包括8个辅助寄存器和2个辅助寄存器算术运算单元(ARAU)。
3.存储器系统:
•192K字可寻址存储空间:
64K字程序存储空间、64K字数据存储空间及64K字I/O空间
•DARAM----片内双寻址RAM
•SARAM-----片内单寻址RAM
4.总线结构
TMS320C54X总线结构是围绕8组16比特总线建立的。
☉一组程序总线PB:
传送从程序存储器来的指令代码和立即数
☉三组数据总线:
(CB、DB):
传送从数据存储器读出的操作数
(EB):
传送写入到数据存储器中的数据;
☉四组地址总线(PAB、CAB、DAB、EAB):
传送执行指令所需的地址
(表2-2各种寻址方式所用到的总线,P23)
5.C54xDSP有三个状态和控制寄存器:
(1)状态寄存器0(ST0);
(2)状态寄存器1(ST1);
(3)处理器工作模式状态寄存器(PMST)。
6.状态寄存器(ST0)
ST0的结构图
含义:
ARP——辅助寄存器指针
TC——测试/控制标志位
C——进位位。
OVA/OVB——累加器A/B的溢出标志位
DP——数据存储器页指针
7状态寄存器(ST1)
ST1的结构图
含义:
BRAF——块重复操作标志位。
CPL——直接寻址编辑方式位
XF——XF引脚状态位。
HM——保持方式位
INTM——中断方式位。
OVM——溢出方式位
SXM——符号位扩展方式位。
C16——双16位/双精度算术运算方式位
FRCT——小数方式位。
CMPT——修正方式位
ASM——累加器移位方式位
(至少要了解第6,7,8,9,11,14位)
▪ST0和ST1寄存器的各位可以使用SSBX和RSBX指令来设置和清除;
例如:
SSBXCPL
RSBXSXM
▪ARP、DP、ASM位可以LD指令来加载。
例如:
LD#10,DP
LD#5,ASM(能看懂就行)
8.处理器工作模式状态寄存器(PMST:
ProcessorModeStatus)
IPTR——中断向量指针。
——微处理器/微型计算机工作方式位
OVLY——RAM重复占位位。
AVIS——地址可见位
(至少了解它的第3,5,6,7~15位,会计算中断向量)
9.累加器
组成:
共40位,三个部分(保护位作用:
数据位余量,防止迭代运算时发生溢出)
累加器A和B的差别仅在于累加器A的31~16位可以作为乘法器的一个输入
10.累加器归一化(定点数变为浮点数):
(掌握)
EXP A ;(冗余符号位-8),结果放到T寄存器
ST T,EXPONET;将指数值存放到数据存储器中
NORMA ;累加器归一化(累加器按T中值移位)
例如:
假设40位累加器A中的定点数为FFFFFFF001,则用EXPA指令,求得它的指数为13h。
再执行NORMA,累加器按T中值移位,将原来的定点数分成尾数FF80080000和指数两个部分。
11.存储器和I/O空间
•C54x的总存储空间为192K字
存储器的组成(分为3个可选择的存储空间):
(1)程序存储空间ROM64K16位
(2)数据存储空间64K16位(单访问SARAM,双访问DARAM)
(3)I/O存储空间64K16位
12.C54x通过PMST的3个状态位(MP/MC、OVLY、DROM),可以很方便地“使能”和“禁止”程序和数据空间中的片内存储器。
1)MP/MC:
=0,片内ROM安排到程序空间;
=1,片内ROM不安排到程序空间。
2)OVLY:
=0,片内RAM只安排到数据存储空间;
=1,片内RAM安排到程序和数据存储空间。
3)DROM:
=0,片内ROM不安排到数据空间;
=1,部分片内ROM安排到数据空间。
说明:
(1)DSP的工作方式控制寄存器中的OVLY(D5)位控制0000~3FFFH存储空间的片内/片外分配;
(2)DSP的工作方式控制寄存器中的MP/MC(D6)位控制4000~FFFFH存储空间的片内/片外分配;
(3)TMS320C5402的20条程序地址线可扩展外部程序存储器到1M字。
采用分页扩展方法,共16页,每页64k字。
见P36图2.13。
12.片内程序存储器
片内高2K字ROM中的内容是由TI公司定义的,这2K字程序空间(F800h~FFFFh)中包含的内容。
MP/MC硬件复位时=0,CPU从FF80H单元(通常存放转移指令→自举加载程序)开始执行。
(记住2K字和F800h)
13.C54x中DARAM前1K字数据存储器空间分配
1)0000h-001Fh:
存储器映像CPU寄存器;
2)0020h-005F:
外围电路寄存器;
3)0060h-007Fh:
32字暂存器;
4)0080h-03FFh:
896字DARAM。
14.掌握存储器的扩展方法
15中断系统概述(掌握)
中断:
是由硬件驱动或软件驱动的信号,该信号使CPU终止正在执行的程序,转去执行一个请求中断的内部或外部的中断服务程序,待处理完毕后,又返回到被终止的源程序处继续执行,这一过程称为中断。
中断系统:
为实现中断功能而设置的各种硬件和软件。
16中断分类,每一类中分别包括哪些
C54xDSP的中断可以分成两大类:
(1)可屏蔽中断:
这些都是可以用软件来屏蔽或开放的中断。
C54x最多可以支持16个可屏蔽中断,但C5402只使用14个可屏蔽中断。
▪
~;
▪BRINT0、BXINT0、BRINT1和BXINT1(串行口中断)。
▪TINT0、TINT1(定时器中断)。
▪HPINT(主机接口)DMAC0~DMAC5。
(2)非屏蔽中断:
这些中断是不能够屏蔽的,C54x对这一类中断总是响应,并从主程序转移到中断服务程序。
▪C54xDSP的非屏蔽中断包括:
所有的软件中断;
▪
以及两个外部硬件中断:
(复位)和。
17.中断标志寄存器(IFR)
当一个中断出现的时候,IFR中相应的中断标志位置1,直到中断得到处理为止。
(记住什么时候置1)
18.中断屏蔽寄存器(IMR)
说明
(1)共14个有效位(与IFR对应)
(2)当IMRi=0屏蔽该中断;
IMRi=1不屏蔽即开放该中断。
(记住第
(2)点)
19.中断方式控制位(INTM)
说明:
a)INTM是CPU状态寄存器ST1中的1位(第11位)
b)功能:
c)操作:
20.INTR,TRAP,RESET的区别是什么
a)INTRK;
注:
•PC=中断向量地址指针+中断向量号
•该指令不允许执行任何可屏蔽中断
•该指令不影响IFR标志位
•不允许中断嵌套
b)TRAPK;除INTM不变外,其它同上。
注:
•可实现中断嵌套
•可用软件指令在TRAP中断服务程序中置位INTM
c)RESET
注:
•功能:
使处理器返回一个预定状态;
•复位指令:
可在程序的任何时候产生;
•该指令影响ST0、ST1,不影响PMST,与硬件复位有区别。
21.应答中断
硬件或软件中断发送了一个中断请求后,CPU必须决定是否应答中断请求。
a)软件中断和非屏蔽硬件中断会立刻被应答;
b)可屏蔽中断仅仅在如下条件被满足后才被应答:
(1)优先级别最高(当同时出现一个以上中断时)。
(2)状态寄存器ST1中的INTM位为0。
(3)中断屏蔽寄存器IMR中的相应位为1。
(记住(b),其余了解)
22.中断操作流程
23.中断向量(地址)(书上第48页例)
组成:
IPTR+中断向量序号<<2
(9位)(5位)→(7位)
注:
•中断向量地址指针IPTR位于PMST的高9位(D15~D7),可用程序设置;
•中断向量序号由相应的中断源(P44表2-10)提供
第三章TMS320C54x指令系统
1.C54x汇编语言语句格式如下(4个部分):
[标号][:
]指令[操作数列表][;注释]
begin:
LD#40,AR1;将立即数40传送给ARl
其中:
(1)标号供本程序的其他部分或其他程序调用。
2.指令域包括以下指令码之一:
•助记符指令(如STM,MAC,MPVD,STL);
•汇编伪指令(如.data,.list,.set);
•宏指令(如.macro,.var,.mexit);
•宏调用。
注:
作为助记符指令,一般用大写;汇编伪指令和宏指令,以句点“.”开始,且为小写。
(注意大小写)
3.操作数前前缀的使用规则:
(1)前缀#表示其后的操作数为立即数。
(2)前缀*表示其后的操作数为间接地址。
(3)前缀@表示其后的操作数是采用直接寻址或绝对寻址的地址。
4.C54的基本寻址方式
▪立即寻址
▪绝对寻址
▪累加器寻址
▪直接寻址
▪间接寻址
▪存储器映像寄存器寻址
▪堆栈寻址
5.直接寻址(理解能够完成书课后习题第2题)
含义:
用指令中包含的数据M地址的低7位(偏移地址值)+基地址
→16位数据存储器地址。
基地址:
DP__数据页指针
SP__堆栈指针
用途:
利用数据页指针和堆栈指针寻址DM。
指令代码格式:
15—876--0
操作码
I=0
数据存储器地址(dmad)
注:
第7位确定了寻址方式,若I=0,表示指令使用直接寻址方式
说明:
①地址形成
•当ST1中的CPL=0时,由ST0中的DP值(9位地址)与指令中的7位地址一道形成16位数据存储器地址。
9位数据页指针
7位dmad
•当ST1中的CPL=1时,将指令中的7位地址与16位堆栈指针SP相加,形成16位的数据存储器地址。
6.循环寻址的算法:
(要求会写)
If0≤index+stepIndex=index+step;
Elseifindex+step≥BK;
Index=index+step-BK;
Elseifindex+step<0;
Index=index+step+BK;
7.使用循环寻址时,必须遵循以下三个原则:
(要求会背)
①循环缓冲区的长度R<2N,且地址从一个低N位为0的地址开始;
②步长小于或等于循环缓冲区的长度;
③所使用的辅助寄存器必须指向缓冲区单元。
8位倒序寻址
•用途:
主要用于FFT运算,可提高FFT算法的执行速度和存储器的使用效率。
(课后习题第4题)
9.减法指令举例(掌握)
利用SUBC完成整数除法(TEMP1/TEMP2)
LDTEMP1,B;将被除数TEMP1装入B累加器的低16位
RPT#15;重复SUBC指令16次
SUBCTEMP2,B;使用SUBC指令完成除法
STLB,TEMP3;将商(B累加器的低16位)存入变量TEMP3
STHB,TEMP4;将余数(B累加器的高16位)存入变量TEMP4
注:
第3章其余内容都很重要,老师没有划,请仔细看。
第四章TMS320C54x的软件开发
1.产生一个可以由C54x目标系统执行的模块(记住主流程以及图中产生的各后缀)
2.书例4.1汇编语言程序编写方法举例
.title“example.asm”;用双引号括起的源程序名
.mmregs;定义存储器映射寄存器的替代符号
STACK.usect“STACK”,10H;在数据存储器中留出16个单元作为
;堆栈区,名为STACK
.bssa,4;在数据存储器中空出9个存储单元存放
.bssx,4;变量a1,a2,a3,a4,x1,x2,x3,x4和y.
.bssy,1
.defstart;在此模块中定义,可为别的模块引用
.data;紧跟其后的是已初始化数据
table:
.word1,2,3,4;在程序存储器标号为table开始的8个单
.word8,6,4,2;元存放初始化数据
.text;紧跟其后的是汇编语言程序正文
start:
STM#0,SWWSR;addsnowaitstates
STM#STACK+10H,SP;setstackpointer
STM#a,AR1;AR1pointtoa
RPT#7;move8values
MVPDtable,*AR1+;fromprogrammemoryinto
;datamemory
CALLSUM;callSUMsubroutine
end:
Bend
SUM:
STM#a,AR3;Thesubroutineimplement
STM#x,AR4;multiply-accumulate
RPTZA,#3
MAC*AR3+,*AR4+,A
STLA,@y
RET
.end;结束汇编,汇编器将忽略
;此后的任何源语句
3.汇编语言常量
C54x汇编器支持7种类型的常量:
1.二进制整数:
最多由16个二进制数字组成,其后缀为B(或b).
2.八进制整数:
最多由6个八进制数字组成,其后缀为Q(或q)。
3.十进制整数:
由十进制数字串组成
范围从-32768~32767或0~65535
4.十六进制整数:
最多由4个十六进制数字组成,包括0~9和字符A~F及a~f;
必须由十进制值0~9开始;
其后缀为H(或h),也可以由前缀(0x)标明。
如:
78h、0Fh、37Ach、0x37AC
5.浮点数常量:
由整数、小数点、小数部分和指数部分组成
+(-)nnn.nnnE(e)+(-)nnn
整数小数指数
有效的浮点数常量:
3.0、3.14、-0.314e13、+314.59e-2
注:
小数点必须有,例如:
3e5无效,3.e5有效。
6.字符常量:
由单引号括住的一个或两个字符组成。
它在机器内部由8位ASCII码来表示一个字符。
有效的字符常量:
‘a’(内部表示为61h),‘‘’D’(内部表示为2744h)
7.汇编时常量:
用.set伪指令给一个符号赋值。
例如:
shift.set3;将常数值3赋给符号shift
LD#shift,A;再将3赋给A累加器
注意:
汇编器在内部把常量作为32位量。
常量不能进行符号扩展。
4.段定义伪指令
.bss为未初始化的变量保留空间;
.data通常包含了初始化的数据;
.text该段包含了可执行的代码;
.sect定义已初始化的带命名段,其后的数据存入该段;
例如:
.sect“.vectors”
.usect在一个未初始化的有命名的段中为变量保留空间。
5.定义宏的两种方法:
(1)宏可以在源文件起始处或者在.include/.copy文件中定义。
格式:
宏名.macro[参数1],[…],[参数n]
汇编语句或宏指令
[.mexit]
.endm
(2)在宏库中定义宏
6.宏定义、宏调用和宏展开举例(部分程序)。
DAT0.set60h;把一个常数值等效成一个符号
DAT1.set61h;表示地址
DAT2.set62h
DAT3.set63h
.text
ADD3.macroP1,P2,P3,ADDRP;宏定义:
三数相加
;ADDRP=P1+P2+P3
LDP1,A
ADDP2,A
ADDP3,A
STLA,ADDRP
.endm
…
ST#0034h,DAT0;参数赋值
ST#0243h,DAT1
ST#1230h,DAT2
ADD3DAT0,DAT1,DAT2,DAT3;宏调用:
DAT3=
;DAT0+DAT1+DAT2
NOP
…
.end
7.COFF(CommonObjectFileFormat,COFF):
汇编器和链接器所创建的目标文件。
COFF的核心概念:
使用代码块(段)和数据块(段)编程,而不是指令或数据简单的顺序编写
8.COFF文件中的段
1.所有的COFF目标文件都包含以下3种形式的段:
.text段(此段通常包含可执行代码);
.data段(此段通常包含初始化数据);
.bss段(此段通常为未初始化变量保留存储空间)。
2.此外,汇编器和链接器可以建立、命名和链接自定义段。
①自定义段是程序员自己定义的段;
②使用起来与.data、.text以及.bss段类似;
③它的好处是在目标文件中与.data、.text以及.bss分开汇编,链接时作为一个单独的部分分配到存储器。
④有2种形式:
.sect建立的自定义段是已初始化段
.usect建立的自定义段是未初始化段。
9.汇编器对段的处理(例4.4)
(1)未初始化段(Uninitializedsections)由.bss和.usect伪指令建立。
未初始化段分为默认的和命名的2种,其句法如下
.bss符号,字数
符号.usect“段名”,字数(要求会写)
(2)初始化段(Initializedsections)由.text、.data和.sect伪指令建立,包含可执行代码或初始化数据。
3种初始化伪指令的句法如下:
.text[段起点]
.data[段起点]
.sect“段名”[,段起点]
(3).usect和.sect可以创建自定义的段。
10.段伪指令应用举例。
(看懂就行)
10000.data;汇编至.data段
200000011coeff.word011h,022h,033h
00010022
00020033
30000.bssbuffer,10;在.bss段为buffer变量
;保留10个字的空间
400030123ptr.word0123h;继续汇编至.data段
50000.text;汇编至.text段
60000100fadd:
LD0Fh,A
70001f010aloop:
SUB#1,A
00020001
80003f842BCaloop,AGEQ
00040001
90004.data
10000400aaivals.word0AAh,0BBh,0CCh;继续汇编至.data段
000500bb
000600cc
110000var2.usect“newvars”,1;自定义数据段,保留8
;个字的空间
120001inbuf