基于DSP的定时器实现数字振荡器(汇编语言).doc

基于DSP的定时器实现数字振荡器(汇编语言).doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 1 基于DSP的定时器实现数字振荡器 一、实验目的 1.更进一步掌握定时器和中断的使用; 2.学会用数字振荡器方法产生正弦/余弦信号; 二、实验原理 利用定时器及中断产生频率为f正弦信号,定时器被设置成每1/fs产生中断一次(等效于采样速率),在中断服务程序中用迭代算法计算出一个正弦值。用此方法可以很精确地产生某频率的正弦波。 设一个传递函数为正弦序列,其Z变换为,其中A=,B=-1,C=。设初始条件为0,求出其反Z变换得: 是一个二阶差分方程,其单位冲击响应即为sinkωT,利用单位冲击函数x[k-1]的性质,即仅当k=1时,x[k-1]=1,推导得: 在k>2以后,y[k]能用y[k-1]和y[k-2]算出,这是一个递归的差分方程。式中, fs为采样频率,f为正弦波频率。A为正弦波幅度。可见用数字频率振荡器产生正弦波的实质就是用程序实现上述的递归差分方程。 如要产生振荡器的频率为2kHz正弦波,设采样速率为40k,通过定时器设置,每隔25us中断一次,即产生一个y[n]。则递归差分方程系数为: B=-1 为了便于定点DSP处理,将所有系数除以2,然后用16位定点格式表示为:A=6D4BH,B=C000H,C=214FH,这便是产生2kHz正弦信号的三个系数。 主程序初始化时先计算出y[1]和y[2],然后开放定时器中断,以后每次进入定时器中断服务程序时,利用前面计算出的y[1]和y[2]计算出新的y。 初始化y[1]和y[2] SSBX FRCT ;置FRCT=1,准备进行小数乘法运算 ST #0x79BC,AA ;将常数装入变量AA ST #0xC000H,BB ;将常数装入变量BB ST #0x13C7H,CC;将常数装入变量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*BB sth a,1,y1 ;将新数据存入Y1,因所有系数都 ;除过2,在保存结果时转移一位, ;恢复数据正常大小 sth a,1,y0 ;将新正弦数据存入Y0 VC5402的片内定时器利用CLKOUT时钟计数,用三个寄存器(TIM、PRD、TCR)来控制定时器。到定时器实际上可以有20个比特的周期寄存器。它对CLKOUT信号计数,先将PSC 减1,直到PSC 为0,然后用TDDR 重新装入PSC,同时将TIM减1,直到TIM减为0。这时CPU 发出TINT中断,同时在TOUT 引脚输出一个脉冲信号,脉冲宽度为CLKOUT 一致。然后用PRD 重新装入TIM,重复下去直到系统或定时器复位。因而定时器中断的频率由下面的公式决定: TINT的频率=,其中tc表示CLKOUT的周期。设置PRD寄存器值为12499,TINT中断频率为40kHz。 定时器初始化程序段为: STM #10H,TCR ;停止定时器 STM #2499H,PRD;设置PRD 寄存器值为2499, ;TINT 中断频率为Foutclk =(2499+1)= 100MHz/2500 = 40 kHz STM #20H,TCR ;重新装入TIM 和PSC,然后; ;启动定时器,在开放中断屏蔽寄存器IMR后,就可以产生频率为2000Hz的正弦波。 三、实验内容与步骤 1.使用C54x汇编语言实现数字振荡器,并通过CCS提供的显示窗口观察输出信号波形以及频谱。 2.根据确定数字振荡器的频率,确定系数。数字振荡器系数的确定在前面已经说明, 3. 启动 CCS,新建工程文件,如文件名为sinewave.pjt。并建立如下文件: 汇编源程序exer3.asm .title "for test INT service program ...(25 us) " .mmregs .global _c_int00,_tint,vector OFF_INTIMER .set 04Ch ; vector of INTtimer at VECTOR+OFF_INTIMER INIT_A .set 079bch ; A/2=0.9510498 INIT

您可能关注的文档

文档评论(0)

135****3598 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档