📄 iirrt.asm
字号:
.title "iir.asm"
.copy "init.h"
.copy "vector.h"
.def start
; .data
.bss B0,5,1
B1 .equ B0+1
B2 .equ B0+2
B3 .equ B0+3
B4 .equ B0+4
.bss A1,4,1
A2 .equ A1+1
A3 .equ A1+2
A4 .equ A1+3
.bss Y0,5,1
Y1 .equ Y0+1
Y2 .equ Y0+2
Y3 .equ Y0+3
Y4 .equ Y0+4
.bss W0,5,1
W1 .equ W0+1
W2 .equ W0+2
W3 .equ W0+3
W4 .equ W0+4
.data
INPUT .copy "testdata.dat" ;模拟输入在数据存储区0x300
OUTPUT_BUFF .sect "output" ;输出数据在数据区0x2000
OUTPUT .space 128*16 ; K_FRAME_SIZE*16 ;
.text
;b _START
;滤波器系数的分子系数b0=02Ah,b1=0A9h,b2=0FEh,b3=0A9h,b4=02Ah。
B_tbl: .word 02Ah,0A9h,0FEh,0A9h,02Ah ;coefficient table :B
;滤波器系数的分母系数-a1=4ABEh,-a2=0B7A8h,-a3=20BBh,-a4=0FA38h
A_tbl: .word 4ABEh,0B7A8h,20BBh,0FA38h ;coefficient table :A
w_tbl: .word 0,0,0,0,0 ;data table :w
y_tbl: .word 0,0,0,0,0 ;data table :y
*
*transfer coefficients and values from program memory to
*data memory
*
LAR AR2,#2000h ;#800h output adddr
LAR AR1,#300h ;input addr
;LACL #111b
;SACL 73h
;OUT 73h,PMST
start: setc INTM ;global interrupt disable
;LAR AR3,#127
mar *,ar4 ;select AR4
lar ar4,#B0 ;move coefficients from
rpt #4 ;program memory to data memory
blpd #B_tbl,*+
lar ar4,#A1
rpt #3
blpd #A_tbl,*+
lar ar4,#W0 ;move data from program memory
rpt #4 ;to data memory
blpd #w_tbl,*+
lar ar4,#Y1
rpt #3
blpd #y_tbl,*+
*
*begin filter calculations
*
ldp #W0
lacl #0 ;set ACC to 0
lt W4 ;begin sum of products
mpy B4 ;(w4*A4)+
ltd W3
mpy B3 ;(w3*A3)+
ltd W2
mpy B2 ;(w2*A2)+
ltd W1
mpy B1 ;(w1*A1)+
ltd W0
mpy B0 ;(w0*A0)
APAC
ltd Y4
mpy A4 ; (y4*B4)+
ltd Y3
mpy A3 ; (y3*B3)+
ltd Y2
mpy A2 ; (y2*B2)+
ltd Y1
mpy A1 ; (y1*B1)+
apac
SACH Y0,3
DMOV Y0
LARP 2 ;
SACH *+,3 ;store result
b start ;continuous loop-no exit
inpt1: ret ; Unused interrupt routines
inpt23: ret
timer: ret
codtx: ret
codrx: ret
uart: ret
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -