定点DSP的准确计时

[复制链接]
1443|21
手机看帖
扫描二维码
随时随地手机跟帖
Plantt|  楼主 | 2018-7-16 12:03 | 显示全部楼层 |阅读模式
定点DSP的准确计时

数字信号处理(DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机技术和信息技术的飞速发展,数字信号处理技术应运而生,并得到迅速的发展。在过去的二十多年里,DSP已经在通信等领域得到极为广泛的应用,特别是在一些测量控制领域?熏应用更是越来越广泛。本文拟采用定点DSP——TMS320F206来测量一些物理量,如测交流信号的频率、相位,但这些物理量的测量都离不开信号时间的测量,所以采用定点DSP准确地测量时间直接关系到这些物理量测量是否精确,而且用定点DSP来准确定时并不是件容易的事。

1 TMS320F206的结构特点

TMS320F206采用先进的哈佛结构,它不同于传统的冯•诺依曼(Von Neuman)结构的并行体系结构,其主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。此外还具有如下特点:

(1)32K×16字的FLASH EEPROM 大大降低了开发成本。

(2)采用100线TQFP的封装技术。

(3)64K字的程序存储空间、64K字的数据存储空间和64K字的I/O空间通过三条并行总线(PBA、DRAB、DWAB)独立操作。所以可以同时访问程序空间和数据空间;在一个指定机器周期内,中央算术逻辑单元可执行多达三次的并行存储器操作。

(4)片上4.5K的RAM 使得芯片可以实现快速的DSP计算,并使大部分运算能够在一个指令周期内完成。

(5)具有丰富的指令集和灵活的寻址方式。

(6)有四条流水线操作和九级中断,并且用户可以屏蔽大多数中断,且可通过软件方式灵活控制。

2 定点DSP的定时器

2.1 DSP定时器定时原理

计数器每次减到0时,就在下一CLKOUT1周期产生借位(Borrow),计数器就用各自相应的周期寄存器内容重新加载。当TIM减到0时,或者在定时器控制寄存器(TCR)中重新加载位(TRB)写入1,则PRD(定时器周期寄存器)加载进TIM;同样,若PSC(预分频计数器)减到0,或者在TRB写入1,则TDDR(定时器除数寄存器)的值加载进PSC。当TIM减到0时,它便产生一个借位脉冲,持续时间等于CLKOUT1的周期(tc(c)),该脉冲发送到①外部定时器输出引脚(TOUT);②作为定时器中断信号(TINT)。

定时器的功能框图如图1所示。

201009181642139.gif


2.2 DSP定时器的寄存器

4位的TDDR和4位的PSC包括在TCR中。而TIM和PRD是16位寄存器。可以通过读TCR、TIM、RD得到该定时器和它的计数器的当前状态。

需要注意的是读TIM可获得定时器的当前值,读TCR可获得PSC的值。由于读TIM和TCR需要两条指令,因而PSC在两次读之间可能有减操作,使读数不精确。如果要求有精确的定时,可以在读此两值之前停止定时器(设置TCR的TSS位为1,就停止定时器;清TSS为0,就重新启动定时器)。

定时器控制寄存器的格式如下:

201009181642140.gif

3 定点DSP准确计算时间

定时器时间的准确计算对高精度地测量一些物理量是非常重要的。当需要定时器计算的时间比较长时,也就是即使向PRD中置FFFFh时,定时器计数还不够,这时就需要利用定时器自身的中断,即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。

4 DSP程序实现

splk #0412h,64h

out 64h,0fff8h ;停止DSP定时器

in 65h,tim ;读tim寄存器的数值

in 67h,tcr ;计算tcr中psc的值

lacl 67h

and #03c0h ;与03c0h获得psc的值

sacl 67h ;左移10位

lacc 67h,10

sach 67h

lacl #9

sub 67h

sacl 67h ;存psc中剩下的值(即使用了的)

lacl #07cfh

sub 65h

sacl 68h ;存prd-tim的值

lt 68h

mpy #10 ;TDDR+1

pac

sacl 68h

lacl 68h

add 67h

sacl 68h

lt 68h ;*0.1

lar ar1;#temptddr ;temptddr=0.1

mar *,ar1

mpy *

pac

add #1,14

sach 68h,1

lacl 68h

sfr

sacl 68h ;存定时器最后一次的时间单位为μs

lt 69h

lar ar2;#temptddr1 ;temptddr1=定时器的周期

mar *,ar2

mpy *

pac

add 68h ;加定时器最后一次的时间

sacl 68h ;存定时器总的所耗时间(占时间的多数)

lt 69h

lar ar2,#temptddr2 ;temptddr2=0.5*32767

mar *,ar2

mpy * ;计算定时器中断服务程序执行时间

pac

add #1,14

sach 67h,1

lacl 68h

add 67h ;加定时器中断服务程序执行时间

sacl 68h ;存总的时间


相关帖子

vivilzb1985| | 2018-7-16 13:16 | 显示全部楼层
冯•诺依曼(Von Neuman)结构的并行体系结构,其主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址,独立访问。

使用特权

评论回复
quickman| | 2018-7-16 22:21 | 显示全部楼层

使用特权

评论回复
jstgotodo| | 2018-7-16 22:21 | 显示全部楼层
定时器最简单。

使用特权

评论回复
iamaiqiyi| | 2018-7-16 22:21 | 显示全部楼层
考虑硬件了吗

使用特权

评论回复
dzfansman| | 2018-7-16 22:22 | 显示全部楼层
这个以前在单片机里面使用过。

使用特权

评论回复
sanxingnote7| | 2018-7-16 22:22 | 显示全部楼层
怎么使用的是汇编语言呢

使用特权

评论回复
backlugin| | 2018-7-16 22:22 | 显示全部楼层
DSP定时器的计时程序

使用特权

评论回复
sdCAD| | 2018-7-16 22:23 | 显示全部楼层
用片上的硬件定时器,最准确不过了

使用特权

评论回复
fengm| | 2018-7-16 22:23 | 显示全部楼层
用CLOCK()准确吗

使用特权

评论回复
jkl21| | 2018-7-16 22:23 | 显示全部楼层
使用delay函数不行吗?

使用特权

评论回复
maqianqu| | 2018-7-16 22:24 | 显示全部楼层
这个跟硬件也有关系吧。

使用特权

评论回复
fengm| | 2018-7-16 22:24 | 显示全部楼层
其他的功能怎么实现呢

使用特权

评论回复
quickman| | 2018-7-16 22:24 | 显示全部楼层
精度怎么样呢?

使用特权

评论回复
sdCAD| | 2018-7-16 22:24 | 显示全部楼层
设置方法也很简单

使用特权

评论回复
jstgotodo| | 2018-7-16 22:24 | 显示全部楼层
是不是定时器处理终端太多了呢?

使用特权

评论回复
backlugin| | 2018-7-16 22:24 | 显示全部楼层
可以精确计算

使用特权

评论回复
iamaiqiyi| | 2018-7-16 22:24 | 显示全部楼层
跟硬件关系很大吗?

使用特权

评论回复
sanxingnote7| | 2018-7-16 22:24 | 显示全部楼层
有C语言的代码吗

使用特权

评论回复
dzfansman| | 2018-7-16 22:25 | 显示全部楼层
定时器自由太浪费了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

637

主题

901

帖子

4

粉丝