五、实验心得
通过此次实验我掌握利用DSP产生正弦信号的原理,熟悉子程序调用的程序结构以及堆栈的使用,掌握CCS的图形输出操作,本次实验内容有阅读和理解Sin.s54;调试正弦波发生器;加入断点,并选取图形观测,利用动画及时更新;对比前两次实验,难度有所增加,但是在老师和助教的精心指导下,顺利完成实验,几次实验之后,我认识到实验之前预习的必要性,所以以后的实验中,我会争取做到每一次实验都提前预习。
附录:实验程序
;****************************************************************************** ; SJTU DSP Tech. Center
; Copyright (c) 2003 SJTU DSP Tech. Center. All Rights Reserved. ;
; Description:
; TMS320C54x Program for Students Experiment ;
; History:
; Date Authors Changes ; 2003/08/01 Fu Xuan Created.
;******************************************************************************
STACK_ADDR .set 0x0500
STEP .set 0x0900 ;delta x (must be positive), the more the higher frequency
;T=65536/STEP, f=1/T
.bss sin_out, 1
.mmregs
.global main
.text
main:
stm #STACK_ADDR, SP
stm #0x00A8, PMST ;IPTR=0x0080
stm #0x0000, SWWSR ;software wait status register
sub A
ssbx CPL ;direct address using SP ssbx FRCT ;fraction mode ssbx OVM ;overflow mode ssbx SXM ;sign extension
stm #sin_out, AR6
sin_loop:
pshm AG ;save current x ;ddian OK pshm AH ;ddian OK pshm AL ;ddian OK
call calculate_sin ;-pi <= x <= pi ;ddian OK
sth A, *AR6 ;store sin(x), add probe point ;ddian OK
popm AL ;ddian OK popm AH ;ddian OK popm AG ;ddian OK
add #STEP, A ;add delta ;ddian OK
sub #0x7fff, A, B ;test if x>pi, B=A-pi ;ddian OK bc normal_increase, BLT;ddian OK ld #0x8000, A ;A=-pi
add B, A ;A=B+(-pi)=x - 2*pi normal_increase:
b sin_loop ;ddian OK dead_loop: nop nop nop nop
b dead_loop
;****************************************************************************** sign .set 0 ;local variable
calculate_sin:
frame -1 ;allocate sign
nop ;no direct addressing next frame
st #0, @sign ;decide sign, 0 for 1st and 2nd quadrant, 1 for 3rd and 4th quadrant xc 2, ALT st #1, @sign
abs A ;change to 1st and 2nd quadrant sub #0x4000, A, B ;test for 1st quadrant
bc first_quadrant, BLEQ;if not change to 1st quadrant sub #0x7fff, A ;As sin(pi-x)=sinx, let x=pi-x neg A
first_quadrant:
stm #coef, AR2
stlm A, T ;T=x ld *AR2+, 16, A ;AH=C5 ld *AR2+, 16, B ;BH=C4
rpt #5-1 ;AH=C5*x^5+C4*x^4+C3*x^3+C2*x^2+C1*x+0 poly *AR2+
ld @sign, B ;pick out sign sfta A, 3 ;make Q15 format
nop ;nop for B condition test by xc xc 1, BNEQ ;test sign neg A ;sin(-x)=-sinx
frame 1 ret
;****************************************************************************** .sect \
int_RESET:
b main nop nop
.space 124*16
;sin(x)=0 + 3.140625x + 0.02026367x^2 - 5.325196x^3 + 0.5446778x^4 + 1.800293x^5 .data
coef: ;As the max value is -5.325196, so Q12 is used .word 0x1cce ;1.800293 * 4096 .word 0x08b7 ;0.5446778 * 4096 .word 0xaacc ;-5.325196 * 4096 .word 0x0053 ;0.02026367 * 4096 .word 0x3240 ;3.140625 * 4096 .word 0x0000 ;0 .end
;end of Sin.s54
相关推荐: