DSP第三章
第三章 DSP定点运算

数的定标 高级语言 DSP定点算术运算 非线性运算的定点快速实现 小 结
3.1.1 数的定标
在定点DSP芯片中,采用定点数进行数 值运算,其操作数一般采用整型数来表 示。 一个整型数的最大表示范围取决于DSP 芯片所给定的字长,一般为16位或24位。 显然,字长越长,所能表示的数的范围 越大,精度也越高。
虽然有时需要使用混合表示法,但是,更通常 的是全部以Q15格式表示的小数或以Q0格式表 示的整数来工作。 这一点对于主要是乘法和累加的信号处理算法 特别现实,小数乘以小数得小数,整数乘以整 数得整数。 乘积累加时可能会出现溢出现象,在这种情况 下,程序员应当了解数学里面的物理过程以注 意可能的溢出情况。 返回
3.4.2 查表法
在实时DSP应用中实现非线性运算,一般都采取适当 降低运算精度来提高程序的运算速度。查表法是快速 实现非线性运算最常用的方法。 查表法:根据自变量的范围和精度要求事先制作一张 表格,根据输入值确定表的地址,根据地址就可得到 相应的值。 显然输入的范围越大,精度要求越高,则所需的表格 就越大,即存储量也越大。 查表法求值所需的计算就是根据输入值确定表的地址, 因而运算量较小。 查表法比较适合于非线性函数是周期函数或已知非线 性函数输入值范围这两种情况 。
3.3 DSP定点算术运算
定点DSP芯片的数值表示是基于2的补码表示形 式。 每个16位数用1个符号位、i个整数位和15-i个小 数位来表示。 例如数00000010.10100000表示的值为 21 + 2 −1 + 2 −3 =2.625, 这个数可用Q8格式(8个小数位)来表示,它表 示的数值范围为-128~+127.996,一个Q8定点 数的小数精度为1/256=0.004。
数字信号处理DSP第三章3.2 DFT定义

易知,DFT的变换区间长度N不同, 表示对X(ejω)在区 间[0, 2π]上的采样间隔和采样点数不同, 所以DFT 的变换结果也不同。
jIm(z)
−2 WN −1 WN 0 WN k =0 − ( N −2 ) WN
X (ejω)
X (k )
o
Re[z] o π
W
− ( N −3) N
ω
DFT与序列傅里叶变换、Z变换的关系
例1 已知序列x(n)=δ(n),求它的N点DFT。 解
nk 0 X (k ) = ∑ δ (n)WN = WN =1 n=0 N −1
k=0, 1, …, N-1
对序列δ(n),不论对它进行多少点的DFT,所得结果 都是一个离散矩形序列。
本节将根据周期序列和有限长序列之间的关系, 由周 期序列的离散傅里叶级数表示,给出有限长序列的离散 频域表示,即离散傅里叶变换(DFT)。
一、预备知识 1、余数运算表达式 如果n=n1+mN, m为整数;则有
((n))N=n1, 0≤n1≤N-1
运算符(( ))N表示n被N除,商为m,余数为n1。 n1是((n))N的解, 或称作取余数,或说n对N取模值,简 称取模值,n模N,(n mod N) 。
周期延拓
长度为M的有限长序列x(n)的N点DFT,是有限长序
~
x(n)
N
~ x (n)
DFS
DFS[ ~ x (n) ]
~ X (k )
% (k ) R (k ) 取主值 X N
DFT[x(n)]N
注:以上定义中N长度没有限制!
有限长序列x(n)的N点DFT—即DFT正变换公式
X (k ) = DFT[ x(n)]N = ∑ xN (n)W , 0 ≤ k ≤ N − 1
DSP第三章.ppt

二、程序地址的产生
程序地址产生的情况
▲ 顺序操作:程序的地址来源于PC程序计数器(程序地址+1) ▲ 空(哑)周期:程序的地址来源于PAR (程序地址+1) ▲ 从子程序返回:程序的地址来源于栈顶(TOS) ▲ 从表传送或块传送返回:程序的地址来源于转移或调用指
PSC
TDDR
R-0
D15
PSCH
D8 D7
R/W-0
D0
TDDRH
R-0
R/W-0
一、时钟及系统控制
看门狗及其应用
F2812的看门狗与240x的基本相同,当8位的看门狗计数 器计数到最大值时,看门狗模块产生一个输出脉冲(512个振荡 器时钟宽度)。如果不希望产生脉冲信号,用户需要屏蔽计数 器,或用软件周期向看门狗复位控制寄存器写“0x55+0xAA", 该寄存器能够使看门狗计数器清零。
SUBC(条件减)
希望同学们坚信:
数据存储区中建立一个堆栈。
二、程序地址的产生
堆 栈 例 子
二、程序地址的产生
堆栈例子
二、程序地址的产生
微
堆 ▲ 一级深、16位宽,操作不可见,即无指令,只有程序
栈
地址产生逻辑才能够使用微堆栈。
▲ 程序地址产生逻辑在执行BLDD、BLPD、MAC、MACD、 TBLR 和TBLW 这些串(块)操作指令时利用微堆栈保 存返回地址。
WDCHK
R/W-0
R/W-0
D0
WDCNTR
R/W-0
D0
WDKEY
R/W-0
D8
D3 D2
D0
R/W-0WDPS
二、程序地址的产生
DSP第三章1节3部分

为使捕获单元正常工作,应完成以下寄存器配置: (1)初始化捕获FIFO状态寄存器CAPFIFO,将其适当的状态位 清0。 (2)设置时基通用定时器的控制寄存器T2CON或T3CON,同 时确定它的计数模式。 (3)如必要,应设置相关的通用定时器比较寄存器或通用定时 器周期寄存器。 (4)设置捕获控制寄存器CAPCON。
3.1.3 捕获单元 捕获单元是一种输入设备,用于捕获引脚上电平的变化并记录 它发生的时刻。 普通的微处理器能作到这一点,但需要由CPU完成判断和记录 工作。因此它占用CPU的资源。 而DSP的捕获单元与CPU并行地捕获引脚上电平的变化并记录 它发生的时刻,替代了普通CPU的判断和记录功能。 另外,对于两次间隔很短的跳变的捕获,普通的微处理器就显 得力不从心,这对于快速变化的信号检测、测速等就显得非常的不 方便。 哪么对于时间间隔很短的多次跳变的捕获,DSP是否也可以得 心应手? DSP控制器的捕获单元不需要占用CPU的资源,与CPU并行工 作。同时设置了两级深的FIFO(先入先出)堆栈缓冲器,故对于二 次间隔很短的跳变的捕获得心应手。 DSP控制器共有四个捕获单元,结构示意图如图3.19所示:
为了采集到跳变信号,必须保持输入的当前电平两个CPU时钟 周期。 (6)用户指定的边沿检测方式:可以检测CAPx的上升沿、下 去图 降沿或两者都检测。 (7)对应于每一个捕获单元,都有1个可屏蔽的中断标志位。 (8)捕获单元的操作不影响任何定时器的操作或与任何定时器 相关的比较/PWM输出。 (9)捕获单元4中断标志的置位可以编程用于启动ADC。 通用定时器用作捕获单元的时基时,并不影响它原来的功能, 它仍可实现通用定时器的“定时”或“比较/PWM输出”。 捕获控制寄存器CAPCON和捕获FIFO状态寄存器CAPFIFO各位 的组成定义与说明见表3.11~3.13。
数字信号处理基础pptDSP第3章

