实验三用定时器实现数字振荡器_第1页
实验三用定时器实现数字振荡器_第2页
实验三用定时器实现数字振荡器_第3页
实验三用定时器实现数字振荡器_第4页
实验三用定时器实现数字振荡器_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三用定时器实现数字振荡器

1、实验目的和要求

在数字信号处理中,正弦/余弦信号是最常见的信号之一。为了产生这些信号,通常的方法是

讲某个频率的正弦/余弦值余弦计算出来后制成一个表,DSP工作时仅作查表运算即可。在本实

验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。根

本思路是:利用定时器产生了一个2kHz的正弦信号,定时器被设置成每25uS产生一次中断,

(等效于采样速率未40k)利用该中断,在该中断效劳程序中用叠代算法计算出一个SNT值,

并利用CCS的图形显示功能杳看波形。

本实验除了学习数字振荡器的DSP实现原理外,同时还学习C54X定时器使用以及中断效

劳程序编写。另外,在本实验中我们将使用汇编语言和C语言分别完成源程序的编写。

2、实验原理

(1)数字振荡器原理

设冲击响应鼓励下,一个系统的传递函数为正弦序列sinkwT,其z变换为

其中,A=2coswT,B=-l,C=sinwTo设初始条件为0,求出上式的反Z变换得:

y[k]=Ay[k-l]+By[k-2]+Cx[k-1]

这是个二阶差分方程,其单位冲击响应即为sinkwT。利用单位冲击函数x[kT]的性质,即仅当

k=l时,x[k-l]=L代入上式得:

k=0y[0]=Ay[-1]+By[-2]+0=0

