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

📄 txtpcm.asm

📁 文件为美军4800bps语音压缩编码标准在TI的DSP芯片TMS320C5X上的实时实现源代码。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	SPLK    #1,S3
	XC      2,LT
	SPLK    #-1,S3

	LACC    DQK4
	NOP
	XC      2,GEQ
	SPLK    #1,S4
	XC      2,LT
	SPLK    #-1,S4

	LACC    DQK5
	NOP
	XC      2,GEQ
	SPLK    #1,S5
	XC      2,LT
	SPLK    #-1,S5

	LACC    DQK6
	NOP
	XC      2,GEQ
	SPLK    #1,S6
	XC      2,LT
	SPLK    #-1,S6

;        if( dqk>0 ) s0=1; else {if (dqk==0) s0=0; else s0=-1;}
;        if( dqk1>=0 ) s1=1; else s1=-1;
;        if( dqk2>=0 ) s2=1; else s2=-1;
;        if( dqk3>=0 ) s3=1; else s3=-1;
;        if( dqk4>=0 ) s4=1; else s4=-1;
;        if( dqk5>=0 ) s5=1; else s5=-1;
;        if( dqk6>=0 ) s6=1; else s6=-1;

	LT      S0
	MPY     S1
	SPL     TEMP1           ;TEMP1=S0*S1
	LACC    TEMP1,15
	LT      B1K1F
	MPY     #255
	APAC
	BSAR    8
	SACL    B1KF

	LT      S0
	MPY     S2
	SPL     TEMP1           ;TEMP1=S0*S2
	LACC    TEMP1,15
	LT      B2K1F
	MPY     #255
	APAC
	BSAR    8
	SACL    B2KF

	LT      S0
	MPY     S3
	SPL     TEMP1           ;TEMP1=S0*S3
	LACC    TEMP1,15
	LT      B3K1F
	MPY     #255
	APAC
	BSAR    8
	SACL    B3KF

	LT      S0
	MPY     S4
	SPL     TEMP1           ;TEMP1=S0*S4
	LACC    TEMP1,15
	LT      B4K1F
	MPY     #255
	APAC
	BSAR    8
	SACL    B4KF

	LT      S0
	MPY     S5
	SPL     TEMP1           ;TEMP1=S0*S5
	LACC    TEMP1,15
	LT      B5K1F
	MPY     #255
	APAC
	BSAR    8
	SACL    B5KF

	LT      S0
	MPY     S6
	SPL     TEMP1           ;TEMP1=S0*S6
	LACC    TEMP1,15
	LT      B6K1F
	MPY     #255
	APAC
	BSAR    8
	SACL    B6KF

;        b1kf=(255*(long)b1k1f+((long)(s0*s1)<<15))>>8;
;        b2kf=(255*(long)b2k1f+((long)(s0*s2)<<15))>>8;
;        b3kf=(255*(long)b3k1f+((long)(s0*s3)<<15))>>8;
;        b4kf=(255*(long)b4k1f+((long)(s0*s4)<<15))>>8;
;        b5kf=(255*(long)b5k1f+((long)(s0*s5)<<15))>>8;
;        b6kf=(255*(long)b6k1f+((long)(s0*s6)<<15))>>8;

	LACC    TRK
	BCND    U19,EQ
	LACC    #0
	SACL    A1KF
	SACL    A2KF
	SACL    B1KF
	SACL    B2KF
	SACL    B3KF
	SACL    B4KF
	SACL    B5KF
	SACL    B6KF
U19
;        if( trk==1 ){
;                a1kf=0;
;                a2kf=0;
;                b1kf=0;
;                b2kf=0;
;                b3kf=0;
;                b4kf=0;
;                b5kf=0;
;                b6kf=0;
;                }
;delays
	LACC    B1KF
	SACL    B1K1F
	LACC    B2KF
	SACL    B2K1F
	LACC    B3KF
	SACL    B3K1F
	LACC    B4KF
	SACL    B4K1F
	LACC    B5KF
	SACL    B5K1F
	LACC    B6KF
	SACL    B6K1F

	LACC    DQK5
	SACL    DQK6
	LACC    DQK4
	SACL    DQK5
	LACC    DQK3
	SACL    DQK4
	LACC    DQK2
	SACL    DQK3
	LACC    DQK1
	SACL    DQK2
	LACC    DQK
	SACL    DQK1

	LACC    SRK1
	SACL    SRK2
	LACC    SRK
	SACL    SRK1

	LACC    YUKF
	SACL    YUK1F
	LACC    YLKFH
	SACL    YLK1FH
	LACC    YLKFL
	SACL    YLK1FL
	LACC    APKF
	SACL    APK1F
	LACC    A1KF
	SACL    A1K1F
	LACC    A2KF
	SACL    A2K1F

	LACC    PK1
	SACL    PK2
	LACC    PK
	SACL    PK1
	RET

