DSP重点知识点
1. 数字信号处理的实现方法(P1)
1) 在通用计算机上用软件实现(速度较慢,一般用于DSP算法模拟)
2) 在通用计算机系统中加上专用的加速处理机实现(专用性强,应用受限,不便于系统的独立运行)
3) 用通用的单片机实现——用于不太复杂的数字信号处理(简单的DSP算法)
4) 用专用的DSP芯片实现——具有更加爱适合DSP的软硬件资源,可用于复杂的数字信号处理算法
5) 用专用的DSP芯片实现——特殊场合,要求信号处理速度极高(专用性强,应用受限)
2. DSP两种含义(P2)
1) 数字信号处理技术(Digital Signal Processing)
2) 数字信号处理器(Digital Signal Processor)
3. DSP芯片的结构(P2)
1) 哈佛结构
片内程序空间和数据空间是合在一起的,取指令和取操作数都是通过一条总线分时进行的
2) 改进的哈佛结构
程序空间和数据空间分开,1组程序存储器总线,3组数据存储器总线,3组地址总线,允许同时取指令和取操作数,还允许在程序空间和数据空间之间相互传送数据
3) 多总线结构
一个机器周期内可以多次访问程序空间和数据空间,如TMS320C51x内部有P、C、D、E共4条总线,每条总线又包括地址总线和数据总线
4) 流水线结构
4. DSP芯片的分类(P4)
1) 按照基础特性分类:
静态DSP芯片
一致性DSP芯片
2) 按照数据格式分类:
定点DSP芯片
浮点DSP芯片
3) 按照用途分类:
通用型DSP芯片
专用型DSP芯片
5. TMS320C54x硬件结构(P8)
1) TMS320系列同一代芯片具有相同的CPU结构,但是片内存储器和片内外围设备的配置是不同的
2) TMS320C54x是16位定点DSP,采用改进的哈佛结构,有一组程序总线和三组数据总线
6. TMS320C54x总线结构(P10)
片内有8条16位主总线:4条程序/数据总线和4条地址总线
7. 累加器(P11)
累加器A和累加器B的差别仅在于累加器A的31~16位可以用做乘法器的一个输入,累加器A可以用来累加器寻址。
8. 处理器工作方式控制及寄存器PMST(P15)
1) IPTR:中断向量指针,9位字段中断向量驻留的128字程序存储区地址。复位时9位全置1, 中断向量序号为0→1111 1111 1000 0000即向量地址FF80H
中断向量地址的计算:
中断向量地址由IPTR和左移2位后的中断向量序号K(0~31,左移后变成7位)所组成。
例:INT0的中断向量序号为18,PMST寄存器的IPTR=011H,计算中断向量地址
① 将中断向量序号转化成16进制
18→12H
② 将12H转化成二进制码并左移2位,变成7位
③ 将9位IPTR中断向量指针和左移后的中断向量序号结合即为所求
2) MP/MC:微处理器或微计算机工作选择位,高电平工作于微处理器状态,低电平工作于微计算机状态(可寻址片内的程序存储器)
3) OVLY:RAM重复占位标志
4) SMUL:乘法饱和方式位。SMUL=1,使用多项式加MAC或多项式减MAS指令进行累加时,对乘法结果进行饱和处理,且只有当OVM=1,FRCT=1时,SMUL位才起作用。只有LP器件有此状态位,其他器件此位均为保留位。当执行MAC或MAS时,进行多项式加或减之前,小数模式的8000H×8000H处理成为7FFF FFFFH。如果不设定小数模式,且OVM=1,在完成加或减之前,乘法结果不进行饱和处理,只对MAC或MAS执行的结果进行饱和处理
5) SST:存储饱和位。SST=1,对存储前的累加器进行饱和处理。饱和处理是在移位操作执行完成之后进行的。
u 根据指令要求对累加器的40位数据进行移位
u 将40位数据饱和处理成32位数据,饱和处理与SXM位有关。如果SXM=0,数据为证,如果数值大于7FFF FFFFH,则饱和处理的结果为7FFF FFFFH;如果SXM=1,若移位后,数值大于7FFF FFFFH,则饱和处理的结果为7FFF FFFFH;若移位后数值小于8000 0000H,则生成8000 0000H
u 按指令要求操作数据
u 在指令执行期间,累加器的内容不变
9. 状态寄存器ST0(P16)
1) OVA:累加器A的溢出标志
2) OVB:累加器B的溢出标志
3) DP:数据存储器页指针。将DP的9位数作为高位与指令中的低7位作为低位结合,形成16位直接寻址方式下的数据存储器地址
10. 状态寄存器ST1(P16)
1) BRAF:块重复操作标志位。
2) CPL:直接寻址编辑方式标志位。CPL=1,表示选用栈指针(SP)的直接寻址方式;CPL=0,表示选用页指针(DP)的直接寻址方式
3) INTM:中断方式控制位。=1,由SSBX指令控制,关闭所有可屏蔽中断,=0,由RSBX指令控制,开放所有可屏蔽中断
4) OVM:溢出方式控制位。OVM=1,ALU运算若正数溢出,目的累加器置正的最大值(00 7FFF FFFFH);若负数溢出,置成负的最大值(FF 8000 0000H)。OVM=0,直接加在实际运算结果,可由SSBX和RSBX置位或清零
5) SXM:符号位扩展方式控制字。SXM=1,数据进入ALU之前进行符号位扩展;SXM=0,数据进入ALU之前符号位禁止扩展。可由SSB和RSBS置位或清零
6) FRCT:小数方式控制位。FRCT=1,乘法器输出自动左移1位,消去多余的符号位
11. TMS320C54x的片内存储空间分为3个可选择的存储空间:64KW的程序存储空间、64KW的数据存储空间和64KW的I/O存储空间,共192KW。所有的TMS320C54x芯片都包括随机访问存储器(RAM)和只读存储器(ROM)。RAM又分两种:一种是只可一次寻址的RAM(SARAM),另一种是可以两次寻址的RAM(DARAM)//P17
12. TMS320C54x的片内ROM、DARAM、SARAM都可以通过软件映射到程序空间。从0080H开始将DARAM分成每80H(128)个存储单元为一个数据块//P20
13. 寻址存储器映射CPU寄存器无需等待周期,存储器映射外设存储器至少需要两个机器周期,由片内外设电路决定//P20
14. 数据页0(0H~7FH)不能映射到程序空间//P20
15. 特殊功能寄存器(P20)
1) 第一类特殊功能寄存器
第一类特殊功能寄存器为26个,连续分布在数据存储区的0H~1FH地址范围内,主要用于程序的运算处理和寻址方式的选择及设定
2) 第二类特殊功能寄存器
第二类特殊功能寄存器连续分布在20H~5FH的存储区内,主要用于控制片内外设,包括串口通信控制寄存器组、定时器定时控制寄存器组、机器周期设定寄存器组等
16. TMS320C54x芯片都有和XF两个通用I/O引脚//P22
17. 软件可编程等待发生器能把外部总线周期扩展到最多14个机器周期,以适应较慢的片外存储器和I/O设备//P22
18. 复位输入引脚的电平变化——出现两个外部时钟周期以上的低电平,引脚变为高电平后,程序从指定的存储地址FF80H开始运行。复位有三种方式上电复位、手动复位和软件复位//P23
19. 复位时ST0=1800H,ST1=2900H,PMST=FF80H//P23
20. 寻址方式(P25)
1) 立即数寻址
LD #0F0H, A
在数值或符号前面加一个“#”号表示是一个立即数否则被认为是一个地址
2) 绝对地址寻址
绝对地址的代码为16位,所以包含绝对寻址的指令至少要两个字长
① 数据存储器地址(dmad)寻址——用程序标号或数据寻址
MVKD DATA1, *AR2
DATA1标注的地址就是一个dmad值,DATA1必须适合程序中的标号或者DSP内部已经定义的单元
② 程序存储器地址(pmad)寻址——用一个符号或具体的数寻址
MVPD TABLE1, *AR2
TABLE1所标注的地址就是一个pmad值,TABLE1标注的程序存储单元中的一个字
程序存储器地址寻址和数据存储器地址寻址区别仅在于空间不同
③ 端口寻址
PORTR F2F0, *AR5
F2F0指的是端口地址,端口地址寻址只涉及两条指令,端口读(PORTR)和端口写(PORTW)
片外存储空间也只有WRITA和READA两条指令
④ *(1K)寻址
LD *(BUFFER), A
用一个符号或一个常数来确定数据存储器中的一个地址,访问数居空间的任意单元而不改变数据页(DP)的值,也不用对AR进行初始化。不能与RPT,RPTZ一起使用
采用绝对寻址方式时,指令长度将在原来的基础上增加一个字
3) 累加器寻址
只有两条指令READA和WRITA可以采用累加器寻址
4) 直接寻址
ADD SAMPLE, A ;把存储器单元SAMPLE中的内容加到累加器A中去
或ADD @x, A ;将符号@加在变量x的前面
CPL=0 dmad值与9位的DP值结合,形成16位的数据存储器地址
CPL=1 dmad值加上(正偏移)SP的值,形成16位的数据存储器地址
dmad值指的是指令寄存器IR的低7位
5) 间接寻址
间接寻址方式按照辅助寄存器中的地址访问存储器(8个16位辅助寄存器AR0~AR7,两个辅助寄存器算数单元ARAU0和ARAU1)
① 单操作数寻址
② 循环寻址
③ 位倒序寻址
位倒序寻址提高了执行速度和在FFT算法的程序中使用储存器的效率。在这种寻址方式中,AR0存放的整数N是FFT点数的一半,当使用位倒序寻址方式把AR0加到辅助寄存器中时,地址以位倒序方式产生,即进位是从左向右的,而不是从右向左
④ 双数据存储器操作数寻址
用Xmem和Ymem代表这两个数据存储器操作数,Xmem表示读操作数,Ymem在读两个操作数时表示读操作数,而在一个读同时并行一个写的指令表示写操作数
6) 堆栈寻址
共有4条指令使用堆栈寻址方式访问堆栈:
PSHD——把一个数据存储器的值压入堆栈
PSHM——把一个存储器映射寄存器的值压入堆栈
POPD——把一个数据存储器的值弹出堆栈
POPM——把一个储存器映射寄存器的值弹出堆栈
21. 指令系统(P34)
22. 流水线操作,是指在执行多条指令时,将每条指令的预取指、取指、译码、寻址、读取操作数、执行等阶段,相差一个阶段重叠执行,以减少指令执行时间,从而增加处理器的处理能力//P50
23. TMS320C54x采用6级深度的指令流水线作业,它们之间彼此独立,即在任何一个机器周期内,可以有1~6条不同的指令同时工作,但每条指令工作在流水线的不同级上//P51
24. 延迟分支转移的流水线和条件执行指令的流水线(P51~P52)
25. 数字信号处理系统的设计过程(P61)
26. 常用的汇编命令(P68)
27. COFF文件中的段(P79)
1) 3种形式的段:
.text段 (此段通常包含可执行代码)
.data段 (此段通常包含初始化数据)
.bss段 (此段通常为未初始化变量保留存储空间)
2) 段的基本类型:
初始化段
.text段、.data段、.sect汇编命令建立的自定义段均是已初始化段
未初始化段
.bss段、.usect汇编命令建立的自定义段均是未初始化段
28. 如果连接命令文件中没有MEMORY和SECTIONS命令(默认情况),则连接器就从地址0080H开始,一个段接着一个段地进行配置//P84
29. Simulator纯粹以软件来模拟源平台的功能和运行结果(软件仿真);Emulator以软件和硬件来模拟源平台的内部设计、行为和运行结果(硬件支持)//P119
30. 条件算符(P140)
条件分支转移指令或条件调用、条件返回指令都是条件来限制分支的转移、调用和返回操作。条件算符分成两组,每组组内还有分类
选用条件算符时应当注意以下3点:
l 第1组:组内两类条件可以进行与/或运算,但不能在组内同一类中选择两个条件算符与/或。当选择两个条件时,累加器必须是同一个。例如,可以同时选择AGT和AOV,但不能同时选择AGT和BOV
l 第2组:可从组内3类算符中各选一个条件算符与/或,但不能在组内同一类中选两个条件算符与/或。例如,可以同时测试TC、C、和BIO,但不能同时测试NTC和TC
l 组与组之间的条件只能进行或运算
31. 乘加运算(P145)
1) 简单乘加
计算其中, ,
.title “zh1.asm”
.mmregs
STACK .usect “STACK”, 10H
.bss m, 1
.bss x, 1
.bss b, 1
.bss y, 1
.def start
.data
table: .word 3, 15, 20
.text
start: STM #0, SWWSR
STM #STACK+10H, SP
STM #m, AR1
RPT #2
MVPD table, *AR1+
CALL SU
end: B end
SU: LD @m, T
MPY @x, A
ADD @b, 16, A
STH A, @y
RET
.end
2) 乘加小数
计算
.title“zh2.asm”
.mmregs
STACK .usect “STACK”, 10H
.bss a, 4
.bss x, 4
.bss y, 1
.def start
.data
table: .word 1*32768/10
.word 2*32768/10
.word -3*32768/10
.word 4*32768/10
.word 8*32768/10
.word 6*32768/10
.word -4*32768/10
.word -2*32768/10
.text
start: SSBX FRCT
STM #0, SWWSR
STM #STACK+10H, SP
STM #a, AR1
RPT #7
MVPD table, *AR1+
STM #x, AR2
STM #a, AR3
RPTZ A, #3
MAC *AR2+, *AR3+, A
STH A, @y
end: B end
.end
3) 乘加整数
题目同上,其中
.title “zh3.asm”
.mmregs
STACK .usect “STACK”, 10H
.bss a, 4
.bss x, 4
.bss y, 1
.def start
.data
table: .word 1, 2, 3, 4
.word 5, 6, 7, 8
.text
start: STM #0, SWWSR
STM #STACK+10H, SP
STM #a, AR1
RPT #7
MVPD table, *AR1+
STM #x, AR2
STM #a, AR3
RPTZ A, #3
MAC *AR2+, *AR3+, A
STL A, @y
STH A, @y+1
end: B end
.end
32. 重复操作(P148)
对数组x[5]中的每个元素初始化为2,再给每个元素加1
.title “zh4.asm”
.mmregs
STACK .usect “STACK”, 10H
.bss x, 5
.def start
.text
start: STM #0, SWWSR
STM #STACK+10H, SP
STM #x, AR1
LD #2H, A
RPT #4
STL A, *AR1+
LD #1, 16, B
STM #4, BRC
STM #x, AR4
RPTB next-1
ADD *AR4, 16, B, A
STH A, *AR4+
next: LD #0, B
end: B end
.end
33. 长字运算(P156)
长字(32位)指令如下:
DLD Lmem, dst ; dst=Lmem
DST src, Lmem ; Lmem-src
DADD Lmem, src, [, dst] ; dst=src+Lmem
DSUB Lmem, src, [, dst] ; dst=src+Lmem
DRSUB Lmem, src, [, dst] ; dst=Lmem-src
1) 偶地址排列法
.title “zh5.asm”
.mmregs
STACK .usect “STACK”, 10H
.bss a, 2
.bss y, 2.
.def start
.data
table: .word 06CACH, 0BD90H
.text
start: STM #0, SWWSR
STM #STACK+10H, SP
STM #a, AR1
RPT #1
MVPD table, *AR1+
STM #a, AR3
DLD *AR3+, A
end: B end
.end
执行后结果:A=00 6CAC BD90H
(0100H)=6CACH
(0101H)=BD90H
2) 奇地址排列法
.title “zh6.asm”
.mmregs
STACK .usect “STACK”, 10H
.bss a, 2
.bss y, 2.
.def start
.data
table: .word 0BD90H, 06CACH
.text
start: STM #0, SWWSR
STM #STACK+10H, SP
STM #a, AR1
RPT #1
MVPD table, *AR1-
STM #a, AR3
DLD *AR3+, A
end: B end
.end
执行后结果: A=00 6CAC 6CACH
(0100H)=6CACH
(0101H)=BD90H
总结:偶地址排列,高字存放于偶地址,地址加一存放低字。
奇地址排列,高字存放于奇地址,地址减一存放低字。
34. FIR滤波器的实现方法(P192)
双操作数、带移位FIR滤波器实现程序如下:
.title “zh7.asm”
.mmregs
.def start
x .usect “x”, 5
PA0 .set 0
PA1 .set 1
.data
COEF: .word 1*32768/10
.word -4*32768/10
.word 3*32768/10
.word -4*32768/10
.word 1*32768/10
.text
start: SSBX FRCT
STM #x+5, AR1
STM #4, AR0
LD #x+1, DP
PORTR PA1, @x+1
FIR3: RPTZ A, #4
MACD #AR1-, table, A
STH A, *AR1
PORTW *AR1+, PA0
BD FIR3
PORTR PA1, *AR1+0
.end
35. IIR滤波器的DSP实现方法(P202)
.title “zh8.asm”
.mmregs
.def start
x0 .usect “x”, 1
x1 .usect “x”, 1
x2 .usect “x”, 1
B2 .usect “COEF”, 1
B1 .usect “COEF”, 1
B0 .usect “COEF”, 1
A2 .usect “COEF”, 1
A1 .usect “COEF”, 1
PA0 .set 0
PA1 .set 1
.data
table: .word 0
.word 0
.word 1*32768/10
.word 2*32768/10
.word 3*32768/10
.word 5*32768/10
.word -4*32768/10
.text
start: LD #x0, DP
SSBX FRCT
STM #x1, AR1
PRT #1
MVPD #table, *AR1+
STM #B2, AR1
RPT #4
MVPD #table+2, *AR1+
IIR1: PORTR PA1, @x0
LD @x0, 16, A
LD @x1, T
MAC @A1, A
LD @x2, T
MAC @A2, A
LTD @x1
MAC @B1, A
LTD @x0
MAC @B0, A
STH A, @x0
BD IIR1
PORTW @x0, PA0
.end
36. 定标方法(P209)
1) 系数大于等于1时,系数分解成两个小于1的数
2) 对输入数据定标
考虑到滤波运算过程中可能出现大于等于1的输出值,可在输入数据时将其缩小
PORTR 0001H, @Xin
LD @Xin, 16-3, A
将输入数据除以8,将使输出值小于1
37. 定时器(P245)
1) 定时器由主计数器TIM,定时周期寄存器PRD,定时控制寄存器TCR及相应的逻辑电路组成
定时周期=CLKOUT×(PRD+1)×(TDDR+1)
2) PRD是16位的,数据范围是 0~65535,TDDR是TCR的低四位,数据范围是0~15。TCR寄存器的位描述:
第15~10位:高6位置0
第9~6位:与TDDR相同
第5位:TRB=1 定时器PRD和TDDR自动重装
第4位:TSS=1 关定时器;TSS=0,启动定时器
第3~0位:TDDR由定时时长决定,范围是1~15
3) 定时器初始化和开放定时器中断的步骤
STM #0000H , SWWSR ;不插等待周期
STM #0010H , TCR ;TSS=1关定时器
STM #03E7H , PRD ;加载周期寄存器(PRD=999)
STM #01E7H , TCR ;定时器分频系数TDDR初始化(TDDR=7)
;TRB=1,当TIM减到0后, 重新加载PRD
;TSS=1,启动定时器
STM #0008H , IFR ;清除尚未处理完的中断
STM #0008H , IMR ;开放定时器中断
RSBX INTM ;开放中断
38. 中断响应过程(P239)
有问题请@潘雪冰