定点DSP来准确定时.docx
《定点DSP来准确定时.docx》由会员分享,可在线阅读,更多相关《定点DSP来准确定时.docx(16页珍藏版)》请在冰豆网上搜索。
定点DSP来准确定时
目录
摘要……………………………………………………………………………………2
引言……………………………………………………………………………………2
DSP技术概况…………………………………………………………………………2
一.TMS320F206的结构特点…………………………………………………………3
二.设计原理…………………………………………………………………………3
1.通用定时器介绍及其控制方法……………………………………………………3
2.中断响应过程………………………………………………………………………3
3.中断类别……………………………………………………………………………4
4.中断的优先级………………………………………………………………………4
5TMS320F206的中断………………………………………………………………4
6.设计程序流程图……………………………………………………………………5
三.定点DSP的定时器……………………………………………………………6
1.DSP定时器定时原理…………………………………………………………6
2.DSP定时器的寄存器…………………………………………………………7
3.定点DSP准确计算时间………………………………………………………7
4.DSP程序实现…………………………………………………………………8
定点DSP的准确计时
摘要:
以定点DSP为例,阐述DSP芯片在实时控制领域中如何高精度地计算时间,为准确测量一些物理量打下坚实的基础,具有较高的参考价值。
关键词:
DSP准确计时
引言:
数字信号处理(DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机技术和信息技术的飞速发展,数字信号处理技术应运而生,并得到迅速的发展。
在过去的二十多年里,DSP已经在通信等领域得到极为广泛的应用,特别是在一些测量控制领域?
熏应用更是越来越广泛。
本文拟采用定点DSP——TMS320F206来测量一些物理量,如测交流信号的频率、相位,但这些物理量的测量都离不开信号时间的测量,所以采用定点DSP准确地测量时间直接关系到这些物理量测量是否精确,而且用定点DSP来准确定时并不是件容易的事。
DSP技术概况:
数字信号处理(DigitalSignalProcessing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛
DSP技术图解
的应用。
数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。
数字信号处理是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。
数字信号处理在理论上的发展推动了数字信号处理应用的发展。
反过来,数字信号处理的应用又促进了数字信号处理理论的提高。
而数字信号处理的实现则是理论和应用之间的桥梁。
数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。
例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。
近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。
可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。
世界上第一个单片DSP芯片应当是1978年AMI公司发布的S2811,1979年美国Intel公司发布的商用可编程器件2920是DSP芯片的一个主要里程碑。
这两种芯片内部都没有现代DSP芯片所必须有的单周期乘法器。
1980年,日本NEC公司推出的μPD7720是第一个具有乘法器的商用DSP芯片。
在这之后,最成功的DSP芯片当数美国德州仪器公司(TexasInstruments,简称TI)的一系列产品。
TI公司在1982年成功推出其第一代DSP芯片TMS32010及其系列产品TMS32011、TMS320C10/C14/C15/C16/C17等,之后相继推出了第二代DSP芯片TMS32020、TMS320C25/C26/C28,第三代DSP芯片TMS320C30/C31/C32,第四代DSP芯片TMS320C40/C44,第五代DSP芯片TMS320C5X/C54X,第二代DSP芯片的改进型TMS320C2XX,集多片DSP芯片于一体的高性能DSP芯片TMS320C8X以及目前速度最快的第六代DSP芯片TMS320C62X/C67X等。
TI将常用的DSP芯片归纳为三大系列,即:
TMS320C2000系列(包括TMS320C2X/C2XX)、TMS320C5000系列(包括TMS320C5X/C54X/C55X)、TMS320C6000系列(TMS320C62X/C67X)。
如今,TI公司的一系列DSP产品已经成为当今世界上最有影响的DSP芯片。
TI公司也成为世界上最大的DSP芯片供应商,其DSP市场份额占全世界份额近50%。
一.TMS320F206的结构特点
TMS320F206采用先进的哈佛结构,它不同于传统的冯·诺依曼(VonNeuman)结构的并行体系结构,其主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。
此外还具有如下特点:
(1)32K×16字的FLASHEEPROM大大降低了开发成本。
(2)采用100线TQFP的封装技术。
(3)64K字的程序存储空间、64K字的数据存储空间和64K字的I/O空间通过三条并行总线(PBA、DRAB、DWAB)独立操作。
所以可以同时访问程序空间和数据空间;在一个指定机器周期内,中央算术逻辑单元可执行多达三次的并行存储器操作。
(4)片上4.5K的RAM使得芯片可以实现快速的DSP计算,并使大部分运算能够在一个指令周期内完成。
(5)具有丰富的指令集和灵活的寻址方式。
(6)有四条流水线操作和九级中断,并且用户可以屏蔽大多数中断,且可通过软件方式灵活控制。
二.设计原理
1.通用定时器介绍及其控制方法TMS320F206内部有三个32位通用定时器(TIMER0/1/2),定时器1和2被保留给实时操作系统(DSPBIOS)用,只有定时器0可以提供给用户使用。
2.中断响应过程
(1)接受中断请求。
必须由软件中断(从程序代码)或硬件中断(从一个引脚或一个基于芯片的设备)提出请求去暂停当前主程序的执行。
(2)响应中断。
必须能够响应中断请求。
如果中断是可屏蔽的,则必须满足一定的条件,按照一定的顺序去执行。
而对于非可屏蔽中断和软件中断,会立即作出响应。
(3)准备执行中断服务程序并保存寄存器的值。
(4)执行中断服务子程序。
调用相应得中断服务程序ISR,进入预先规定的向量地址,并且执行已写好的ISR。
3.中断类别
可屏蔽中断:
这些中断可以用软件加以屏蔽或解除屏蔽。
不可屏蔽中断:
这些中断不能够被屏蔽,将立即响应该类中断并转入相应的子程序去执行。
所有软件调用的中断都属于该类中断。
4.中断的优先级
如果多个中断被同时激发,将按照他们的中断优先级来提供服务。
中断优先级是芯片内部已定义好的,不可修改。
5TMS320F206的中断
在TMS320F206的程序空间中,中断向量占据了00~3fh的位置,并且中断的优先级也是固定的,所以在编程开发时先要编好一个中断向量表,对于没有用到的中断也应该编上,并让它返回到一个空位置,以免发生意外情况。
TMS320F206的中断有许多特殊的地方,如HOLD和INT1共用一个中断向量,INT2与INT3也共用一个中断向量。
如果在实际应用中用到的中断比较多时,那么控制中断就是一件比较难的事,此时就要对它的三个中断寄存器灵活运用。
下面就来介绍这三个寄存器。
(1)16位的中断标志寄存器(IFR),地址为0006h,各位情况如图1所示。
当有一个可屏蔽中断到达CPU时,IFR的相应标志位就置1,这表明相应中断正在被挂起或正在等待响应。
将1写入到相应的标志位,可清除相应的位并清除其中断请求。
在图1中,0表示一般情况下读的数为0,R表示读,W1C表示写1时把这位清为0。
-0表示复位后这位为0。
(2)16位的中断屏蔽寄存器(IMR),地址为0004h,各位情况如图2所示。
它用来屏蔽外部和内部硬件中断(NMI和RS除外)。
当要屏蔽某硬件中断时,就把相应位清0;当要开放某硬件中断时,就把相应位置1,并且它的每一位不受硬件复位的影响。
在图2中,0表示一般情况下读的数为0,R表示读,W表示写,-0表示复位后这位为0。
2位是定时器中断,该位为1表示开放定时器中断。
(3)16位的中断控制寄存器(ICR),地址为0FFECh,各位情况如图3所示。
主要用来控制HOLD/INT1和INT2/INT3。
在图3中,0位为0时表示屏蔽中断2(INT2),0位为1时表示开放中断2;1位为0时表示屏蔽中断3(INT3),1位为1时表示开放中断3;2、3位分别为INT2、INT3的标志位,当其为1时表示对应的中断有中断请求;4位为1时表示单边沿触发模式,INT1引脚下降沿到来时,向CPU发出中断请求,用于INT1中断。
4位为0时表示双边沿触发模式,这种模式适用于HOLD操
6.设计程序流程图(如下图4所示):
图4程序流程
三.定点DSP的定时器
1.DSP定时器定时原理
(1)计数器每次减到0时,就在下一CLKOUT1周期产生借位(Borrow),计数器就用各自相应的周期寄存器内容重新加载。
当TIM减到0时,或者在定时器控制寄存器(TCR)中重新加载位(TRB)写入1,则PRD(定时器周期寄存器)加载进TIM;同样,若PSC(预分频计数器)减到0,或者在TRB写入1,则TDDR(定时器除数寄存器)的值加载进PSC。
当TIM减到0时,它便产生一个借位脉冲,持续时间等于CLKOUT1的周期(tc(c)),该脉冲发送到①外部定时器输出引脚(TOUT);②作为定时器中断信号(TINT)。
定时器的功能框图如图5所示。
(2)发光二极管显示阵列的显示是由扩展端口控制,扩展在IO接口的两个寄存器CTRLA提供
具体控制。
原理图如下:
(3)显示原理:
DSP须将显示的图形按列的顺序存储起来(8×8点阵,8个字节,高位在下方,低位在上方),然后定时刷新控制显示。
具体方法是,将以下控制字按先后顺序、每两个为一组发送到
端口CTRLA,发送完毕后,隔不太长的时间(以人眼观察不闪烁的时间间隔)再发送一遍。
由于位值为“0”时点亮,所以需要将显示的数据取反。
0x01,第8列数据取反,0x02,第7列数据取反,
0x04,第6列数据取反,0x08,第5列数据取反,
0x10,第4列数据取反,0x20,第3列数据取反,
0x40,第2列数据取反,0x80,第1列数据取反
2DSP定时器的寄存器
4位的TDDR和4位的PSC包括在TCR中。
而TIM和PPD是16位寄存器。
可以通过读TCR、TIM、PRD得到该定时器和它的计数器的当前状态。
需要注意的是读TIM可获得定时器的当前值,读TCR可获得PSC的值。
由于读TIM和TCR需要两条指令,因而PSC在两次读之间可能有减操作,使读数不精确。
如果要求有精确的定时,可以在读此两值之前停止定时器(设置TCR的TSS位为1,就停止定时器;清TSS为0,就重新启动定时器)。
定时器控制寄存器的格式如下:
3定点DSP准确计算时间
定时器时间的准确计算对高精度地测量一些物理量是非常重要的。
当需要定时器计算的时间比较长时,也就是即使向PDR中置FFFFhh时,定时器计数还不够,这时就需要利用定时器自身的中断,即TOUT每产生一个脉冲就进入定时器中断服务子程序,利用进入的次数来达到计时的目的。
如果假设定时器的周期为0.001s(即PRD=1999,TDDR=9),在定时器中断服务子程序中设一个计数器,每进入一次加一个1,再把定时器周期乘以计数器计数就得出定时器的时间。
但这种计算是粗糙的,不精确,达不到高精度要求。
为此需要补充两点:
(1)当停止定时器时,定时器计数寄存器还有剩余值,必须计算这部分的时间。
方法是先停止定时器,再读TIM的值,然后读TCR的值,通过运算获取PSC的值。
再按公式(1)计算定时器在最后一次所开销的时间。
定时器最后一次开销时间为:
T=[(TDDR+1)×(PRD-TIM)+TDDR-PSC]/20M (1)
式中,20M为本文采用的晶振频率。
(2)进入定时器中断服务子程序,程序执行本身要花费一定的时间;而进入中断服务子程序时,定时器就自动停止,那么所计算的时间自然就少了。
TMS320F206每个指令周期的执行时间是50ns,通过计算中断服务子程序的指令周期数和进入中断的次数可以计算出这部分的时间。
把这三部分时间加起来就得到准确的定时器时间,有了准确的时间,物理量的测量自然就准,精度就高。
结果表明,通过这样准确计时,使得频率和相位的测量精度在万分之二以内。
如果测量的是一个标准的50Hz频率,那么测量结果的范围在50~50.001Hz。
4DSP程序实现
.title"ex7"
.global_c_int00
.mmregs
PERSEC.set60h
SEC.set61h
MIN.set62h
STATUS.set63h
TMP0.set64h
TMP1.set65h
TMP.set66h
D_LED.set0b000h
;D_LED0.set01h
;D_LED1.set02h
;D_LED2.set03h
;D_LED3.set04h
;D_LED4.set05h
;D_LED5.set06h
D_LED0.set06h
D_LED1.set05h
D_LED2.set04h
D_LED3.set03h
D_LED4.set02h
D_LED5.set01h
LED_DISP.macrohexdata,portaddr
LDhexdata,B
ST#0Ah,TMP0
RPT#15
SUBCTMP0,B
STHB,TMP0;存放BCD码个位
STLB,TMP1;存放BCD码十位
ST#2000h,AR0
LDTMP0,B
ADDAR0,B
STLB,AR0
NOP
NOP
LD*AR0,A
OR#portaddr+1,A;计算位码
PORTWAL,D_LED
rpt#30000
nop
nop
ST#2000h,AR0
LDTMP1,B
ADDAR0,B
STLB,AR0
NOP
NOP
LD*AR0,A
OR#portaddr,A;计算位码
PORTWAL,D_LED
rpt#30000
nop
nop
.endm
;段码
.data
.word3F00h,0600h,5B00h,4f00h,6600h,6d00h,7d00h,0700h,7f00h,6f00h
.sect".vectors"
rst:
B_c_int00
NOP
NOP
.space15*4*16
int0:
Bkeydown
NOP
NOP
.space2*4*16
tint:
Btimeout
NOP
NOP
.space12*4*16
.text
_c_int00
LD#0h,DP
STM#3000h,SP
SSBXINTM
RSBXSXM
STM#07FFFh,SWWSR
stm#0001h,2Bh
ST#0h,CLKMD
tst:
BITFCLKMD,#1h
BCtst,TC
ST#1087h,CLKMD
BITFCLKMD,#1h
RPT#0FFh
NOP
ORM#0010h,TCR
ST#19999,PRD
ORM#0009h,TCR
ORM#0020h,TCR
ST#0FFFFh,IFR
ORM#0008h,IMR
RSBXINTM
ST#0,PERSEC
ST#0,SEC
ST#0,MIN
ST#1,STATUS
LED_DISPPERSEC,D_LED1
LED_DISPMIN,D_LED5
LED_DISPSEC,D_LED3
ANDM#0FFEFh,TCR
suspnop
nop
nop
Bsusp
timeoutADDM#1,PERSEC
LD#100,A
SUBPERSEC,A
BCsecout,ALEQ
Bexit
secoutST#0,PERSEC
ADDM#1,SEC
LD#60,A
SUBSEC,A
BCminout,ALEQ
Bexit
minoutST#0,SEC
ADDM#1,MIN
LD#100,A
SUBMIN,A
BCoverflow,ALEQ
Bexit
overflow
ST#0,MIN
ORM#0030h,TCR;StopandReloadTimer
ST#0,STATUS;Setstopfalg
exitLED_DISPMIN,D_LED5
LED_DISPSEC,D_LED3
LED_DISPPERSEC,D_LED1
RETE
keydown
ST0ffffh,IFR
ORM#0030h,TCR
BITFSTATUS,#1h
BCrestart,NTC
RETE
restartST#0,PERSEC
ST#0,SEC
ST#0,MIN
LED_DISPPERSEC,D_LED1;刷新1/100秒表
LED_DISPSEC,D_LED3;刷新秒表
LED_DISPMIN,D_LED5;刷新分钟
ANDM#0FFEFh,TCR
RETE
.end