DELTASIGNAL
	LACC    SLK
	SUB     SEK
	SACL    DK
	RET

ADAPTIVEQUANTIZER
	LACC    DK
	ABS                     ;ACC=ABS(DK)
	BCND    A6,NEQ
	LACC    #1              ;IF ACC=0 THEN ACC=1
A6      MAR     *,AR1
	LAR     AR1,#30
	RPT     #29
	NORM    *-
	BSAR    16
	BSAR    7
	AND     #7Fh
	SACB
	LAMM    AR1
	AND     #0Fh
	SACL    TEMP1
	LACC    TEMP1,7
	ADDB
	SACL    TEMP2

	LACC    TEMP2,2
	SUB     YKF
	BSAR    2
	SACL    TEMP1

	LACC    DK
	NOP
	XC      2,GEQ
	SPLK    #0,I1K
	XC      2,LT
	SPLK    #1,I1K

	LACC    TEMP1
	SUB     #261
	BCND    A4,LT
	LACC    #1
	XOR     I1K
	SACL    I0K
	B       A5
A4      LACC    I1K
	SACL    I0K
A5      RET

INVERSEQUANTIZER
	LACC    I0K
	SAMM    DBMR
	CPL     I1K
	BCND    SS1,NTC
	LACC    #116
	SACL    TEMP1
	B       SS2
SS1     LACC    #365
	SACL    TEMP1
SS2     LACC    YKF
	BSAR    2
	ADD     TEMP1
	SACL    TEMP2
	BSAR    7
	AND     #0Fh
	SUB     #14
	NEG
	SAMM    TREG1          ;TREG1=14-(TEMP2>>7)&0X0F

	LACC    TEMP2
	AND     #7Fh
	ADD     #80h
	SACL    TEMP3           ;TEMP3=0X80+TEMP2&0X7F
	LACC    TEMP3,7
	SATL
	SACL    DQK
	LACC    TEMP2
	NOP
	XC      2,LT
	SPLK    #1,DQK

SS4     LACC    I1K
	BCND    SS5,EQ
	LACC    DQK
	NEG
	SACL    DQK
SS5     RET

QUANTIZERSCALE
	LACC    YLK1FH,16
	SACB
	LACL    YLK1FL
	ORB
	BSAR    6
	SACL    TEMP2           ;TEMP2=YLK1F>>6

	LACC    YUK1F
	SUB     TEMP2
	SACL    TEMP1           ;TEMP1=YUK1F-TEMP2

	SPM     3
	LT      TEMP1
	MPY     ALKF
	LACC    TEMP2
	APAC
	SACL    YKF             ;YKF=(ALKF*TEMP1)>>6+TEMP2
	RET

SPEEDCTL
	LACC    APK1F
	SACB
	LACC    #100h
	CRGT
	BCND    SSS1,C
	LACC    #40h
	SACL    ALKF
	B       SSS2
SSS1    LACC    APK1F
	BSAR    2
	SACL    ALKF
SSS2    RET

RECONSTRUCT
	SPM     3
;;;;;;;;;;;;;;;;;
;        ZAP
;        MAC     B1K1F,DQK1
;        MAC     B2K1F,DQK2
;        MAC     B3K1F,DQK3
;        MAC     B4K1F,DQK4
;        MAC     B5K1F,DQK5
;        MAC     B6K1F,DQK6
;        APAC

	ZAP
	LT      B1K1F
	MPY     DQK1
	APAC
	LT      B2K1F
	MPY     DQK2
	APAC
	LT      B3K1F
	MPY     DQK3
	APAC
	LT      B4K1F
	MPY     DQK4
	APAC
	LT      B5K1F
	MPY     DQK5
	APAC
	LT      B6K1F
	MPY     DQK6
	APAC

	BSAR    8
	SACL    SEZK

	SPM     0
	ZAP
	;;;;;;;;;;;;;;;;;;;;;
;        MAC     A1K1F,SRK1
;        MAC     A2K1F,SRK2
;        APAC

	LT      A1K1F
	MPY     SRK1
	APAC
	LT      A2K1F
	MPY     SRK2
	APAC
	BSAR    14
	ADD     SEZK
	SACL    SEK
	RET

	;srk pcm

