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

📄 tlsppc.asm

📁 文件为美军4800bps语音压缩编码标准在TI的DSP芯片TMS320C5X上的实时实现源代码。
💻 ASM
字号:
	.version        50
	.mmregs
	.BSS LPC0,1
	.BSS LPC,10
	.BSS XF,1
	.BSS XX,1
	.BSS ACCBUF,2
        .BSS SIGNFLAG,1
	;--------
P10	.SET 10
P10_1	.SET 9
P10_2	.SET P10-2
HP10	.SET P10/2
HP10_1	.SET HP10-1
	;-----------
LSPPC_A	 .USECT "WARRAY",6*2
LSPPC_A1 .USECT "WARRAY",6*2
LSPPC_A2 .USECT "WARRAY",6*2
LSPPC_B	 .USECT "WARRAY",6*2
LSPPC_B1 .USECT "WARRAY",6*2
LSPPC_B2 .USECT "WARRAY",6*2
LSPPC_P  .USECT "WARRAY",5
LSPPC_Q  .USECT "WARRAY",5
	;-----------
	.data
LSP	.INT 34eh,8ceh,1093h,171eh,24a6h,27b3h,2d4dh,34b3h,39b5h,3b57h
COSCOR  .INT 0e216H,2078H,0fd54H,1eH,0ffffH
LSPCOS	.COPY "LSPCOS.DAT"	;cos(i* pi * 0.5*(11.0-2*j)/N) *0x8000u

	;----------
	.text
	CALL C50_INIT
	call LSPPC
HERE:	NOP
	B HERE
;===================================================
LSPPC
	LDP #XX
	LACC #2
	SAMM INDX
;===================================================
;  for (i = 0; i < noh + 1; i++)
;  { a[i] = 0.;     a1[i] = 0.;    a2[i] = 0.;
;    b[i] = 0.;     b1[i] = 0.;    b2[i] = 0.;  }  //LONG
;===================================================
	LACC #0
	MAR *,AR0
	LAR AR0,#LSPPC_A
	RPT #11
	  SACL *+
	LAR AR0,#LSPPC_A1
	RPT #11
	  SACL *+
	LAR AR0,#LSPPC_A2
	RPT #11
	  SACL *+
	LAR AR0,#LSPPC_B
	RPT #11
	  SACL *+
	LAR AR0,#LSPPC_B1
	RPT #11
	  SACL *+
	LAR AR0,#LSPPC_B2
	RPT #11
	  SACL *+
;===================================================
;  for (i = 0; i < noh; i++)
;  { acc=(long)freq[2*i]*4l;
;    p[i]=-wcos(acc);		//2.14
;    acc=(long)freq[2*i+1]*4l;
;    q[i]=-wcos(acc);		 }
;===============ARP=0====================================
	;LAR AR0,#LSP
	LACC ADDR_LSP
	SAMM AR0
	LAR AR1,#LSPPC_P
	LAR AR2,#LSPPC_Q
	LAR AR7,#HP10_1
LSPPC_PQ
	  LACC *+,2,AR1
	  CALL WCOS
	  MAR *,AR1
	  NEG
	  SACL *+,0,AR0
	  LACC *+,2,AR2
	  CALL WCOS
	  MAR *,AR2
	  NEG
	  SACL *+,0,AR7
       BANZ LSPPC_PQ,*-,AR0
;===================================================
;  xf = 0.0;
;  for (k = 0; k < no + 1; k++)
;  { xx = 0.0;
;    if (k == 0)  xx = 0x7fff; //1.0; 4.12
;    a[0] = xx + xf;    b[0] = xx - xf;
;    xf = xx;
;===================================================
	LAR AR0,#LPC-1
	LACC #0
	SACL XF
	LAR AR7,#P10
LSPPC_K
	LACC #0
	SACL XX
	LAR AR3,#LSPPC_B
	LAMM AR7
	SUB #P10
	BCND LSPPC_NOTK0,NEQ
	LACC #7FFFH
	SACL XX
LSPPC_NOTK0
	MAR *,AR3
	LACC XX
	SUB XF
	SACL *+	;B[0]
	SACH *-
	LAR AR3,#LSPPC_A
	LACC XX
	ADD XF
	SACL *+
	SACH *-
	LACC XX
	SACL XF
;===================================================
;    for (i = 0; i < noh; i++)
;    { acc=a1[i];       j=0;
;      while(acc>0x7fff || acc<-0x8000l) { acc>>=1;j++;}
;      acc=acc*p[i];	      acc=acc>>(14-j);
;      a[i + 1] = a[i] + acc+ a2[i];
;      a2[i] = a1[i];      a1[i] = a[i];}
;===================================================
	LAR AR1,#LSPPC_P
	LAR AR4,#LSPPC_A1
	LAR AR5,#LSPPC_A2
	LACC #HP10_1
	SAMM BRCR
	MAR *,AR4
	RPTB LSPPC_IA-1
	   MAR *+
	   LACC *-,16
	   OR *,AR6
	   LAR AR6,#-2
	   RPT #15
	    NORM *+
	   SACH ACCBUF
	   NOP
	   NOP
	   MAR *,AR1
	   LT *+,AR3
	   MPY ACCBUF
	   LAMM AR6
	   SAMM TREG1
	   PAC
	   SATL
	   SACB
	   ;---------
	;      a[i + 1] = a[i] + acc+ a2[i];
	   MAR *+
	   LACC *-,16
	   OR *0+,AR5
	   ADDB
	   SACB
	   MAR *+
	   LACC *-,16
	   OR *,AR3
	   ADDB
	   SACL *+
	   SACH *0-,0,AR4	;->A[I]H
	;  ****  a2[i] = a1[i];
	   MAR *+
	   LACC *-,16
	   OR *,AR5
	   SACL *+
	   SACH *+,0,AR3
	;      a1[i] = a[i];}	->A[I]H
	   LACC *-,16
	   OR *0+,AR4
	   SACL *+
	   SACH *+
LSPPC_IA
;===================================================
;    for (i = 0; i < noh; i++)
;    { acc=b1[i];       j=0;
;      while(acc>0x7fff || acc<-0x8000l) { acc>>=1;j++;}
;      acc=acc*q[i];	      acc=acc>>(14-j);
;      b[i + 1] = b[i] + acc+ b2[i];
;      b2[i] = b1[i];      b1[i] = b[i]; }
;===================================================
	LAR AR3,#LSPPC_B
	LAR AR1,#LSPPC_Q
	LAR AR4,#LSPPC_B1
	LAR AR5,#LSPPC_B2
	LACC #HP10_1
	SAMM BRCR
	MAR *,AR4
	RPTB LSPPC_IB-1
	   MAR *+
	   LACC *-,16
	   OR *,AR6
	   LAR AR6,#-2
	   RPT #15
	    NORM *+
	   SACH ACCBUF
	   NOP
	   NOP
	   MAR *,AR1
	   LT *+,AR3
	   MPY ACCBUF
	   LAMM AR6
	   SAMM TREG1
	   PAC
	   SATL
	   SACB
	   ;---------
	;      b[i + 1] = b[i] + acc+ b2[i];
	   MAR *+
	   LACC *-,16
	   OR *0+,AR5
	   ADDB
	   SACB
	   MAR *+
	   LACC *-,16
	   OR *,AR3
	   ADDB
	   SACL *+
	   SACH *0-,0,AR4	;->A[I]H
	;  ****  b2[i] = b1[i];
	   MAR *+
	   LACC *-,16
	   OR *,AR5
	   SACL *+
	   SACH *+,0,AR3
	;      b1[i] = b[i];}	->A[I]H
	   LACC *-,16
	   OR *0+,AR4
	   SACL *+
	   SACH *+
LSPPC_IB
;===================================================
;    acc=(int)(a[noh] + b[noh])>>3;
;    if (k != 0)    pc[k] = acc;
;===================================================
	LAR AR3,#LSPPC_A+11
	LAR AR4,#LSPPC_B+11
	MAR *,AR3
	LACC *-,16
	OR *,AR4
	SACB
	LACC *-,16
	OR *,AR0
	ADDB
	RPT #2
	 SFR
	SACL *+,0,AR7
      BANZ LSPPC_K,*-,AR3
;===================================================
;  pc[0] = 1.0*0x2000;
;===================================================
	MAR *,AR0
	LACC #2000H
	LAR AR0,#LPC0
	SACL *
;===================================================
	RET
;===================================================
	.include "c50_init.asm"
	;---------------
	.include "wcos1.asm"
	.include "wcos.asm"
	.end

⌨️ 快捷键说明

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