实验二用定时器实现数字振荡器.doc

上传人:w****2 文档编号:6640668 上传时间:2020-03-01 格式:DOC 页数:10 大小:111.50KB
返回 下载 相关 举报
实验二用定时器实现数字振荡器.doc_第1页
第1页 / 共10页
实验二用定时器实现数字振荡器.doc_第2页
第2页 / 共10页
实验二用定时器实现数字振荡器.doc_第3页
第3页 / 共10页
点击查看更多>>
资源描述
电子科技大学 通信 学院标 准 实 验 报 告(实验)课程名称 DSP设计与实践 电子科技大学教务处制表电 子 科 技 大 学实 验 报 告学生姓名: 学 号: 指导教师:向超实验地点: 实验时间:1、 实验室名称:电子科技大学美国德州仪器DSP技术/培训中心 2、 实验项目名称:用定时器实现数字振荡器三、实验学时:4学时四、实验原理:数字振荡器原理设一个传递函数为正弦序列sinkT,其z变换为 H(z)=EMBED Equation.3 EMBED Equation.3 v儭丌=2cos, B=-1, C=sin其中,A=2cosT, B=-1, C=sinT。设初始条件为0,求出上式的反Z变换得: yk=Ayk-1+Byk-2+Cxk-1这是一个二阶差分方程,其单位冲击响应即为sinkT。利用单位冲击函数xk-1的性质,即仅当k=1时,xk-1=1,代入上式得: k=0 y0 = Ay-1 + By-2 + 0 = 0 k=1 y1 = Ay0 + By-2 + c = c k=2 y2 = Ay1 + By0 + 0 = Ay1 k=3 y3 = Ay2 + By1 . . k=n yn= Ayn-1 + Byn-2在k2以后,yk能用yk-1和yk-2算出,这是一个递归的差分方程。 根据上面的说明,我们可以开始数字振荡器的设计。设该振荡器的频率为2kHz,采样率为40kHz(通过定时器设置,每隔25us中断一次,即产生一个yn),则递归的差分方程系数为: A=2cosT=2cos (2 x PI x 2000 / 40000)=2 x 0.95105652 x4 1e6f0 B=-1 C=sinT=sin (2 x PI x 2000 / 40000)=0.30901699 x4 =9e4b为了便于定点DSP处理,我们将所有的系数除以2,然后用16位定点格式表示为:a f378 c 4f25 这便是本实验中产生2KHz正弦信号的三个系数。在本实验中,主程序在初始化时先计算出y1和y2,然后开放定时器中断。以后每次进入定时器中断服务程序时,利用前面的y1和y2,计算出新的有y0,通过CCS提供的图形显示工具,我们将在图形窗口中看到一个正弦信号波形。下面是初始化和中断服务程序代码片段:初始化y1和y2:ssbxFRCT;置FRCT=1,准备进行小数乘法运算st#INIT_A,AA;将常数A装入变量AAst#INIT_B,BB;将常数B装入变量BBst#INIT_C,CC;将常数C装入变量CCpshdCC;将变量CC压入堆栈popdy2;初始化y2=CCldAA,T;装AA到T寄存器mpyy2,a;y2乘系数A,结果放入A寄存器stha,y1;将A寄存器的高16位存入变量Y1中断服务程序片段:ldBB,T;将系数B装入T寄存器mpyy2,a;y2乘系数B,结果放入A寄存器ltdy1;将y1装入T寄存器,同时复制到y2macAA,a;完成新正弦数据的计算,a寄存器中为; y1*AA+y2*BBstha,1,y1;将新数据存入y1,因所有系数都除过2,所以在保;存结果时转移一位,恢复数据正常大小。stha,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的频率= EMBED Equation.3 EMBED Equation.3 v儭乴ch蠺祃LKOUT其中tc表示CLKOUT的周期。定时器当前的值可以通过读取TIM寄存器和TCR寄存器的PSC比特位得到。下面是本实验中初始化定时器的程序片段: stm#10h,TCR;停止定时器stm#2499,PRD;设置PRD寄存器值为2499,TINT中断频率为 ; Foutclk /(2499+1)= 100MHz/2500 = 40 KHzstm#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-7 bits)决定。表4-3给出了中断向量表的各中断的偏移说明。例如C54x复位后其IPTR全为1,所以中断向量表起始位置在0FF80H,因而复位后程序从0FF80H开始运行。本实验的初始化程序读取中断向量表的启始地址,然后设置PMST的高9位,以便DSP能正确响应中断,代码如下: ld #0,dp;设置DP页指针 ssbx intm;关闭所有中断 ld #vector, a;读出中断向量(地址vector在中断向量表程序中定义) and #0FF80h, a;保留高9位(IPTR) andm #007Fh, pmst;保留PMST的低7位 or pmst, a; stlm a, pmst;设置PMST(其中包括IPTR)五、实验目的:在数字信号处理中,会经常使用到正弦/余弦信号。通常的方法是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP工作时仅作查表运算即可。在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。 本实验除了学习数字振荡器的DSP实现原理外,同时还学习C54X定时器使用以及中断服务程序编写。另外,在本实验中我们将使用汇编语言和C语言分别完成源程序的编写。六、实验内容:本实验需要使用C54X汇编语言或C语言实现数字振荡器,并通过CCS提供的图形显示窗口观察输出信号波形以及频谱。七、实验器材(设备、元器件):计算机一台8、 实验步骤:(1). 根据确定数字振荡器的频率,确定系数。数字振荡器系数的确定在前面已经说明,这里不再赘述。(2). 启动CCS,新建工程文件,如文件名为sinewave.mak。选择Project菜单中的Add File to Project选项,将汇编源程序exer3.asm、vec_table.asm和连接定位sinewave.cmd文件依次添加到工程文件中。注意,你可以在添加文件对话框中选择显示不同的文件类型来加快文件选择速度。你也可以使用鼠标右键单击工程文件名(如sinewave.mak)并选择Add Files项来添加需要的文件。其中,exer3.asm包括初始化代码和中断服务程序,而vec_talbe.asm包含中断向量表。(3). 选择Project菜单中的Options选项,或使用鼠标右键单击工程文件名(如sinewave.mak)并选择Options项来修改或添加编译、连接中使用的参数。例如,选择Assembler窗口,选择“Enable Symbolic Debug Infomation”以便使用汇编源代码级调试(你可以在汇编源程序设置断点等等)。选择Linker窗口,在“Output Filename”栏中写入输出OUT文件的名字,如sine.out,你还可以设置生成的MAP文件名。(4). 完成编译、连接,正确生成OUT文件。然后使用File菜单的“Load Program”选项,将生成的OUT文件(如sine.out)装入DSP的片内存储器。这时CCS将显示程序的启始地址_c_int00。(5).选ViewGraphTime/Frequency打开图形显示设置窗口。在弹出的对话框中按下图设置,主要修改“Start Address”为y0(y0为生成的正弦波输出变量);“Acquisition Buffer Size”为1,“DSP Data Type”为“16-bit signed integer”。想想为什么要这样修改? EMBED PBrush EMBED PBrush (6) . 在汇编源程序的中断服务程序(_tint)中的“nop”语句处设置断点。该行被加亮为洋红色。选择DebugAnimate,运行程序,观察输出波形。数一数一个周期的正弦波有多少个点?算算频率是否是2kHz?另外,想想Run和Animate两种运行方式的区别? 通过计算发现,一个周期大约有2.5个点,按照每一格为20ms,计算发现,频率为2kHz。 Run方式为静态,每Run一次,程序跑一次。Animate可以连续运行程序,波形可连续显示。(7) . 用右键单击图形显示窗口,并选择“Proporties”项以便修改显示属性。将“Display Type”项改为“FFT Magnitude”以便显示信号频谱。修改“Sampling Rate(Hz)”项为40000,然后退出。注意观察生成的正弦波频率。生成的正弦波为:(8). 清除所有断点,关闭除波形显示窗口外的所有窗口,并关闭工程文件。下面我们使用C语言完成本实验。新建一个工程文件,如sinewave_c.mak,并添加timer.c,vec_table.asm源程序,再添加timer.cmd,再添加C使用的标准库rts.lib。该文件应该在CCS安装目录中。例如,若CCS安装在d:ti下,则rts.lib应该在d:tic5400cgtoolslib下。修改编译、连接选项,加入符号调试选项,修改生成的OUT文件名,如timer.out。(9). 完成编译、连接,正确生成OUT文件。然后使用File菜单的“Load Program”选项,将生成的OUT文件(如timer.out)装入DSP的片内存储器。这时CCS将显示程序的启始地址_c_int00。 (10). 打开C源程序(timer.c)窗口,在中断服务程序(函数tint())的“con_buf=0;”语句处增加一个断点。同样打开图形显示窗口,并将“Start Address”改为buf;“Acquisition Buffer Size”改为128,“Display Data Size”改为128,“DSP Data Type”为“32-bit floating point”。想想为什么这次将“Acquisition Buffer Size”项设置为128?(11). 选择DebugAnimate,运行程序,观察输出波形。数一数一个周期的正弦波有多少个点?算算频率是否是2kHz?同样用右键单击图形显示窗口,显示信号频谱。注意修改“Sampling Rate(Hz)”项为40000,然后退出。注意观察生成的正弦波频率。九、实验数据及结果分析:重新设计和实现一个数字振荡器,采样频率改为为20KHz,输出正弦信号的频率为4KHz。使用探针工具,用文件保存产生的正弦波数据。实验结果如图:10、 实验结论:十一、总结及心得体会:12、 对本实验过程及方法、手段的改进建议:无 报告评分: 指导教师签字:
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 临时分类 > 人文社科


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!