(5) 循环右移到h((n−m))LRL(m),与x(m)相乘相加得 yc(n)
例3-6 x(n)= {1, 2, 3},0 n 2;h(n)= {1, 2, 2, 1},0n3。
翻褶 翻褶循环右移1位
§3.2.2 有限长复序列共轭的DFT
DFT[ x*( N n)]N X *(k), 0 k N 1
DFT[ x*(n)]N X *( N k), 0 k N 1
证明:
X*(N
k)
N 1
x(n)W
n0
(N N
k
)n
*
N 1
x(n)W
n0
N
kn
n 4 3 2 1 0 1 2 3 4 5
y(n4) 1 4 9 11 8 3
y(n)
1 4 9 11 8 3
yc1(n)
9 7 9 11
3. 循环卷积定理 x(n)长度M,h(n)长度N,L max(M, N) yc(n) = x(n) L h(n),Yc(k) = X(k)H(k) DFT[x1(n)x2(n)]L = X1(k) L X2(k)/L 0nL1,0kL1
N 4,
X (k)4
1 e j2k 1 e jk 2
4, 0,
k0 1k 3
4 (k),
0 k 3
N 8,
X (k)8
1 e jk 1 e jk 4
,
0
k
7
N 16,
X (k )16
1 e jk 1 e jk
DSP第三章

定时器相关的位都被复位为0,因此所有通用定时器的操作
都被禁止,计数方向指示位都置成1。 所有的定时器中断标志位均被复位为0。所有的定时器中断
屏蔽位都被复位为0,因此所有通用定时器的中断都被屏蔽。
所有通用定时器的比较输出都被置为高阻态。
Page 28
比较单元与PWM发生器
事件管理器有3个全比较单元和3个单比较单元。每个单比较 单元对应一根输出引脚CMPy/PWMy(y=7、8、9),
00 仿真挂起时立即停止
01 仿真挂起时当前定时周期结束后停止 10 操作不受仿真挂起的影响
11 操作不受仿真挂起的影响
位13、12、11 六种计数模式选择 001 单增计数模式 011 定向的增/减计数模式 101 连续增/减计数模式
Page 19
000 停止/保持模式 010 连续增计数模式 100 单增减计数模式
Page 24
LDP #00H SPLK #02H IMR 使能内核中断2 SPLK #FFFFH IFR LDP #E8H 清内核中断标志 7400H~747FH
SPLK #80H EVIMRA 定时器1周期中断使能
SPLK #FFFFH EVIFRA 中断标志位清0 SPLK #0042H GPTCON 不启动ADC,T1高有效
Page 14
周期、下溢、上溢中断标志位、中断以及相应的事件产生, 与连续递增计数模式一样。 注意:TMRDIR引脚的输入改变引起计数方向改变要2个 CPU时钟周期。引脚电平状态会在GPTCON的方向指示位 TxSATA中反映出来。 5.单增减模式 由初始值增计数至周期匹配再减计数至0为止,TxCON使
* 16位定时器向上/下计数器TxCNT,可读或写
* 16位定时器比较寄存器(带阴影寄存器、双缓冲)TxCMPR,读或写 * 16位定时器周期寄存器(带阴影寄存器、双缓冲)TxPR,可读或写
西工大DSP第三章

WN = e
W =e
N称为DFT变换区间长度
4 PDF created with pdfFactory Pro trial version
DFT 导出的图形解释
x(n)
~ x (n)
IDFS n
% (n) = x ((n)) N x
一、问题的提出: 有限长序列的傅立叶变换在频域是关于频率的连续函数,为 了适用于计算机的运算,希望将连续的频率函数也能离散化,如 何解决这一问题呢?
二、如何解决问题: 引出了 离散傅立叶变换
回忆傅里叶变换几种形式
2 PDF created with pdfFactory Pro trial version
1
x ((1 - m)) R ( m)
2 N N
m
0 1 2 3 4 5 6 7
2 N
x (( 2 - m)) R ( m )
N
m
两个长度为N的序列的循环卷积长度仍为N
4 2
0 1 2 3 4 5 6 7
x (n )
n
0 1 2 3 4 5 6 7
3、循环卷积定理 有限长序列 x1(n) 和 x2(n),长度分别为N1和N2, x1(n) 和 x2(n)的N 点DFT分别为 X1(k) 和 X2(k) , N=max[N1,N2]
1 PDF created with pdfFactory Pro trial version
§3.0 引言
DFT使信号在频域离散化,从而使计算机能在频 域进行信号处理,特别是DFT有多种快速算法可使信 号处理的速度大大提高。因而离散傅立叶变换在各种 数字信号处理的算法中起着核心作用。
3.2.4
DSP第三章1节1部分

