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

📄 fixed.asm

📁 文件为美军4800bps语音压缩编码标准在TI的DSP芯片TMS320C5X上的实时实现源代码。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        SACL    APKF
        B       U18
U16     LT      APK1F
        MPY     #15
        LACC    #512
        APAC
        BSAR    4
        SACL    APKF
U18       

;        if( (abs(dmskf-(dmlkf>>2))>=(dmlkf>>5)) || (ykf<0x600) || (tdk==1) )
;                {       acc=15*(long)apk1f+512;
;                        apkf=acc>>4;}
;                else { if(trk==1) apkf=0x100;
;                        else apkf=(15*(long)apk1f)>>4;}



;used for reconstruct
        LACC    DQK
        NOP
        XC      2,GT
        SPLK    #1,S0
        XC      2,EQ
        SPLK    #0,S0
        XC      2,LT
        SPLK    #-1,S0

        LACC    DQK1
        NOP
        XC      2,GEQ
        SPLK    #1,S1
        XC      2,LT
        SPLK    #-1,S1

        LACC    DQK2
        NOP
        XC      2,GEQ
        SPLK    #1,S2
        XC      2,LT
        SPLK    #-1,S2

        LACC    DQK3
        NOP
        XC      2,GEQ
        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
        LDP     #SLK
        LACC    SLK
        SUB     SEK
        SACL    DK
        RET

ADAPTIVEQUANTIZER
        LDP     #DK
        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
        LDP     #I0K
        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
        LDP     #YUK1F
        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
        LDP     #APK1F
        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
        LDP     #DQK1
        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

	;*******************************************************
	;*THIS SUBROUTINE INITIALIZE C50'S REGISTERS AND MEMORY* 
	;*******************************************************
C50_INIT
	SETC    OVM
	SETC    SXM
	CLRC    HM
	CLRC    CNF             ;map DARAM B0 into data memory
	LDP     #0
        ;;;;;;;;;;;;;;;;;;;;;;;;;
;       SPLK    #0834h,PMST     ;map 9K SARAM into both program and data memory
				;relocate interrupt vector at 0x800h
	SPLK    #0010h,CWSR     ;SET BIG MODE BIT
	SPLK    #0FFFFh,IOWSR   ;SET I/O WAIT STATUS TO 3 
	RET





⌨️ 快捷键说明

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