📄 fir.s54
字号:
;******************************************************************************
; SJTU DSP Tech. Center
; Copyright (c) 2001 SJTU DSP Tech. Center. All Rights Reserved.
;
; Description:
; TMS320C54x Program for Students Experiment
;
; History:
; Date Authors Changes
; 2001/07/23 Zheng Yigang Created.
;******************************************************************************
STACK_ADDR .set 0x0500
SIZE .set 41
LENGTHOFINPUT .set 1000
.bss tapin1, 2*SIZE ;make sure data buffer match the alignment
.bss tapin2, 2*SIZE
.bss newbuffer, SIZE
.bss oldbuffer, SIZE
.bss output1, LENGTHOFINPUT
.bss output2, LENGTHOFINPUT
.bss output3, LENGTHOFINPUT
.bss input, LENGTHOFINPUT
.mmregs
.global main
coef .usect "coef", SIZE ;make sure data buffer match the alignment
;=============================================================================
.data
FIR_Coeff:
.word -22,24,45,10,-47 ;in Q16 frame
.word -55,15,89,59,-68
.word -141,-32,161,186,-49
.word -286,-184,210,418,94
.word -448,-503,132,745,472
.word -526,-1041,-231,1110,1250
.word -331,-1895,-1230,1428,2966
.word 709,-3745,-4869,1613,13592
.word 23161
;==============================================================================
;==============================================================================
.text
main:
stm #STACK_ADDR, SP
stm #0x00a8, PMST ;store IPTR
stm #0x0000, SWWSR
ssbx FRCT ;set fraction mode
rsbx OVM ;no saturation
ssbx SXM ;sign extension
;load coefficients to coef
stm #coef, AR1
rpt #SIZE-1
mvpd FIR_Coeff, *AR1+
;copy last half of coefficients because of its symmetry
stm #coef, AR4
stm #coef+2*SIZE-1, AR2
rpt #SIZE-1
mvdd *AR4+, *AR2-
;set probe point to get input data
nop
call fir1
call fir2
call fir3
dead_loop:
nop
nop
nop
nop
b dead_loop
;==========================================================================
; fir1,use circular buffer
;==========================================================================
fir1:
;clear tapin buffer
stm #tapin1, AR2 ;make sure tapin1 mathc the alignment
rptz A, #2*SIZE-1
stl A, *AR2+
;point initialize
stm #tapin1, AR3
stm #coef+2*SIZE-1, AR4
stm #2*SIZE, BK
stm #-1, AR0
stm #input, AR2
stm #output1, AR5
;filtering------------------------
stm #LENGTHOFINPUT-1, BRC
rptb next1-1
mvdd *AR2+, *AR3+0%
rptz A, #2*SIZE-1
mac *AR3+0%, *AR4+0%, A
sth A, *AR5+
next1:
ret
;============================================================================
; fir2,use single linear buffer
;============================================================================
fir2:
;clear tapin buffer
stm #tapin2, AR2
rptz A, #2*SIZE-1
stl A, *AR2+
stm #input, AR2
stm #output2, AR0
stm #coef, AR4
stm #LENGTHOFINPUT-1, BRC
rptbd next2-1
stm #tapin2+2*SIZE-1, AR6
;filtering------------------------
mvmm AR6, AR3
mvdd *AR2+, *AR3
mvmm AR4, AR5
rptz A, #2*SIZE-1
mac *AR3-, *AR5+, A
sth A, *AR0+
;update buffer
mar *AR3+ ;AR3==>tapin2
mvmm AR3, AR5
mar *AR5+ ;AR5==>tapin2+1
rpt #2*SIZE-2
mvdd *AR5+, *AR3+
next2:
ret
;============================================================================
; fir2, use dual linear buffers
;============================================================================
fir3:
;clear tapin buffer
stm #newbuffer, AR2
rptz A, #SIZE-1
stl A, *AR2+
stm #oldbuffer, AR2
rptz A, #SIZE-1
stl A, *AR2+
;filtering------------------------
stm #input, AR2
stm #output3, AR1
stm #newbuffer+SIZE-1, AR4
stm #oldbuffer, AR6
stm #LENGTHOFINPUT-1, BRC
rptbd next3-1
stm #2, AR0
mvmm AR6, AR3
mvdd *AR2+, *AR4 ;read input
add *AR3+, *AR4-, A
rptz B, #SIZE-1
firs *AR3+, *AR4-, FIR_Coeff
sth B, *AR1+ ;store output
;AR4==>newbuffer-2
;AR3==>oldbuffer+SIZE+1
;update oldbuffer
mvmm AR6, AR3 ;AR4==>oldbuffer
mvmm AR3, AR5
mar *AR5+ ;AR5==>oldbuffer+1
rpt #SIZE-2
mvdd *AR5+, *AR3+
mar *AR4+0 ;AR4==>newbuffer
mvdd *AR4, *AR3
;update newbuffer
mvmm AR4, AR5
mar *AR5+ ;AR5==>newbuffer+1
rpt #SIZE-2
mvdd *AR5+, *AR4+
;AR4==>newbuffer+SIZE-1
next3:
ret
;================================================================================
.sect "vectors"
int_RESET:
b main
nop
nop
.space 124*16
;=================================================================================
;end of fir.s54
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -