⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_fir.asm

📁 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 + -