k=ly[U=Ay[0]4-By[-2]+c=c

k=2y[2]=Ay[1]+By[0]+0=Ay[1]

k=3y[3]=Ay[2]+By[l]

k=ny[n]=Ay[n-1]+By[n-2]

在k>2以后,y[k]能用y[k—l]和y[k-2]算出,这是一个递归得方法。

根据上面得说明,我们可以开始数字振荡器得设计。设该振荡器得频率为2kHz,采样率为40kHz

(通过定时器设置,每隔25cs中断一次,即产生一个y[n])那么递归得差分方程系数为:

A=2coswT=2cos(2XPIX2000/40000)=2X0.95105652

B=-l

C=sinwT=sin(2XPIX2000/40000)=0.30901699

为了便于定点DSP处理,我们将所有系数除以2,然后用16为定点格式表示为:

这便是本实验中查生2kHz阵线信号的三个系数。在本实验中,主程序在初始化时先计算出y[l]

和y[2],然后开放定时器中断。以后每次进入定时器中断效劳程序时,利用前面的y[1和y[2],

计算出新的所有y[n],通过CCS提供的图形显示工具,我们将在图形窗口中看到一个正弦信号

波形。下面时初始化和中断效劳程序代码片断:

初始化y⑴和y⑵:

SSBXFRCT:置FRCT=1,准备进行小数乘法运算

ST#INIT_A,AA:将常数A装入变量AA

ST#INIT_B,BB:将常数B装入变量BB

ST#TNIT_C,CC:将常数C装入变量CC

PSHDCC:将变量CC压入堆栈

POPDy2:初始化y2=CC

LDAA.T装AA到T存放器

MPYy2,A:y2乘系数A,结果放入A存放器

STHA,yl:将A存放器得高16位存入变量yl

中断效劳程序片断

LDBB,T:将系数B装入T存放器

MPYy2,A:y2乘系数B,结果放入A存放器

LTDyl:将yl装入T存放器,同时复制到y2

MACAA,A:完成新正弦数据的计算,A存放器中为

yl*AA+y2*BB

STHA,1,yl:将新数据存入yl,因所有系数都除过2,所以在

保存结果时转移一位,恢复数据正常大小

STHA,1,yO:将新正弦数据存入yO

(2)C54X的定时器操作

C54X的片内定时器利用CJC0UT时钟计数,用户使用三个存放器(TIM,PRD,TCR)来控制定时

器,参见表4-lo在表4-2中列出了定时器控制存放器的各个比特位的具体定义。'VC5402

得另一个定时器(定时器1)的控制存放器分别为:0X30(TIM1),0X31(PRD1),0X32

(TCR1)o

表4—1'VC5402定时器0的相关存放器

存放器地址名称用途

0024hTIM定时器存放器,每计数一次自动减一

0025hPRD定时器周期存放器,当TIM减为。后CPU自

动将PRD的值装入TIM

0026hTCR定时器控制存放器

表4-2定时器控制就存起(TCR)bit概要

比特名称功能

15-12保存读出时为0

11soft该比特位与10位配合使用以决定定时器在使用仿真调试

时的状态.

Soft=()当进入仿真调试时,定时器立即停止工作。

Soft=l当计数器被减为0后,停止工作。

10free该比特位与11位配合使用以决定定时器在使用仿真调试

时的状态

free=0根据11比特位决定定时器状态

free=l忽略11比特位,定时器不受影像

9—6PSC定时器预置计数器。当PSC减为0后,CPU自动将TDDR

装入,然后TIM开始减

5TRB定时器复位。当TRB=1时,CPU将PRD存放器的值装

入TIM存放器,将TDDR的值装入PSC

4TSS定时器停止状态。当系统复位时,TSS被去除,定时器立

刻开始工作。

TSS=0表示启动定时器

中断效劳程序很短(小于或等于4个字),可以直接放入该向量表。中断向量表的位置可以通

过修改基地址来改变,其基地址由PMST存放器中的IPTR(15-7bit)决定。表4-3给出了中断

向量表的各中断的偏移说明。例如C54x复位后其IPTR全为1,所以中断向量表位置在OFF80H,

因而复位后程序从OFF80H开始运行。

本实验的初始化程序读取中断向量表的起始地址,然后设置PMST的高9位,以便DSP能

正确响应中断,代码如下:

LD#0,dp;设置DP页指针

SSBXintm;关闭所有中断

LD#vector;读出中断向量(地址、ector在中断向量表程序中定义)

AND#OFF8()h,A;保存PMST的低7位

ORPMST,A

STLMA,PMST;设置PMST(其中包括IPTR)

表4-354X的中断向量表

3、实验内容

本实验需要使用C54X汇编语言或C语言实现数字振荡器,并通过CCS提供的图形显示

窗口观察输出信号波形以及频谱。

实验分下面几步完成;

(1)根据确定数字振荡器的频率,确定系数。数字振荡器系数确实定在前面已经说明,这里不

再赘述。

(2)启动CCS,新建工程文件,如文件名为sinewave.mako选择Projecl菜单中的addFileto

Project选项,将汇编源程序exer3.sdm、vec_tAble.asm和连接定位sinewaved文件依次

添加到工程文件中。注意,你可以在添加文件对话框中选择显示不同的文件类型来加快文件选

择速度。你页可以使用鼠标右键单击工程文件名(tllJsinewave.mak)并选择addFiles爱添加需

要的文件。其中,exer3.asm包括初始化代码和中断效劳程序,而vec_talbe.asm包含中断向量表。

(3)选择Project菜单中的Option选项,或使用鼠标右铤单击工程文件名(如sinewave.mak)

并选择Oplion项来修改或添加编译、连接中使用的参数。例如,选择assemble窗口,选择“Enable

SymbolicDebugInformation^以便使用汇编代码级调试(你可以在汇编源程序设置断点等等)。

选择Linker窗口,在"OulpulFilename”栏中写入输出OUT文件的名字,如sina.out,你还可以

设置生成的MaP文件名。

(4)写成编译、连接,正确生成OUT文件。然后使用File菜单中的“LoadProgram"选项,

将生成的OUT文件(如sin&oul)装入DSP的片内存储器。这是CCS将显示程序的起始地址

_c_intOO.

(5)选View—>Graph-Time/Frequency…翻开图形显示设置窗口。在弹出的对话框中按下列

图设置,主要修改“STaraddress"为yO(yO为生成的正弦波输出变量);“acquisitionBufferSize"

为1,"DSPDataType"为16-bitsignedinteger”。

(6)在汇编源程序的中断效劳程序(.tint)中的“nop〃语句处设置断点。该行被加亮为洋红色。

选择Debugfanimate,运行程序,观察输出波形。

(7)用右键单击图形显示窗口,并选择"Properties〃项以便修改显示属性。将“DisplayType"

项改为“FFTMagnitudew以便显示信号频谱。修改"SamplingRate(Hz)”项为40000,然后退

出。注意观察生成的正弦波频率。

(8)去除所有断点,关闭除波形显示窗口外的所有窗口,并关闭工程文件。现面我们使用C语

言完本钱实验。新建一个工程文件,如sinewave_c.mak并添加limer.c,vec_table.asm源程序,

再添加timerd,再添加C使用的标准库rts.lib。该文件应该再CCS安装目录中。例如,假设

CCS安装在d:\ti下,那么rts.lib应该在d:\ti\c5400\cgtools'.lib下。修改编译、连接选项,参加符

号调试选项,修改生成的OUT文件名,如liner.oul。

(9)完成编译。连接,正确生成OUT文件。然后使用File菜单的“LoadProgram"选项,将

生成的OUT文件(如timer.out)装入DSP的片内存储器。这时CCS将显示程序的启始地址

_c_int()().

(10)翻开C源程序(timer®窗口,在中断效劳程序(函数tint。)的“con_buf=0;〃语句处增

加一个断点。同样翻开图形显示窗口,并将“STartaddress"改为128,“DisplayDataSize"改

为128,“DSPDataType"为"32-bitfloatingpoint”。

(ID选择Debug-animate,运行程序,观察输出波形。算算频率是否是2kHz?同样用右键单

击图形显示窗口,显示信号频谱,。注意修改“SamplingRata(Hz)”项为40000,然后退出。注

意观察生成的正弦波频率。

4、实验结果

1实验程序:

title"sine,asm”

.mmregs

.global_c_int00,_tint,vector

OFF_INTIMER.set04Ch

COM_A.set07642h

COM_B.setOcOOOh

COMC.set0187eh

.bssyO,1

.bssyl,1

.bssy2,1

.bsstemp,1

.bssAa,1

.bssBb,1

.bssCc,1

.text

cintOO:

Id#0,dp

ssbxintm

stSlfffh,sp

IdSve

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论