📄 main_fir.asm
字号:
.title "main-dsk"
***********************************************************************
* This programme aims for testing the dspvc5402 analogy loopback *
***********************************************************************
.include "regs.h"
.def main
.def BRINT1_ISR
.def FIR
.ref init_5402
.ref init_McBSP
.ref init_AD50
***********************************************************************
* Declare the stack. Size is determined by the linker option -stack. *
* The default value is 1K words. *
***********************************************************************
stack: .usect ".stack",100h
fir_coff .usect "fir_coff",15 ;系数存放
data_buff .usect "data_buff",15 ;数据存放缓冲
*=====================================================================*
* allocate data memory for data table *
*=====================================================================*
length .set 0FFh ; data table of length FFh
.sect ".table"
***********************************************************************
* VARIABLE AND GLOBAL FUNCTION DECLARATIONS *
***********************************************************************
.data
coff .word -71 ;系数16个
.word -26
.word 176
.word 774
.word 1875
.word 3328
.word 4730
.word 5595
.word 5595
.word 4730
.word 3328
.word 1875
.word 774
.word 176
.word -26
.word -71
indata_temp .word 00000h ;indata temp
outdata_temp .word 00000h ;outdata temp
isr_flog .word 00000h ; isr flog
.bss table,200h
***********************************************************************
* BEGINING OF EXECUTABLE CODE *
***********************************************************************
.text
main:
*=====================================================================*
* Init stack pointer. Stack grows from high to low address *
*=====================================================================*
STM #stack+100h,SP
nop
nop
nop
nop
*======================================================================*
* Main code starts from here *
*======================================================================*
ssbx intm ; globally disable all interrupts
call init_5402
call init_McBSP
call init_AD50
nop
nop
ssbx OVM ; OVM = 1 (saturate at overflow)
ssbx FRCT ; ASM = 1 (shift left 1-bit)
ssbx SXM
stm #McBSP1_DRR1,AR4 ; ar4 holds McBSP receive reg addr
stm #McBSP1_DXR1,AR5 ; ar5 holds McBSP xmit reg addr
STM #outdata_temp,AR7
*======================================================================*
* FIR buffer init *
*======================================================================*
fir_init:
SSBX FRCT ;小数运算
STM #fir_coff,AR2 ;AR2指向系数存放首地址
RPT #15
MVPD coff ,*AR2+ ;系数传到fir_coff中
STM #data_buff,AR3 ;
RPTZ A,#15 ;数据缓冲清0
STL A,*AR3+ ;
STM #data_buff+15,AR3 ;指向第一个数据(最老的一个)
STM #fir_coff,AR2 ;AR2指向系数
STM #16,BK ;缓冲区长度
STM #-1,AR0
LD #indata_temp,DP ;设定页指针
NOP
NOP
*======================================================================*
* Enable McBSP1 Tx and Rx and the interrupts *
*======================================================================*
EN_OUTPUT:
STM SPCR2,McBSP1_SPSA
STM #0041h,McBSP1_SPSD ; enable xmtr
nop
nop
STM SPCR1,McBSP1_SPSA
STM #5001h,McBSP1_SPSD ; enable rcvr
nop
nop
STM #7fffh,IFR ; clear pending interrupts, if any
STM #0400h,IMR ; unmask McBSP1 Rx interrupt
NOP
NOP
RSBX INTM ; globally enable all interrupts
WAIT:
NOP
NOP
BITF @isr_flog, 01h ; test for isr_flog = start
BC FIR,TC ; FIR FILTER
NOP
NOP
BD WAIT ; branch to idle loop
nop
nop
FIR:
ST #00H,@isr_flog
LD *AR4 ,B
STL B,*AR3+% ;到数据缓存
;ANDM #0FFFEH,*AR7
LD *AR7,A
STL A,*AR5 ;处理后输出
NOP
NOP
RPTZ A,#15
MAC *AR2+0%,*AR3+0%,A ;
STH A,*AR7 ;SAVE IN DATA BUFFER
NOP
NOP
ANDM #0FFFEH,*AR7
STM #7fffh,IFR
BD WAIT ;back AND reset INTM
RSBX INTM
NOP
NOP
**************************************
* RECIEVER INTERRUPT SERVICE ROUTINE *
**************************************
BRINT1_ISR:
ST #01H,@isr_flog
NOP
NOP
RETD ;back WITHOUT reset INTM
NOP
NOP
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -