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

📄 cor_h.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     cor_h() in cor_h.c                                     **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   xar1---Word16 h[]                                                     **
**   xar3---Word16 sign[]                                                  **
**                                                                         **
** Outputs:                                                                **
**                                                                         **
**   xar7---Word16 rr[][]                                                  **
**                                                                         **
**                                                                         **
**                                                                         **
** Return value :       none                                               **
**                                                                         **
** Attribute    :       Cycles: 134252    Pm: 128                          **
**                      Modified Registers:  all                           **
**                                                                         **
** Programmer   :       Qi Ying                                            **
*****************************************************************************
      .global _cor_h
      .ref    _inv_sqrt
      .ref    _buffer1  
      .ref    _buffer2
      .ref    _buffer3 

_cor_h:
      push    xar7
      movl    xar7,          xar1
      movl    xar4,          #_buffer2+40  ;h2  
      ZAPA                                ;Zero ACC, P, OVC
      mov     al,            #2           
      mov     ah,            #0           ;acc=s 
;by skiff      
      nop
      nop
      nop
      RPT     #39                         ;循环次数40
      ||SQRA	*XAR7++	
      ;||mac    P,   *xar7++,  *xar7++
      addl    acc,           p<<pm
      pop     xar7
      movl    xar5,          acc          ;xar5=s
      sub     ah,            #32767       ;ah=j
      cmp     ah,            #0
      sb      _Line_162,     NEQ
      mov     ar0,           #0           ;ar0=i
_Loop_157:
      cmp     ar0,           #40
      sb      _Line_176,     GEQ
      mov     al,            *+xar1[ar0]  ;h[i]
      lsr     al,            #1
      mov     *+xar4[ar0],   al           ;h2[i]
      inc     ar0
      sb      _Loop_157,     UNC 
_Line_162:       
      mov     al,            #1  
      mov     T,             al
      movl    acc,           xar5
      lsrl    acc,           T            ;s右移后放入acc
      push    xar3
      push    xar4         
      LCR     _inv_sqrt                   ;acc=Inv_sqrt(s)                 
      pop     xar4
      pop     xar3
      lsl     acc,           #7           ;ah=k
      mpy     acc,    ah,    #32440       
      lsl     acc,           #1
      mov     T,             ah           ;T=k
      mov     ar0,           #0           ;ar0=i                     
_Loop_168:
      cmp     ar0,           #40                                    
      sb      _Line_176,     GEQ                                            
      mpy     acc,    T,     *+xar1[ar0]  ;acc=k*h[i]
      lsl     acc,           #10
      add     acc,           #0x0800 << #4 
      mov     *+xar4[ar0],   ah           ;h2[i]
      inc     ar0 
      sb      _Loop_168,     UNC                       
_Line_176:
      movb    xar6,          #0           ;xar6=s
      mov     ar0,           #0           ;ar0=k
      mov     ar5,           #39          ;ar5=i
_Loop_178:
      cmp     ar0,           #40
      sb      _Line_184,     GEQ
      mov     T,             *+xar4[ar0]  ;h2[k]
      mpy     acc,   T,      T                      
      lsl     acc,           #1
      addl    xar6,          acc          ;xar6=L_mac(s,h2[k],h2[k])
      mpy     acc,   ar5,    #40
      add     al,            ar5          ;al=i*40+i
      mov     ar1,           al           ;ar1=i*40+i
      mov     T,             ar5
      inc     T
      mpy     acc,   T,      ar5          ;al=i*(i+1)
      lsr     al,            #1           ;al=i*(i+1)/2 
      sub     ar1,           al           ;ar1=i*40+i-i*(i+1)/2      
      movl    acc,           xar6         ;s放入acc
      add     acc,           #0x0800 <<#4
      mov     *+xar7[ar1],   ah           ;rr[i][i]=round (s)
      inc     ar0                         ;k++
      dec     ar5                         ;i--                                                                                                                                      
      sb      _Loop_178,     UNC                                                            
_Line_184:
      mov     ar5,           #1           ;ar5=dec
_Loop_184:
      cmp     ar5,           #40
      sb      _Line_197,     GEQ
      push    ar5
      movb    xar6,          #0           ;xar6=s
      mov     ar2,           #39          ;ar2=j
      mov     al,            #39
      sub     al,            ar5          ;al=j-dec
      mov     ar0,           al           ;ar0=i
      mov     ar1,           #0           ;ar1=k
_Loop_189:
      cmp     ar5,           #40          ;比较dec+k与40
      sb      _Line_196,     GEQ
      movl    acc,           xar4
      add     acc,           ar5
      movl    xar4,          acc
      mov     T,             *xar4        ;h2[k+dec]
      sub     acc,           ar5
      movl    xar4,          acc          ;xar4指回数组头      
      mpy     acc,    T,     *+xar4[ar1] 
      lsl     acc,           #1  
      addl    acc,           xar6
      movl    xar6,          acc          ;xar6=s
      movl    acc,           xar3
      add     acc,           ar2
      movl    xar3,          acc
      mov     T,             *xar3        ;sign[j]
      sub     acc,           ar2
      movl    xar3,          acc          ;xar3指回数组头  
      mpy     acc,    T,     *+xar3[ar0]   
      lsl     acc,           #1           ;ah=sign[i]*sign[j]
      mov     pl,            ah           ;pl=sign[i]*sign[j]
      movl    acc,           xar6
      add     acc,           #0x0800 <<#4 ;ah=round(s)
      mov     T,             ah
      mpy     acc,    T,     pl           ;acc=round(s)*sign[i]*sign[j]
      lsl     acc,           #1
      mov     pl,            ah           ;pl=rr[][]
      mpy     acc,   ar0,    #40  
      add     al,            ar2          ;al=i*40+j
      mov     ph,            al           ;ph=i*40+j
      mov     T,             ar0
      inc     T
      mpy     acc,   T,      ar0          ;al=i*(i+1)
      lsr     al,            #1           ;al=i*(i+1)/2 
      sub     ph,            al           ;ph=i*40+j-i*(i+1)/2      
      movl    acc,           xar7
      add     acc,           ph
      movl    xar7,          acc
      spm      #0
      mov     *xar7,         p            ;*xar7=pl
      spm      #1
      sub     acc,           ph
      movl    xar7,          acc          ;xar7指回数组头
      inc     ar1                         ;k++ 
      inc     ar5                         ;(k+dec)++
      dec     ar0                         ;i--
      dec     ar2                         ;j--  
      sb      _Loop_189,     UNC 
_Line_196:
      pop     ar5
      inc     ar5                         ;dec++
      sb      _Loop_184,     UNC 
_Line_197:                                                                       
      LRETR                                                        
                                                                                                         
       

⌨️ 快捷键说明

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