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

下载本文档

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

文档简介

电子科技大学通信学院标准实验报告〔实验〕课程名称DSP设计与实践电子科技大学教务处制表电子科技大学实验报告学生姓名:学号:指导教师:向超实验地点:实验时间:实验室名称:电子科技大学—美国德州仪器DSP技术/培训中心实验工程名称:用定时器实现数字振荡器三、实验学时:4学时四、实验原理:数字振荡器原理设一个传递函数为正弦序列sinkωT,其z变换为H(z)=EMBEDEquation.3EMBEDEquation.3v儭丌a=2cosÉ͔,B=-1,C=sinÉ͔其中,A=2cosωT,B=-1,C=sinωT。设初始条件为0,求出上式的反Z变换得:y[k]=Ay[k-1]+By[k-2]+Cx[k-1]这是一个二阶差分方程,其单位冲击响应即为sinkωT。利用单位冲击函数x[k-1]的性质,即仅当k=1时,x[k-1]=1,代入上式得:k=0y[0]=Ay[-1]+By[-2]+0=0k=1y[1]=Ay[0]+By[-2]+c=ck=2y[2]=Ay[1]+By[0]+0=Ay[1]k=3y[3]=Ay[2]+By[1]..k=ny[n]=Ay[n-1]+By[n-2]在k>2以后,y[k]能用y[k-1]和y[k-2]算出,这是一个递归的差分方程。根据上面的说明,我们可以开始数字振荡器的设计。设该振荡器的频率为2kHz,采样率为40kHz〔通过定时器设置,每隔25us中断一次,即产生一个y[n]〕,那么递归的差分方程系数为:A=2cosωT=2cos(2xPIx2000/40000)=2x0.95105652x41e6f0B=-1C=sinωT=sin(2xPIx2000/40000)=0.30901699x4=9e4b为了便于定点DSP处理,我们将所有的系数除以2,然后用16位定点格式表示为:af378c4f25这便是本实验中产生2KHz正弦信号的三个系数。在本实验中,主程序在初始化时先计算出y[1]和y[2],然后开放定时器中断。以后每次进入定时器中断效劳程序时,利用前面的y[1]和y[2],计算出新的有y[0],通过CCS提供的图形显示工具,我们将在图形窗口中看到一个正弦信号波形。下面是初始化和中断效劳程序代码片段:初始化y[1]和y[2]: ssbx FRCT ;置FRCT=1,准备进行小数乘法运算 st #INIT_A,AA ;将常数A装入变量AA st #INIT_B,BB ;将常数B装入变量BB st #INIT_C,CC ;将常数C装入变量CC pshd CC ;将变量CC压入堆栈 popd y2 ;初始化y2=CC ld AA, T ;装AA到T存放器 mpy y2,a ;y2乘系数A,结果放入A存放器 sth a,y1 ;将A存放器的高16位存入变量Y1中断效劳程序片段: ld BB,T ;将系数B装入T存放器 mpy y2,a ;y2乘系数B,结果放入A存放器 ltd y1 ;将y1装入T存放器,同时复制到y2 mac AA,a ;完成新正弦数据的计算,a存放器中为;y1*AA+y2*BBsth a,1,y1 ;将新数据存入y1,因所有系数都除过2,所以在保;存结果时转移一位,恢复数据正常大小。 sth a,1,y0 ;将新正弦数据存入y0 〔2〕C54X的定时器操作C54X的片内定时器利用CLKOUT时钟计数,用户使用三个存放器〔TIM,PRD,TCR〕来控制定时器,参见表4-1。在表4-2中列出了定时器控制存放器的各个比特位的具体定义。‘VC5402的另一个定时器〔定时器1〕的控制存放器分别为:0x30〔TIM1〕,0x31〔PRD1〕,0x32〔TCR1〕。从上面的介绍可以看到定时器实际上可以有20个比特的周期存放器。它对CLKOUT信号计数,先将PSC减1,直到PSC为0,然后用TDDR重新装入PSC,同时将TIM减1,直到TIM减为0。这时CPU发出TINT中断,同时在TOUT引脚输出一个脉冲信号,脉冲宽度为CLKOUT一致。然后用PRD重新装入TIM,重复下去直到系统或定时器复位。因而定时器中断的频率由下面的公式决定:TINT的频率=EMBEDEquation.3EMBEDEquation.3v儭乴ch蠺祃LKOUT其中tc表示CLKOUT的周期。定时器当前的值可以通过读取TIM存放器和TCR存放器的PSC比特位得到。下面是本实验中初始化定时器的程序片段:stm #10h,TCR ;停止定时器 stm #2499,PRD ;设置PRD存放器值为2499,TINT中断频率为;Foutclk/〔2499+1〕=100MHz/2500=40KHz stm #20h,TCR ;重新装入TIM和PSC,然后启动定时器〔3〕C54X中断的使用在C54X中用户可以通过中断屏蔽存放器IMR来决定开放或关闭一个中断请求。其中,HPINT表示HPI接口中断,INT3-INT0为外部引脚产生的中断,TXINT和TRINT为TDM串口的发送和接收中断,BXINT0和BRINT0为BSP串口的发送和接收中断,TINT0为定时器0中断。在中断屏蔽存放器IMR中,1表示允许CPU响应对应的中断,0表示禁止。当然要CPU响应中断,ST1存放器中的INTM还应该为0〔允许所有的中断〕。当DSP响应中断时,PC指针指向中断向量表中对应中断的地址,进入中断效劳子程序。中断向量表是C54X存放中断效劳程序的一段内存区域,大小为80H。在中断向量表中,每一个中断占用4个字的空间,一般情况是将一条跳转或延时跳转指令存放于此。当然,如果中断效劳程序很短〔小于或等于4个字〕,可以直接放入该向量表。中断向量表的位置可以通过修改基地址来改变,其基地址由PMST存放器中的IPTR〔15-7bits〕决定。表4-3给出了中断向量表的各中断的偏移说明。例如C54x复位后其IPTR全为1,所以中断向量表起始位置在0FF80H,因而复位后程序从0FF80H开始运行。本实验的初始化程序读取中断向量表的启始地址,然后设置PMST的高9位,以便DSP能正确响应中断,代码如下:ld#0,dp ;设置DP页指针ssbxintm ;关闭所有中断ld#vector,a ;读出中断向量〔地址vector在中断向量表程序中定义〕and#0FF80h,a ;保存高9位〔IPTR〕andm#007Fh,pmst ;保存PMST的低7位orpmst,a ;stlma,pmst ;设置PMST〔其中包括IPTR〕五、实验目的:在数字信号处理中,会经常使用到正弦/余弦信号。通常的方法是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP工作时仅作查表运算即可。在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。本实验除了学习数字振荡器的DSP实现原理外,同时还学习C54X定时器使用以及中断效劳程序编写。另外,在本实验中我们将使用汇编语言和C语言分别完成源程序的编写。六、实验内容:本实验需要使用C54X汇编语言或C语言实现数字振荡器,并通过CCS提供的图形显示窗口观察输出信号波形以及频谱。七、实验器材〔设备、元器件〕:计算机一台实验步骤:〔1〕.根据确定数字振荡器的频率,确定系数。数字振荡器系数确实定在前面已经说明,这里不再赘述。〔2〕.启动CCS,新建工程文件,如文件名为sinewave.mak。选择Project菜单中的AddFiletoProject选项,将汇编源程序exer3.asm、vec_table.asm和连接定位sinewaved文件依次添加到工程文件中。注意,你可以在添加文件对话框中选择显示不同的文件类型来加快文件选择速度。你也可以使用鼠标右键单击工程文件名〔如sinewave.mak〕并选择AddFiles项来添加需要的文件。其中,exer3.asm包括初始化代码和中断效劳程序,而vec_talbe.asm包含中断向量表。〔3〕.选择Project菜单中的Options选项,或使用鼠标右键单击工程文件名〔如sinewave.mak〕并选择Options项来修改或添加编译、连接中使用的参数。例如,选择Assembler窗口,选择“EnableSymbolicDebugInfomation〞以便使用汇编源代码级调试〔你可以在汇编源程序设置断点等等〕。选择Linker窗口,在“OutputFilename〞栏中写入输出OUT文件的名字,如sine.out,你还可以设置生成的MAP文件名。〔4〕.完成编译、连接,正确生成OUT文件。然后使用File菜单的“LoadProgram〞选项,将生成的OUT文件〔如sine.out〕装入DSP的片内存储器。这时CCS将显示程序的启始地址_c_int00。〔5〕.选View→Graph→Time/Frequency…翻开图形显示设置窗口。在弹出的对话框中按下列图设置,主要修改“StartAddress〞为y0〔y0为生成的正弦波输出变量〕;“AcquisitionBufferSize〞为1,“DSPDataType〞为“16-bitsignedinteger〞。想想为什么要这样修改?EMBEDPBrushEMBEDPBrush.在汇编源程序的中断效劳程序〔_tint〕中的“nop〞语句处设置断点。该行被加亮为洋红色。选择Debug→Animate,运行程序,观察输出波形。数一数一个周期的正弦波有多少个点?算算频率是否是2kHz?另外,想想Run和Animate两种运行方式的区别?通过计算发现,一个周期大约有2.5个点,按照每一格为20ms,计算发现,频率为2kHz。Run方式为静态,每Run一次,程序跑一次。Animate可以连续运行程序,波形可连续显示。.用右键单击图形显示窗口,并选择“Proporties〞项以便修改显示属性。将“DisplayType〞项改为“FFTMagnitude〞以便显示信号频谱。修改“SamplingRate(Hz)〞项为40000,然后退出。注意观察生成的正弦波频率。生成的正弦波为:〔8〕.去除所有断点,关闭除波形显示窗口外的所有窗口,并关闭工程文件。下面我们使用C语言完本钱实验。新建一个工程文件,如sinewave_c.mak,并添加timer.c,vec_table.asm源程序,再添加timerd,再添加C使用的标准库rts.lib。该文件应该在CCS安装目录中。例如,假设CCS安装在d:\ti下,那么rts.lib应该在d:\ti\c5400\cgtools\lib下。修改编译、连接选项,参加符号调试选项,修改生成的OUT文件名,如timer.out。〔9〕.完成编译、连接,正确生成OUT文件。然后使用File菜单的“LoadProgram〞选项,将生成的OUT文件〔如timer.out〕装入DSP的片内存储器。这时CCS将显示程序的启始地址_c_int00。(10).翻开C源程序〔timer.c〕窗口,在中断效劳程序〔函数tint()〕的“con_buf=0;〞语句处增加一个断点。同样翻开图形显示窗口,并将“StartAddress〞改为buf;“AcquisitionBufferSize〞改为128,“DisplayDataSize〞改为128,“DSPDataType〞为“32-bitfloatingpoint〞。想想为什么这次将“AcquisitionBufferSize

温馨提示

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

评论

0/150

提交评论