LINEARTOPCM

	LACC    SRK             ;srk is a 14bits linear value
	ABS

	SPLK    #0h,PCM
	AND     #0FFE0h
	NOP
	XC      2,NEQ
	SPLK    #10h,PCM
	AND     #0FFC0h
	NOP
	XC      2,NEQ
	SPLK    #20h,PCM
	AND     #0FF80h
	NOP
	XC      2,NEQ
	SPLK    #30h,PCM
	AND     #0FF00h
	NOP
	XC      2,NEQ
	SPLK    #40h,PCM
	AND     #0FE00h
	NOP
	XC      2,NEQ
	SPLK    #50h,PCM
	AND     #0FC00h
	NOP
	XC      2,NEQ
	SPLK    #60h,PCM
	AND     #0F800h
	NOP
	XC      2,NEQ
	SPLK    #70h,PCM

	LACC    SRK
	NOP
	XC      2,GEQ
	OPL     #80h,PCM


	LACC    PCM
	BSAR    4
	AND     #7
	NOP
	XC      2,EQ
	LACC    #1
	SAMM    TREG1
	LACC    SRK
	ABS
	SATL
	AND     #15
	OR      PCM
	XOR     #55h
	SACL    PCM             ;pcm stores PCM value
	RET

	;segnum   qvalue

PCMTOLINEAR
	SPM     0

	XPL     #55h,PCM
	LACC    PCM
	BSAR    4
	AND     #7
	SACL    SEGNUM
	ADD     #4
	SAMM    TREG1
	SPLK    #1,SLK
	LACT    SLK
	SACL    SLK
	SUB     #16
	NOP
	XC      2,EQ
	SPLK    #0,SLK

	LACC    SEGNUM
	SAMM    TREG1
	SPLK    #1,QVALUE
	LACT    QVALUE
	SFR
	SACL    QVALUE
	NOP
	XC      2,EQ
	SPLK    #1,QVALUE

	LACC    PCM
	AND     #0Fh
	SFL
	ADD     #1
	SAMM    TREG0
	MPYU    QVALUE
	LACC    SLK
	APAC
	SACL    SLK

	LACC    PCM
	AND     #80h
	BCND    P1,NEQ
	LACC    SLK
	NEG
        SACL    SLK          ;slk is 14bits linear value
P1      RET


	;******************************************************************
	; NOTE: Here begins three kinds of interrupt routines' processing.*
	;******************************************************************

ISR4    LDP     #IN_BITS

	LACC    #0
	SACL    TIMES
	SACL    VTIMES

	LACC    SWITCH
	XOR     #0001h
	SACL    SWITCH         ; change serial port receiver buffer

	LACC    VSWITCH
	XOR     #0001h
	SACL    VSWITCH        ; change serial port send buffer

	LACC    #BWD_SERIAL1
	SAMM    BMAR
	LACC    SWITCH
	BCND    K1,EQ
	LACC    #BWD_SERIAL2
	SAMM    BMAR

K1      LAR     AR7,#FWD_SERIAL1
	LACC    VSWITCH
	NOP
	XC      2,EQ
	LAR     AR7,#FWD_SERIAL2 ; choose buffer to save received data

	MAR     *,AR7
	RPT     #319
	BLDD    BMAR,*+          ; whether CRC ok or not,save VOICE data to FWD_SERIAL buffer

	RET

RINT    CLRC    XF
	LDP     #ENCODE
	LAMM    DRR
	SACL    PCM
	CALL    PCMTOLINEAR

	CALL    RECONSTRUCT
	CALL    DELTASIGNAL
	CALL    SPEEDCTL
	CALL    QUANTIZERSCALE
	CALL    ADAPTIVEQUANTIZER
	CALL    INVERSEQUANTIZER
	CALL    UPDATE

	LDP     #IN_BITS
	LACC    TIMES
	SUB     #160
	BCND    NODO,GEQ

	LAR     AR1,#BWD_SERIAL1
	LACC    SWITCH
	NOP
	XC      2,NEQ
	LAR     AR1,#BWD_SERIAL2
	MAR     *,AR1
	LACC    TIMES
	SFL
	SAMM    INDX
	NOP
	NOP

	MAR     *0+,AR1
	LACC    I0K
	SACL    *+
	LACC    I1K
	SACL    *

	LACC    TIMES
	ADD     #1
	SACL    TIMES
NODO    RETE

XINT    SETC    XF 
	LDP     #IN_BITS
	LACC    VTIMES
	SUB     #160
	BCND    NOVOICE,GEQ

	LAR     AR1,#FWD_SERIAL1
	LACC    VSWITCH
	NOP
	XC      2,NEQ
	LAR     AR1,#FWD_SERIAL2
	MAR     *,AR1
	LACC    VTIMES
	SFL
	SAMM    INDX
	NOP
	NOP

	LDP     #DECODE
	MAR     *0+,AR1
	LACC    *+
	SACL    I0K
	LACC    *
	SACL    I1K

	CALL    RECONSTRUCT
	CALL    SPEEDCTL
	CALL    QUANTIZERSCALE
	CALL    INVERSEQUANTIZER
	CALL    UPDATE

	CALL    LINEARTOPCM
	LACC    PCM
	AND     #00FFh
	SAMM    DXR

	LDP     #IN_BITS
	LACC    VTIMES
	ADD     #1
	SACL    VTIMES
	RETE
NOVOICE LACC    #54h
	SAMM    DXR
	RETE

⌨️ 快捷键说明

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