GPTx 控制寄存器 T CON
与通用定时器相关的引脚(x=1,2,3,下同)
1、TMRDIR:用于确定通用定时器计数增/减方式,高电平为 去图 增计数,低电平为减计数。
2、TMRCLK:外部时钟引脚,最大频率是CPU时钟频率的1/4。 3、TxPWM/TxCMP:通用定时器输出引脚。平时高阻,在通 用定时器的比较输出操作被开启时该引脚起作用。 4、ADC—Start:它是A/D转换的启动信号。当定时时间到时自 动发出。
TMRCLK引脚提供外部时钟输入。 EV模块所有输入均与内部CPU时钟同步。 应当注意,在被EV确认之前,当前转换必须保持,直到遇到 CPU时钟的两个上升沿。即所有要求输入的信号跳变至少应保持2 个CPU时钟周期。 因此,为了可靠,我们推荐任何转换都应保持至少两个CPU时 钟周期。 与事件管理模块有关的引脚说明如表3.1所示。
周期寄存器 TxPR (双缓冲)
周期寄存器 T1PR (双缓冲)
MUX
GPTCON 通用定时器 控制寄存器
比较寄存器 TxCMP (双缓冲)
比较逻辑
对称/非对称 波形发生器
TxPWM
输出逻辑
TxCMP
中断标志
TxCNT 通用定时计数器
ADC启动 内部CPU时钟 控制逻辑 TMRCLK TMRDIR 图3.2 通用定时器的结构示意图
在通用定时器的比较输出操作被开启时,还将使引脚 TxPWM/TXCMP产生跳变。
定时周期寄存器 TxPR 与定时比较寄存器 TxCMPR 类似,它存 放周期值,也是双缓冲结构,可在任何时候对它的缓冲寄存器进行 读写。 定时周期缓冲寄存器的内容装载到它的工作寄存器,只能在计 去图 数寄存器的值为0时进行。
去图2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 DSP芯片开发工具的 特点及应用§3.1 DSP开发环境 §3.2 通用目标文件格式COFF §3.3 编程工具特点及应用 §3.4 调试工具的特点及应用XCHL《DSP原理及应用》讲稿1宏源程序 文件C语音 源文件 汇编语音 源文件§3.1 DSP 开发环境汇 编 语 音 开 发 流 程归档器 宏文件库C编译器 汇编语音 源文件 建库应 用程序 实时 支持库 Computer 调试工具汇编器归档器COFF通用 目标文件目标 文件库 十六进制 转换程序 EPROM中 的十六进制 代码程序 绝对 列表器链接器 可执行的单个 COFF文件交叉引用 TMS320C2XX 芯片 列表器 返回本章首页2XCHL《DSP原理及应用》讲稿§3.2 通用目标文件格式COFFCOFF文件格式是基于段(section)的概念建立的,即程序被分 解成各种段的组合体:如文本段、数据段等。
这种文件格式便于 实现模块化程序设计,即程序员设计时只需基于代码段和数据段 等概念进行,不需关注每条命令或每个数据的具体目标地址。
至 于它们的最终将处于存储器的哪个位置,将由链接器来安排。
• • • • • •段的概念及分类 段的创立 段的组合及其在存储器中的映象 程序重定位 COFF文件内的符号 COFF文件的装载•《DSP原理及应用》讲稿返回本章首页XCHL3段的概念及分类• 段(section)是目标文件的最小单位。
即指最终在存储器中占据连续空间的一段代码或数据。
• COFF文件中可包含如下几种段:– 文本段( .text section):通常包含可执行代码 – 数据段 (.data setion):通常包含已初始化数据 – 变量段 (.bss section):通常用来为未初始化变量保留存储 空间 – 命名段(.named section):是用户自定义段 前三种是DSP系统的基本缺省段。
• 分类– 已初始化段(initialized section):如.text 和. data段 – 未初始化段(unintialized section):存储器中保留的用来存 放未初始化数据或变量的空间 – 返回本节首页XCHL 《DSP原理及应用》讲稿 4段的创立• 汇编器有六个伪指令来创立段。
– .bss – .usect 创立未初始化段 – .text – .data 创立初始化段 – .sect – .asect 【注】如用户未使用任何伪指令,则汇编器将把所以 内容汇编入.text段。
• 未初始化段的创立 • 初始化段的创立 • 例题•XCHL 《DSP原理及应用》讲稿返回本节首页5未初始化段的创立 • 未初始化短的作用是在存储器(一般是RAM型)中保 留部分空间,以便程序运行时创建和存储变量。
• 一般用两条伪指令.bss和.usect创立未初始化段。
• .bss:– 功能:在.bss型段内保留空间 – 语法格式: .bss 符号,字数 – 符号指向.bss命令保留的第一个字,通常用第一个未初始化变 量的变量名来表示。
字数指明保留空间的大小。
– 例:.bss varl, 1• .usect:– 语法格式:符号 .usect “段名”,字数 – 功能:在指定段内为由符号指向的变量表保留一定字数的空 间,该段必须是用户自定义的。
– 例:inbuf .usect newvars, 7 – 返回次节首页XCHL 《DSP原理及应用》讲稿 6初始化段的创立 • 初始化段的作用是包含可执行代码或初始化数据。
• 有四条伪指令可创立初始化段:.text,.data,.sect 和.asect。
• .text:创建存放可执行代码的.text段例: add: aloop: .text LAC 0FH SBLK #1 BLEZ aloop SACL varl , 0 .data .word 011h, 022h, 033h .sect “section name” 返回次节首页7• .data:创建存放已初始化数据的.data段例: coeff 例: 例:• .sect:创建具可重定位地址的命名段 • .asect:创建具绝对地址的命名段XCHL.asect “section name”, address 《DSP原理及应用》讲稿例题行号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17XCHLSPC 0000 0000 0001 0002 0000 0001 0003 0000 0000 0001 0002 0003 0004 0005 0004 0004 0005目标代码 0011 0022 0033 coeff源程序 .data .word 011h, 022h, 033h0123 200f d003 0001 f280 0001 6000 00aa 00bbptr add: aloop:.bss varl, 1 .bss buffer, 10 .word 0123h .text LAC 0Fh SBLK #1 BLEZ aloop SACL varl, 0 .data .word 0AAh, 0BBh8ivals《DSP原理及应用》讲稿行号 18 19 20 21SPC 0000 0001 0006 0006目标代码 var2 inbuf ccff源程序 .usect newvars, 1 .usect newvars, 7 .text ADD #0FFh• 解释 – 关于段程序计数器SPC汇编器在对源程序分段汇编时,为每种类型的段分配一个 SPC,用来指示各段的内容顺序。
SPC总是指向本段的当前 值。
– 伪指令效用期• 长效应伪指令:如.text,.data,.sect和.asect,汇编器遇到 该类伪指令时,则停止对当前段的汇编,开始对该指令指 定段的汇编,直至遇到另一个长效应伪指令为止。
• 短效应伪指令:如.bss和.usect,汇编器遇到该类伪指令 时,则暂停对当前段的汇编,开始对该指令指定段的汇 编,然后继续进行对上一个长效应伪指令的汇编。
返回次节首页XCHL 《DSP原理及应用》讲稿 9段的组合及其在存储器中的映象汇编器将源文件的段类别识别出来,由链接器将各种段组合起 来,形成可执行的COFF输出模块。
同时,链接器还将为各输出段 选择存储器地址。
• 链接器用两条伪指令完成上述功能: – MEMORY: 定义目标系统的存储器映象,可以给 它们命名,规定起始地址和长度 – SECTIONS:指定怎样组合各输入段以及将各输出 段存放在存储器的哪个位置 • 链接器定位段的两种方法 – 缺省的定位算法 – 用MEMORY和SECTIONS 命令分配存储器返回本节首页XCHL 《DSP原理及应用》讲稿 10缺省的定位算法返回本次节首页•存储器分配原则–读目标文件以确定正确的目标处理器,即确定当前处理器的具体型号–根据目标处理器确定存储器的可用情况,以TMS320C25为例:•程序存储器:外部1000h~0FEFFh•数据存储器:片内0300h~03FFh片外0400h~0FEFFh–将.text段定位到字1000H开始的程序存储器中;–将.data段定位到紧接着.text段后的程序存储器中;–根据遇到的已初始化命名段次序先后将它们依次定位在.data段之后;–将.bss段定位到自3000h开始的数据存储器中;–将未初始化命名段依次定位到.bss段之后的数据存储器中。
XCHL《DSP原理及应用》讲稿11用MEMORY和SECTIONS 命令分配存储器•例:MEMORY{PAGE 0: VECS:origin=0h, length=020hCODE: origin=020h,length=0F90hPAGE 1: RAMB2:origin=060h, length=020hRAMB0:origin=200h, length=100hRAMB1:origin=300h, length=100h}SECTIONS{vectors:>0000h.text:>CODE.data:>RAMB2.bss:>RAMB0newvars:>RAMB1}XCHL《DSP原理及应用》讲稿13程序重定位(Relocation)•概念–汇编器在汇编源程序时,给各个段分配一个SPC,且每个段的SPC 均从0开始。
此时,源程序中的标号(如前例中的aloop)值取该段在本语句的SPC值(aloop=0001H),即相当该段起始位置的偏移量。
链接器在给各个段分配存储器空间的时候,不能保证每个段都从0000H单元开始,故源程序中的标号需随各段在存储器中的具体位置重新赋值,此即重定位。
•实现方法重定位的工作通常又汇编器和链接器共同完成。
–汇编器为段内所以需重定位的标号创建一个重定位入口表,表中提供各个符号的相应重定位入口信息(如其定义行的SPC值,重定位地址的计算方法等)。
此表在汇编结束各个段的COFF中提供。
–链接器按如下步骤完成重定位:•把段定位到存储器中以确定各段的起始位置;•计算各个需重定位符号在存储器中的具体位置;•修改引用符号处的符号值以便引用。
XCHL《DSP原理及应用》讲稿15•运行时的重定位返回本节首页–有时希望程序目标码存储和运行使用不同的存储器空间,如保存在ROM中,运行却希望在SRAM中完成,此时需对程序进行重定位。
–运行时的重定位也是由链接器完成。
即使用SECTIONS命令对段进行二次分配。
如:.text : load=CODE run=RAMB0其中,load和run分别是用于装载地址和运行地址的关键字。
•举例SPC目标代码重定位后目标码源程序.ref X 0000 0200h.text0000FF80FF80 B X0001000001000002D001D001LALK Y0003000402040004CEIF CEIF Y:IDLE 【注释】.ref X表明标号X是在.text段外定义的标号,汇编后其值取0000。
XCHL《DSP原理及应用》讲稿16COFF文件内的符号由汇编器和链接器创建的COFF文件中包含一个符号表,专门存储程序中所用到的符号信息。
•内部符号和外部符号–内部符号:本段内定义,本段内使用。
重定位由链接器借助SPC完成,不列入符号表中。
–外部符号:在一个模块中定义,在另一个模块中使用,汇编时需列入符号表,以便帮助链接器重定位该符号。
•外部符号的声明–.global:全局符号,所有模块都可使用,可能时参考符号和定义符号。
–.ref:参考符号,在其它模块中定义,在本模块中只引用。