基于DSP的正弦信号发生器的设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LDM LD STL STL CALL CALL LD LD MPYA STH MAR loop1: STM sin179(deg.) STM RPTB 90次 LD STL loop2: STM
loop3:
STM RPTB LD NEG STL STM STM
k_theta,AR0 0,AR1 #sin_x,AR6 #90,BRC loop1-1
的单元
STM
#d_coef_s,AR3 /A/R3指向d_coef_s首地址
STM
#d_xs,AR2
/A/R2指向d_xs首地址
STM
#c_l_s,AR4 /A/R4指向c_l_s首地址
ST
#7FFFh,c_l_s /7/FFFh →c_l_s
SQUR
*AR2+,A
/A/R2指向累加器A中的数值求其平
VECS:
org = 0FF80h, len = 0080h
PAGE 1:
SPRAM:
org = 0060h,
len = 0020h
DARAM1:
org = 0080h,
len = 0010h
DARAM2:
org = 0090h,
len = 0010h
DARAM3:
org = 0200h,
存
储空间
d_squr_xs .usect "sin_vars",1 //为d_squr_xs中sin_vars保留1个
存储空间
d_temp_s .usect "sin_vars",1 //为d_temp_s中sin_vars保留1个
存储空间
d_sinx .usect "sin_vars",1 //为d_sinx中sin_vars保留1个存储
STM
#360,bk
/B/K←360
loop4: PORTW *AR6+0%,PA0 /P/A0=*AR6+0%,向PA0输出数据
B
loop4
sinx:
.def
d_xs,d_sinx /定/ 义标号d_xs,d_sinx
.data
定//义数据代码段
table_s .word 01c7h
/c/1=1/(8*9)
MASR
*AR2+,*AR3+,B,A /A/=1-x^2/56,T=x^2
MPYA
A
A/=/T*A=x^2(1-x^2/56)
STH
A,*AR2
/(/d_temp)= x^2(1-x^2/56)
MASR
*AR2-,*AR3+,B,A /A/=1-x^2/30(1-x^2/56)
T= x^2(1-x^2/56)
基于DSP的正弦信号发生器的设计
1、绪论 1.1 课题背景
数字信号处理(Digital Signal Processing,简称DSP)是一门涉 及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以 来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生 并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换 或提取信息,来处理现实信号的方法,这些信号由数字序列表示。在 过去的二十多年时间里,信号处理已经在通信等领域得到了极为广泛 的应用。
ST
B,*AR2 /(/ B)左移16位→AR2
||LD *AR4,B /(/ AR4)左移16位→B
MASR
*AR2-,*AR3+,B,A /从/ 累加器A中减去(AR2)
*(AR3)
MPYA
d_xs /d/_xs指向的操作数与累加器A中高16位相乘
STH
B,d_sinx /(/ B)高16位→d_sinx
d_temp_c .usect "cos_vars",1 //为d_temp_c中cos_vars保存1个存储
单元
d_cosx .usect "cos_vars",1 //为d_cosx中cos_vars保存1个存储单
元
c_l_c
.usect "cos_vars",1 //为c_l_c中cos_vars保存1个存储单元
1. 利用sinx和cosx子程序,计算0—45°(间 隔为0.5°)的 正弦和余弦值
2. 利用sin(2x)=2sin(x)cos(x)公式,计算0—90°的正弦值 (间隔为1°)
3. 通过复制,获得0—359°的正弦值 4. 将0—359°的正弦值重复从PA口输出,遍可得到正弦波
整个系统相应的软件流程图如右图所示。
MAR
*AR2+
RETD
ADD
*AR4,16,B //B=1-x^2/2(1-x^2/12(1-x^2/30(1-
x^2/56)))
STH
B,*AR2 //cos(theta)
RET
.end
4.2 正弦波程序链接命令文件sin.cmd
.cmd文件描述输入文件和输出文件,说明系统中有哪些可用存储
器、程序段、堆栈及复位向量和中断向量等安排在什么地方。其中
STM
#d_xc,AR2
/A/R2 指向d_xc首地址
STM
#c_l_c,AR4 /A/R4指向c_l_c首地址
ST
#7FFFh,c_l_c /7/FFFh→c_l_c
SQUR
*AR2+,A
/求/ x的平方存放在累加器A中
ST
A,*AR2
/(/ A)左移16位→AR2
||LD *AR4,B
/(/ AR4)左移16位→B
.word 030bh
/c/1=1/(6*7)
.word 0666h
/c/1=1/(4*5)
.word 1556h
/c/1=1/(2*3)
d_coef_s .usect "coef_s",4
//为"coef_s"保留4个存储空间
d_xs
.usect "sin_vars",1 /为/ d_xs中sin_vars保留1个
/(/A)低16位→d_xc
sinx
ຫໍສະໝຸດ Baidu/调/ 用sinx程序
cosx
/调/ 用cosx程序
#d_sinx,DP /D/P←d_sinx
@d_sinx,16,A /A/=sin(x)
@d_cosx
/B/= sin(x)*cos(x)
B,1,*AR6+
/A/R6→2*sin(x)*cos(x)
*AR1+0
图1 程序流程图
4、 程序设计
4.1 产生正弦波程序清单sin.asm
.title "sin.asm" //为汇编文件取名为“sin.asm”
.mmregs
/定/ 义存储器映像寄存器
.def
_c_int00
.ref
sinx,d_xs,d_sinx,cosx,d_xc,d_cosx //定义标
号
sin_x: .usect "sin_x",360 //为"sin_x"保留360个存储空间
本文采用了泰勒级数展开法。一个角度为θ的正弦和余弦函数,可 以展开成泰勒级数,取其前5项进行近似得:
式中:为θ的弧度值,(是采样频率;f是所要发生的信号频率) 3、 设计方案
本设计采用TMS320C54X系列的DSP作为正弦信号发生器的核心控制 芯片。
通过计算一个角度的正弦值和余弦值程序可实现正弦波,其步骤如 下:
方
ST
A,*AR2 /(/ A)左移16位→AR2
||LD *AR4,B /(/ AR4)左移16位→B
MASR
*AR2+,*AR3+,B,A /从/ 累加器A中减去(AR2)
*(AR3)
MPYA
A
/操/ 作数与累加器A中高位相乘
STH
A,*AR2 /(/ A)高16位→AR2
MASR
*AR2-,*AR3+,B,A /从/ 累加器A中减去(AR2)
MEMORY段就是用来规定目标存储器的模型,通过这条指令,可以定义系
统中所包含的各种形式的存储器,以及它们占据的地址范围;SECTIONS
段说明如何将输入段组合成输出段以及在可执行文件中定义输出段、规
定输出段在存储器中的位置等。
MEMORY
{
PAGE 0:
EPROM:
org = 0E000h, len = 1000h
/(/(AR7)) →A,然后AR7减去1 /(/A) 低16位→AR6
/s/in180(deg.)—sin359(deg.) (BRC)=179,重复执行180次
/A/R7指向sin_x首地址
/(/(AR7)) →A,然后AR7加1 累//加器变负 /A/低16位→AR6
/A/R6指向sin_x /A/R←01
*(AR3)
MPYA
*AR2+ /A/R2指向的数与累加器A的高16位相乘
ST
B,*AR2 /(/ B)左移16位→AR2
||LD *AR4,B /(/ AR4)左移16位→B
MASR
*AR2-,*AR3+,B,A /从/ 累加器A中减去(AR2)
*(AR3)
MPYA
*AR2+ /与/ 累加器A中高16位相乘
MPYA
*AR2+ /B/=x^2(1-x^2/30(1-x^2/56))
2(1-x^2/30(1-x^2/56))
||LD *AR4,B //B=1
MASR
*AR2-,*AR3+,B,A //A= 1-x^2/12(1-x^2/30(1-x^2/56))
SFTA
A,-1,A
NEG
A
MPYA
*AR2+ //B=1-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
长期以来,信号处理技术—直用于转换或产生模拟或数字信号。其 中应用的最频繁的领域就是信号的滤波。此外,从数字通信、语音、音 频和生物医学信号处理到检测仪器仪表和机器人技术等许多领域中,都 广泛地应用了数字信号处理技术。数字信号处理己经发展成为一项成熟 的技术,并且在许多应用领域逐步代替了传统的模拟信号处理系统。而 本文中基于DSP技术设计的正弦波信号发生器已被广泛地应用于通信、 仪器仪表和工业控制等领域的信号处理系统中。 1.2 课题内容
利用基于CCS开发环境中的C54x汇编语言来实现正弦信号发生装 置。 2、 设计原理
一般情况,产生正弦波的方法有两种:查表法和泰勒级数展开法。 查表法是使用比较普遍的方法,优点是处理速度快,调频调相容易,精 度高,但需要的存储器容量很大。泰勒级数展开法需要的存储单元少, 具有稳定性好,算法简单,易于编程等优点,而且展开的级数越多,失 真度就越小。
/A/R0-->K_theta(increment) /(/AR1)=X(rad)
/A/R6→sin(x) /f/orm sin0(deg.)—sin90(deg) /重/ 复执行块语句(下条语句开始
loop1-1)91次
AR1,A
#d_xs,DP
A,@d_xs
/(/A)低16位→d_xs
A,@d_xc
.text
定//义文本代码段
SSBX
FRCT
/F/RCT=1以清除冗余符号位
STM
#d_coef_c,AR5 /A/R5指向d_coef_c首地址
RPT
#3
重//复下条指令4次
MVPD
#table_c,*AR5+ /把/ table_c中的数复制到中
AR5
STM
#d_coef_c,AR3 /A/R3指向d_coef_c首地址
RET
//返回
cosx:
.def
d_xc,d_cosx /定/ 义标号d_xc,d_cosx
d_coef_c .usect "coef_c",4 //为coef_c保留4个存储空间
.data
/定/义数据代码段
table_c .word 0249h
/c/1=1/(7*8)
.word 0444h
/c/1=1/(6*5)
/修/ 改辅助寄存器AR1
#sin_x+89,AR7 /s/in91(deg.)—
#88,BRC loop2-1
/重/ 复执行下条指令至loop2-1处
*AR7-,A A,*AR6+ #179,BRC
#sin_x,AR7 loop3-1 *AR7+,A A A,*AR6+ #sin_x,AR6 #1,AR0
.word 0aabh
/c/1=1/(3*4)
.word 4000h
/c/1=1/2
d_xc
.usect "cos_vars",1 //为d_xc中cos_vars保存1个存
储单元
d_squr_xc .usect "cos_vars",1 //为d_squr_xc中cos_vars保存1
个
存储单元
空间
c_l_s
.usect "sin_vars",1 //为d_xs中sin_vars保留1个存
储
空间
.text
定//义代码开始段
SSBX
FRCT
/设/ 置FRCT=1以解决冗余符号位
STM
#d_coef_s,AR5 /A/R5指向d_coef_s首地址
RPT
#3
重//复下条指令4次
MVPD
#table_s,*AR5+ /t/able_s中的数复制到AR5指向
STACK: .usect "STACK",10 //为堆栈保留10个存储空间
k_theta .set
286
/t/heta=pi/360(0.5deg)
PA0
.set
0
_c_int00
.text
定//义文本程序代码段
STM
#STACK+10,SP /设/ 置堆栈指针
STM STM STM STM RPTB 至