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

📄 a11_fir.asm

📁 dsp6713开发板的许多例程.对入门特别有用
💻 ASM
字号:
***************************************************************************       Copyright (C) 1996-2000 Texas Instruments Incorporated*                    All Rights Reserved*       A11_FIR HAND ASSEMBLY - Example 6-69*       From Programmer's Guide*       FINITE IMPULSE RESPONSE FILTER - PERFORMS 2 SAMPLES AT A TIME*                                      - EVEN n >= 2********************************************************************************* ASSEMBLY CODE: *******************	.global _fir_asm	.text_fir_asm:	STW	.D2	B10,*B15--	; push register||	MVK	.S1	50,A2		; set up outer loop counter	MVK	.S1	62,A3		; used to rst x pointer each outer loop||	MVK	.S2	64,B10		; used to rst h pointer each outer loopOUTLOOP:	LDH	.D1	*A4++,B5	; x0 = x[j]||	ADD	.L2X	A4,4,B1		; set up pointer to x[j+2]||	ADD	.L1X	B4,2,A8		; set up pointer to h[1]||	MVK	.S2	8,B2		; set up inner loop counter||[A2]	SUB	.S1	A2,1,A2		; decrement outer loop counter  	LDH	.D2	*B1++[2],B0	; x2 = x[j+i+2]||	LDH	.D1	*A4++[2],A0	; x1 = x[j+i+1]||	ZERO	.L1	A9		; zero out sum0||	ZERO	.L2	B9		; zero out sum1  	LDH	.D1	*A8++[2],B6	; h1 = h[i+1]||	LDH	.D2	*B4++[2],A1	; h0 = h[i]  	LDH	.D1	*A4++[2],A5	; x3 = x[j+i+3]||	LDH	.D2	*B1++[2],B5	; x0 = x[j+i+4]  	LDH	.D2	*B4++[2],A7	; h2 = h[i+2]||	LDH	.D1	*A8++[2],B8	; h3 = h[i+3]||[B2]	SUB	.S2	B2,1,B2		; decrement loop counter  	LDH	.D2	*B1++[2],B0	;* x2 = x[j+i+2]||	LDH	.D1	*A4++[2],A0	;* x1 = x[j+i+1]	LDH	.D1	*A8++[2],B6	;* h1 = h[i+1]||	LDH	.D2	*B4++[2],A1	;* h0 = h[i]  	MPY	.M1X	B5,A1,A0	; x0 * h0||	MPY	.M2X	A0,B6,B6	; x1 * h1||	LDH	.D1	*A4++[2],A5	;* x3 = x[j+i+3]||	LDH	.D2	*B1++[2],B5	;* x0 = x[j+i+4]  [B2]	B	.S1	LOOP		; branch to loop||	MPY	.M2	B0,B6,B7	; x2 * h1||	MPY	.M1	A0,A1,A1	; x1 * h0||	LDH	.D2	*B4++[2],A7	;* h2 = h[i+2]||	LDH	.D1	*A8++[2],B8	;* h3 = h[i+3]||[B2]	SUB	.S2	B2,1,B2		;* decrement loop counter  	ADD	.L1	A0,A9,A9	; sum0 += x0 * h0||	MPY	.M2X	A5,B8,B8	; x3 * h3||	MPY	.M1X	B0,A7,A5	; x2 * h2||	LDH	.D2	*B1++[2],B0	;** x2 = x[j+i+2]||	LDH	.D1	*A4++[2],A0	;** x1 = x[j+i+1]LOOP:  	ADD	.L2X	A1,B9,B9	; sum1 += x1 * h0||	ADD	.L1X	B6,A9,A9	; sum0 += x1 * h1||	MPY	.M2	B5,B8,B7	; x0 * h3||	MPY	.M1	A5,A7,A7	; x3 * h2||[B2]	LDH	.D1	*A8++[2],B6	;** h1 = h[i+1]||[B2]	LDH	.D2	*B4++[2],A1	;** h0 = h[i]  	ADD	.L2	B7,B9,B9	; sum1 += x2 * h1||	ADD	.L1	A5,A9,A9	; sum0 += x2 * h2||	MPY	.M1X	B5,A1,A0	;* x0 * h0||	MPY	.M2X	A0,B6,B6	;* x1 * h1||[B2]	LDH	.D1	*A4++[2],A5	;** x3 = x[j+i+3]||[B2]	LDH	.D2	*B1++[2],B5	;** x0 = x[j+i+4]  	ADD	.L2X	A7,B9,B9	; sum1 += x3 * h2||	ADD	.L1X	B8,A9,A9	; sum0 += x3 * h3||[B2]	B	.S1	LOOP		;* branch to loop||	MPY	.M2	B0,B6,B7	;* x2 * h1||	MPY	.M1	A0,A1,A1	;* x1 * h0||[B2]	LDH	.D2	*B4++[2],A7	;** h2 = h[i+2]||[B2]	LDH	.D1	*A8++[2],B8	;** h3 = h[i+3]||[B2]	SUB	.S2	B2,1,B2		;** decrement loop counter  	ADD	.L2	B7,B9,B9	; sum1 += x0 * h3||	ADD	.L1	A0,A9,A9	;* sum0 += x0 * h0||	MPY	.M2X	A5,B8,B8	;* x3 * h3||	MPY	.M1X	B0,A7,A5	;* x2 * h2||[B2]	LDH	.D2	*B1++[2],B0	;*** x2 = x[j+i+2]||[B2]	LDH	.D1	*A4++[2],A0	;*** x1 = x[j+i+1]	; inner loop branch occurs here  [A2]	B	.S2	OUTLOOP		; branch to outer loop||	SUB	.L1	A4,A3,A4	; reset x pointer to x[j]||	SUB	.L2	B4,B10,B4	; reset h pointer to h[0]||	SUB	.S1	A9,A0,A9	; sum0 -= x0 * h0 (eliminate last sum0)	SHR	.S1	A9,15,A9	; sum0 >> 15||	SHR	.S2	B9,15,B9	; sum1 >> 15	STH	.D1	A9,*A6++	; y[j] = sum0 >> 15	STH	.D1	B9,*A6++	; y[j+1] = sum1 >> 15	NOP	2			; branch delay slots	; outer loop branch occurs here	B	.S2	B3		; return	LDW	.D2	*++B15,B10	; pop register	NOP	4

⌨️ 快捷键说明

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