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

📄 ale_fixpt_c54x.asm

📁 用dsp解压mp3程序的算法
💻 ASM
字号:
***************************************************************
*  ale_fixpt_c54x.asm - Assembly program using C54x assembly
*                       programming for ALE on CCS Simulator
*
***************************************************************
* Section allocation
*
		.def	 start
out_buffer	.usect "out",500	; reserve 500 locations for y
err_buffer	.usect "error",500	; reserve 500 locations for error
coeff		.usect "coeff",16	; reserve 16 locations for coefficients

		.sect  "coeff_table"
init_coeff	.int	 0,0,0,0,0,0,0,0
       		.int	 0,0,0,0,0,0,0,0
       		
		.sect  "indata"
in_buffer   	.copy  "in1_int.dat"   	; copy in1_int.dat to memory labeled in_buffer

	    	.sect  "adapt"
two_mu      	.int   338		; mu = 33(0.001); 338(0.01); 655(0.02) 
two_mu_err	.int   125			
			
		.mmregs
		.text			; create code section
			
* Copy data to vector x using indirect addressing mode

start:
	SSBX	FRCT			; on fractional mode
	SSBX	SXM			; on sign extension mode
	RSBX	OVM			; on overflow mode
copy:	
	STM	#coeff,AR2		; AR1 pointing to coeff
	RPT	#15           		; repeat next instruction 16 times
	MVPD    init_coeff,*AR2+ 	; copy the init_coeff to coeff
	
* Setup the pointers to point at the coeff and data samples

	STM	#coeff, AR2		; setup the pointer for coeff	
	STM	#in_buffer,  AR3	; setup the pointer for in_buffer
	STM	#out_buffer, AR4	; setup the pointer for out_buffer
	STM	#err_buffer, AR1	; setup the pointer for err_buffer
	STM	#1, AR0
	STM	#499, AR6
	STM     #16, BK			; circular buffer for coeff at 16-taps	
        LD      #two_mu_err, DP
	LD      @two_mu_err, T          ; init T=two_mu_err
loop:	
	LD      #0, B			; clear Acc B for filter output
	STM	#14, BRC		; loop (16-2)=14 times
	RPTBD	adapt_end-1
	MPY     *AR3, A                 ; A = 2*mu*err*input 
	LMS     *AR2, *AR3+             ; B = a0*x0+0 || A=e0+A (A = a0)
	; RPTB starts here
	ST      A, *AR2+0%		; updates coeff and 
||  	MPY     *AR3,A			; A = x1*T(2*mu*err) in parallel
    	LMS     *AR2, *AR3+             ; B = filtered output || A=e+A(A =ai)
adapt_end:
	STH	A, *AR2+0% 		; store final coeff
	STH	B, *AR4			; store final result
	LD      *AR3, A
	SUB     *AR4+,A			; obtain the error signal
	STL	A, *AR1                 ; store error signal
	LD      @two_mu,T
	MPY     *AR1+,A
	STH     A, @two_mu_err
	LD      @two_mu_err,T
	MAR	*+AR3(#-15)		; reset the input vector back by 15 time instant
   	 BANZ    loop,*AR6-
complete:
	NOP	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -