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

📄 pole_con.asm

📁 文件为美军4800bps语音压缩编码标准在TI的DSP芯片TMS320C5X上的实时实现源代码。
💻 ASM
字号:
POLE_DEBUG	.SET 0

	.IF POLE_DEBUG
	.version        50
	.mmregs
	.MLIB "MAC.LIB"

	.SECT "DRAM"
Z	.INT 0bdddh,0bdddh,0d806h,0e3d0h,0ed50h,0cdah,033dbh,04655h,044c0h,04221h,03e4bh
	.DATA
A	.INT 0c792h,03088h,0c934h,027c9h,0f22dh,01486h,0f3b3h,0971h,0ead5h,0a38h
;Z	.INT 0bdddh,0bdddh,0d806h,0e3d0h,0ed50h,0cdah,033dbh,04655h,044c0h,04221h,03e4bh
XY	.INT 0fa3eh,0f6h,04fch,06bch,0fe5ah,0fdbfh,0fb9dh,0ffd8h,06h,036h
	.INT 0fa63h,00h,07f8h,0feabh,0fea4h,0fff3h,0ff1bh,0fb65h,0ff22h,0182h
	.INT 0211h,0409h,023h,0fff8h,042ch,0f780h,0fabbh,02b5h,0f44dh,0fc7fh
	.INT 0adh,0267h,01b4h,0fc42h,0943h,0209h,0209h,022fh,0984h,0579h,0438h
	.INT 0fe93h,0b1bh,057h,0fcafh,0fc1ah,02c9h,083h,0fc47h,0192h,00h,0fa17h
	.INT 0fc10h,0589h,0fe09h,0fcf8h,07ceh,0379h,04b7h,030h
	.TEXT
	CALL C50_INIT
	LDP #ACCBUF
	LACC #A
	SACL POLE_A
	LACC #Z
	SACL POLE_Z
	LACC #XY
	SACL POLE_XY
	CALL POLE_CON
HERE:	B HERE
	.BSS ACCBUF,2
	.ENDIF
;========pole_con(a, n, z, xy, len)=========================
;.BSS POLE_A[10], POLE_Z[11], POLE_XY[60]
;ACC ACCB PREG TREG0 INDX=9 BRCR
;AR0,AR1,AR7
;AR0: XY
;BMAR : A
;AR1: Z->DRAM
;---------------------------
	.bss POLE_A,1
	.BSS POLE_Z,1
	.BSS POLE_XY,1
;---------------------------------
POLE_CON
	LACC #9
	SAMM INDX
;=================================
;  for (t = 0; t < len; t++)
;  { acc=xy[t]*0x2000l;
;=================================
	LACC #59
	SAMM AR7
	LAR AR0,POLE_XY
	MAR *,AR0
	LACC POLE_A
	SAMM AR1
	SAMM BMAR	;USED FOR MADS
	LACC POLE_Z
	ADD #1
	SAMM AR1	;->Z[1]
	;----ARP==0
	LACC *,13,AR1
	NEG
POLE_FOR1
	;LACC *,13,AR1
	;NEG
;=================================
;    for (j = n; j > 0; j--)
;    { ax0=a[j]*0x2000;       p32=(long)ax0*(long)z[j];
;      acc -= p32;            z[j]=z[j-1];    }
;    y[n]=-{-x[n]+SUM Ak*y[n-k])
;=======ARP--1==========================
	ZPR
	rpt #9
	 MADS *+		;BMAR->A[],AR1:Z[]
	APAC
	SBRK #11		;->Z[0]
;=================================
;    acc>>=13;	 acc=-acc;
;    if ( labs(acc) > 0x7fff ) acc=(acc<0)?-0x8000l:0x7fff:
;    z[0]=acc;
;=================================
	neg
	BSAR 13		;AR0->Z[0]
	;NEG
	sacb
	ABS
	SUB #7FFFH
	BCNDD POLE_OUT_XY,NC
	  LACB
	  SACL *0+		;z[0]=acc, INDX=9
	  ;-------
	  XC 2,GT
	   LACC #7FFFH
	  XC 2,LT
	   LACC #1,15
	  ;-----
	  MAR *0-
	  SACL *0+		;z[0]=acc, INDX=9
POLE_OUT_XY
	;SACL *0+		;INDX=9
	RPT #8
	 DMOV *-
	DMOV *+,AR0		;AR1->Z[1]
;=================================
;    xy[t]=acc;
;=================================
	SACL *+,0,AR7
	BANZD POLE_FOR1,*-,AR0
	  LACC *,13,AR1
	  NEG
;=================================
	RET
	;---------------
;pole_con(float *a, 10, float *z, float *xy, 60)
;{
;/*  for (t = 0; t < len; t++)
;  { z[0] = xy[t];
;    for (j = n; j > 0; j--)
;    { z[0] -= a[j] * z[j];
;      z[j]  = z[j-1];    }
;    xy[t] = z[0];		  }*/
;  for (t = 0; t < len; t++)
;  { acc=xy[t]*0x2000l;
;    for (j = n; j > 0; j--)
;    { ax0=a[j]*0x2000;       p32=(long)ax0*(long)z[j];
;      acc -= p32;            z[j]=z[j-1];    }
;    acc>>=13;     z[0]=acc;     z[1]=acc;
;    if ( labs(acc) > 0x7fff )
;     { if(acc<0) acc=-0x8000l;
;       else acc=0x7fff;      }
;    xy[t]=acc;
;  } }

;=================================
	.IF POLE_DEBUG
	.INCLUDE "C50_INIT.ASM"
	.ENDIF

⌨️ 快捷键说明

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