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

📄 intan.asm

📁 文件为美军4800bps语音压缩编码标准在TI的DSP芯片TMS320C5X上的实时实现源代码。
💻 ASM
字号:
;SUBLSP	.USECT "WARRAY",40
;OLDLSP	.USECT "WARRAY",10
;	.DATA
;INTANW	.INT 7000H, 5000H, 3000H, 1000H, 1000H, 3000H, 5000H, 7000H
;LSP	.INT 34eh,8ceh,1093h,171eh,24a6h,27b3h,2d4dh,34b3h,39b5h,3b57h
;LSPOLD  .INT 3d7H,666H,0b85H,10a4H,1852H,1d71H, 251fH,2a3dH,31ecH,3852H
; wsublsp[4][10]:
; 3c5H, 6b3H, c26H, 1173H, 19dcH, 1eb9H, 2624H, 2b8bH, 32e5H, 38b2H,
; 3a3H, 74dH, d6aH, 1311H, 1cf1H, 2149H, 2830H, 2e29H, 34d7H, 3973H,
; 381H, 7e7H, eadH, 14b0H, 2006H, 23daH, 2a3bH, 30c6H, 36c9H, 3a35H,
; 35fH, 881H, ff1H, 164eH, 231bH, 266aH, 2c47H, 3364H, 38bbH, 3af6H,

;=================================
INTAN
	LDP #IBUF
	LAR AR0,#SUBLSP
	LAR AR1,#INTANW
	LAR AR4,#INTANW+4
	LACC #15
	SAMM TREG1
;==========================================
;  for (i = 0; i < nn; i++)
;  {  for (j = 0; j < no; j++)
;      { //lsp[i][j] = intw[0][i]*lspold[j] + intw[1][i]*lspnew[j];
;	p32= (long)intw[0][i]*lspold[j] + (long)intw[1][i]*lspnew[j];
;	lsp[i][j]=p32>>15;      }
;==========================================
	LAR AR7,#3
	LAMM AR0		;PIPELINE
	;PUSH
	SACL ACC_PUSH
	MAR *,AR2
INTAN_FOR_I
	LAR AR2,#LSPOLD
	LAR AR3,#LSP
	LACC #P10_1
	SAMM BRCR
	;MAR *,AR2
	RPTB INTAN_FOR_J-1
	  LT *+,AR1
	  MPY *,AR3
	  LTP *+,AR4
	  MPY *,AR0
	  APAC
	  SATL
	  SACL *+,0,AR2
INTAN_FOR_J  	;ARP=AR1
;==========================================
;     for (j = 1; j < no; j++)
;    { if (lsp[i][j] < lsp[i][j - 1])
;      {tempfreq = lsp[i][j];
;	lsp[i][j] = lsp[i][j - 1];
;	lsp[i][j - 1] = tempfreq;   }    }
;==========================================
	MAR *,AR0
	SBRK #10
	LACC #8
	SAMM BRCR
	LACC *+
	SACB
	RPTB INTAN_MONO1-1
	   LACC *
	   CRGT
	   BCND INTAN_MONO1_1,C		;jump if lsp[i][j]>=lsp[i][j-1]
	   LACC *-
	   SACL *+
	   LACB
	   SACL *
INTAN_MONO1_1
	   MAR *+
INTAN_MONO1
;==========================================
;    for (j = 1; j < no; j++)
;    { if (lsp[i][j] < lsp[i][j - 1])
;      nonmono = TRUE;    }
;==========================================
	SBRK #P10
	LACC #8
	SAMM BRCR
	LACC *+
	SACB
	RPTB INTAN_MONO2-1
	  LACC *+
	  CRGT
	  BCND INTAN_NOMONO,NC
INTAN_MONO2
	B INTAN_NEXT_I
;==========================================
;    if (nonmono)
;    { for (j = 0; j < no; j++)
;      { if (i == 0) lsp[i][j] = oldlsp[j];
;	else        lsp[i][j] = lsp[i - 1][j];
;      }         }
;  }
;==========================================
INTAN_NOMONO
	;POP
        LACC ACC_PUSH
	;PUSH
	SAMM AR0	;PIPELINE
	SUB #SUBLSP
	BCND INTAN_I_0,EQ
	LAMM AR0
	SUB #P10
	B INTAN_NOMONO_1
INTAN_I_0
	LACC #OLDLSP
INTAN_NOMONO_1
	SAMM BMAR
	MAR *,AR0
	RPT #P10_1
	 BLDD BMAR,*+
	;--------------
INTAN_NEXT_I
	;POP
	LACC ACC_PUSH
	ADD #10
	;PUSH
	SACL ACC_PUSH
	SAMM AR0
	MAR *,AR1
	MAR *+,AR4
	MAR *+,AR7
	BANZ INTAN_FOR_I,*-,AR2
;==========================================
;  for (j = 0; j < no; j++)
;  { lspold[j] = lspnew[j];
;    oldlsp[j] = lsp[nn][j];  }
;==========================================
	LAR AR0,#LSP
	MAR *,AR0
	LACC #LSPOLD
	SAMM BMAR
	RPT #P10_1
	  BLDD *+,BMAR
	LACC #OLDLSP
	SAMM BMAR
	LAR AR0,#SUBLSP+30
	RPT #P10_1
	  BLDD *+,BMAR
INTAN_RET
	RET
;==========================================

⌨️ 快捷键说明

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