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

📄 encchan.asm

📁 TI C54写的G729代码,视线8kbps高质量语音编码,汇编优化
💻 ASM
字号:
        .mmregs

        .include  ..\include\const.h
        .include  ..\include\struct.h
        .include  ..\include\ld8amem.h
        .include  ..\include\tab_ld8a.h

        .text
        .global   _SelEncChannel
        .global   _ResetEncChannel

;---------------------------------------------------------------------------
;   Function Name : SelectChannel
;
;      initialize pointers for the selected channel
;-----------------------------------------------------------------------
;      Initialize pointers to speech vector.
;
;
;   |--------------------|-------------|-------------|------------|
;     previous speech           sf1           sf2         L_NEXT
;
;   <----------------  Total speech vector (L_TOTAL)   ----------->
;   <----------------  LPC analysis window (L_WINDOW)  ----------->
;   |                   <-- present frame (L_FRAME) -->
; old_speech            |              <-- new speech (L_FRAME) -->
; p_window              |              |
;                     speech           |
;                             new_speech
;-----------------------------------------------------------------------
;
;  Input Registers :    A(bit 15 - bit 0) =  G729Speech = &speech_buf
;
;  Modified Registers : DP, A, B, AR2
;
;---------------------------------------------------------------------------
;
;  Output Data : ptr_speech_buf
;                ptr_old_speech
;                ptr_new_speech
;                ptr_speech
;                ptr_pre_hpf_u
;                ptr_wsp_un
;                ptr_lar_old
;                ptr_lsp_old
;                ptr_qlsp_old
;                ptr_prev_lsp_vec
;                ptr_bflat
;---------------------------------------------------------------------------
_SelEncChannel
        PSHM    ST1
        RSBX    CPL
        LD      #ptr_old_speech, DP
        STLM    A, AR2
        nop
        STL     A, ptr_speech_buf
        STL     A, ptr_old_speech

        MAR     *+AR2(L_TOTAL >> 1)
        MVMD    AR2, ptr_speech

        MAR     *+AR2(L_NEXT)
        ADD     #L_TOTAL, A
        SFTL    A, -1, B              ; check even/odd address
        MVMD    AR2, ptr_new_speech
        SFTL    B, 1                  ; if even address
        XC      2, C                  ; else make sure ptr_pre_hpf_u -> even address
                ADD     #1, A, B

        STL     B, ptr_pre_hpf_u

        ADD     #4, B                 ; ptr_wsp_un -> even address
        STL     B, ptr_wsp_un

        ADD     #20, B
        STL     B, ptr_L_exc_err         ; exc_err

        ADD     #32, A

        ADD     #2, A
        STL     A, ptr_lsp_old            ; ptr_lsp_old -> lsp_coef

        ADD     #M, A
        STL     A, ptr_qlsp_old           ; ptr_qlsp_old -> lsp_coef_q

        ADD     #M, A
        STL     A, ptr_prev_lsp_vec       ; ptr_prev_lsp_vec -> prev_lsp_vec

        ADD     #(4 * M), A
        STL     A, ptr_bflat              ; ptr_bflat -> bflat

        ADD     #1, A
        STL     A, ptr_sharp              ; ptr_sharp -> sharp

        ADD     #1, A
        STL     A, ptr_prev_qua_eng       ; ptr_prev_qua_eng -> past_qua_eng

        ADD     #4, A
        STL     A, ptr_mem_syn            ; ptr_mem_syn -> mem_syn

        ADD     #M, A
        STL     A, ptr_mem_w0             ; ptr_mem_w0 -> mem_w0

        ADD     #M, A
        STL     A, ptr_mem_err            ; ptr_mem_err -> mem_err

        ADD     #(M + PIT_MAX), A
        STL     A, ptr_wsp                            ; wsp = old_wsp + PIT_MAX

        ADD     #(L_FRAME + PIT_MAX + L_INTERPOL), A
        STL     A, ptr_exc                            ; exc = old_exc + PIT_MAX + L_INTERPOL

		LD		#Addr_lar_old, A
		STL		A, ptr_lar_old
		
        POPM    ST1
        RET


;---------------------------------------------------------------------------
;   Function Name : ResetChannel
;
;          Initialize data for the selected channel.
;
;---------------------------------------------------------------------------
;
;  Modified Registers : A, AR2, AR3
;
;---------------------------------------------------------------------------
_ResetEncChannel:
        STM     #(G729ASpeechLen >> 1) - 1, BRC

        MVDM    ptr_speech_buf, AR3

        LD      #0, A
        RPTB    #InitData1 - 1

                DST     A, *AR3+
InitData1:


        STM     #M - 1, BRC
        MVDM    ptr_prev_lsp_vec, AR3
        STM     #PrevLspVectQ13, AR2

        RPTB    EndResetLspVec - 1
                MVDD    *AR2,  *AR3+
                MVDD    *AR2,  *AR3+
                MVDD    *AR2,  *AR3+
                MVDD    *AR2+, *AR3+
EndResetLspVec:

        ; initialize lsp coefficients ans bflat

        MVDM    ptr_lsp_old, AR2
        RPT     #M - 1
                MVPD    lsp_coef_init, *AR2+

        MVDM    ptr_qlsp_old, AR2
        RPT     #M - 1
                MVPD    lsp_coef_init, *AR2+

        MVDM    ptr_bflat, AR3
        MVDM    ptr_sharp, AR2
        ST      #1, *AR3             ; bflat = 1
        ST      #SHARPMIN, *AR2      ; sharp = SHARPMIN

        LD      #-14336, A
        MVDM    ptr_prev_qua_eng, AR3
        RPT     #4 - 1
                STL     A, *AR3+


    ; for(i=0; i<4; i++) L_exc_err[i] = 0x00004000L;   /* Q14 */

        MVDM    ptr_L_exc_err , AR3
        LD      #04000h, A
        DST     A, *AR3+           ; DST is not working with RPT
        DST     A, *AR3+
        DST     A, *AR3+
        DST     A, *AR3+

        RET
		
		.data
lsp_coef_init:
        .word   30000, 26000, 21000, 15000, 8000, 0, -8000,-15000,-21000,-26000



⌨️ 快捷键说明

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