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

📄 ph_disp.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     ph_disp() in ph_disp.c                                 **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   xar2---ph_dispState *state                                            **
**   xar3---Word16 x[]                                                     **
**   ar5 ---Word16 cbGain                                                  **                                                 ** 
**   al  ---Word16 ltpGain                                                 **
**   xar4---Word16 inno[]                                                  **
**   ar0 ---Word16 pitch_fac                                               **                       
**                                                                         **
** Outputs:                                                                **
**                                                                         **
**   xar3---Word16 x[]                                                     **
**   xar4---Word16 inno[]                                                  **
**                                                                         ** 
**                                                                         **
** Return value :       none                                               **
**                                                                         **
** Attribute    :       Cycles:8202     Pm: 128                            **
**                      Modified Registers:  all                           **
**                                                                         **
** Programmer   :       Qi Ying                                            **
*****************************************************************************
         .global   _ph_disp
      
         .ref	   ph_imp_mid
         .ref	   ph_imp_low
      	 
         .ref      _buffer3 
         .ref      prevCbGain 
         .ref      prevState
         .ref      lockFull
         .ref      onset
     
_ph_disp:
		  push    xar0
          push    xar3
          movl    xar1,              #3            ;ar1=i
_Loop_179:
          mov     ah,                *+xar2[ar1]
          inc     ar1
          mov     *+xar2[ar1],       ah
          subb    xar1,              #2
          cmp     ar1,               #0
          sb      _Loop_179,         GEQ
          mov     *xar2,             al            ;state->gainMem[0]=ltpGain
          cmp     al,                #14746        ;比较ltpGain和PHDTHR2LTP 
          sb      _Line_198,         GEQ
          cmp     al,                #9830         ;比较ltpGain和PHDTHR1LTP 
          sb      _Line_193,         LEQ
          mov     ar6,               #1            ;ar6=impNr
          sb      _Line_206,         UNC
_Line_193:
          mov     ar6,               #0
          sb      _Line_206,         UNC
_Line_198:           
          mov     ar6,               #2
_Line_206:
          movl    xar3,              #prevCbGain
          mpy     acc,   *xar3,      #16384
          movl    xar3,              #onset        
          lsl     acc,               #3
          add     acc,               #0x0800<<4    ;ah=tmp1
          cmp     ah,                ar5           ;比较cbGain和tmp1
          sb      _Line_212,         GEQ
          mov     *xar3,             #2            ;state->onset=ONLENGTH
          sb      _Line_224,         UNC 
_Line_212:
          cmp     *xar3,             #0
          sb      _Line_224,         LEQ 
          dec     *xar3
_Line_224:            
          cmp     *xar3,             #0
          sb      _Line_245,         NEQ
          mov     ah,                #0            ;ah=i1
          mov     ar1,               #4          
_Loop_228:            
          cmp     *xar2++,           #9830
          sb      _Line_235,         GEQ
          inc     ah                               ;i1=add(i1,1)
_Line_235:
          banz    _Loop_228,         ar1-- 
          subb    xar2,              #5 
          cmp     ah,                #2
          sb      _Line_245,         LEQ
          mov     ar6,               #0            ;impNr=0
_Line_245: 
          movl    xar3,              #prevState
          mov     al,                *xar3
          movl    xar3,              #onset  
          inc     al
          cmp     al,                ar6           ;比较impNr和add(state->prevState, 1)
          sb      _Line_251,         GEQ
          cmp     *xar3,             #0            ;state->onset 
          sb      _Line_251,         NEQ
          dec     ar6
_Line_251:
          cmp     ar6,               #2
          sb      _Line_258,         GEQ
          cmp     *xar3,             #0
          sb      _Line_258,         LEQ
          inc     ar6
_Line_258:
          cmp     ar5,               #10
          sb      _Line_264,         GEQ
          mov     ar6,               #2
_Line_264:
          movl    xar3,              #lockFull
          cmp     *xar3,             #1             ;sub(state->lockFull,1)==0    
          sb      _Line_270,         NEQ
          mov     ar6,               #0
_Line_270:
          movl    xar3,              #prevState
          mov     *xar3,             ar6          ;state->prevState=impNr
          movl    xar3,              #prevCbGain  
          mov     *xar3,             ar5          ;state->prevCbGain=cbGain
          cmp     ar6,               #2
          sb      _Line_331,         GEQ
          push    xar5                            ;cbGain
          mov     ar0,               #0           ;ar0=nze
          movl    xar5,              #_buffer3     ;xar5=ps_poss[]
          movl    xar3,              #_buffer3+40  ;xar3=inno_sav[]
          mov     ar1,               #0           ;ar1=i
_Loop_281:
          cmp     ar1,               #40
          sb      _Line_294,         GEQ
          cmp     *+xar4[ar1],       #0
          sb      _Line_289,         EQ
          mov     *+xar5[ar0],       ar1          ;ps_poss[nze]=i
          inc     ar0                             
_Line_289:
          mov     al,                *+xar4[ar1]  
          mov     *+xar3[ar1],       al           ;inno_sav[i]=inno[i]
          mov     *+xar4[ar1],       #0
          inc     ar1
          sb      _Loop_281,         UNC
_Line_294:
          cmp     ar6,               #0 
          sb      _Line_301,         NEQ
          movl    xar6,              #ph_imp_low  ;xar6=ph_imp
          sb      _Line_307,         UNC
_Line_301:
          movl    xar6,              #ph_imp_mid  ;xar6=ph_imp
_Line_307:
          mov     ar1,               #0           ;ar1=npulse
          dec     ar0                             ;循环次数nze
_Loop_307:
          push    xar0 
          push    xar6
          movz    ar0,               *+xar5[ar1]  ;ar0=ppos
          mov     T,                 *+xar3[ar0]  ;T=inno_sav[ppos] 
_Loop_313:
          cmp     ar0,               #40          ;ar0=i
          sb      _Line_320,         GEQ
          mpy     acc,    T,         *xar6++      ;ph_imp[j++] 
          lsl     acc,               #1           ;ah=tmp1 
          add     *+xar4[ar0],       ah           ;inno[i]=add(inno[i],tmp1) 
          inc     ar0
          sb      _Loop_313,         UNC
_Line_320:
          mov     ar0,               #0
_Loop_320:
          mov     al,                ar0          ;ar0=i
          cmp     al,                *+xar5[ar1]  ;ppos
          sb      _Line_326,         GEQ
          mpy     acc,    T,         *xar6++      ;ph_imp[j++] 
          lsl     acc,               #1           ;ah=tmp1 
          add     *+xar4[ar0],       ah           ;inno[i]=add(inno[i],tmp1) 
          inc     ar0
          sb      _Loop_320,         UNC
_Line_326:
          pop     xar6
          pop     xar0
          inc     ar1                             ;nPulse++
          banz    _Loop_307,         ar0--
          pop     xar5                            ;cbGain
_Line_331:
          pop     xar3                            ;x[]
          pop     xar0                            ;pitch_fac
          mov     ar1,               #0           ;ar1=i
_Loop_331:
          cmp     ar1,               #40
          sb      _Line_344,         GEQ
          mov     T,                 ar0          ;pitch_fac
          mpy     P,      T,         *+xar3[ar1]  ;x[i]
          mov     T,                 ar5          ;cbGain
          mpy     acc,    T,         *+xar4[ar1]  ;inno[i]
          addl    acc,               P
          lsl     acc,               #2
          add     acc,               #0x0800<<4
          mov     *+xar3[ar1],       ah
          inc     ar1
          sb      _Loop_331,         UNC
_Line_344:
          LRETR

























                             

⌨️ 快捷键说明

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