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

📄 pred_lt_3or6.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     Pred_lt_3or6() in pred_lt.c                            **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   ar7---Word16 T0                                                       **
**   ar6---Word16 frac                                                     **
**   xar0---Word16 exc[]                                                   **
**                                                                         **
** Outputs:                                                                **
**                                                                         **
**   xar0---Word16 exc[]                                                   **
**                                                                         **
**                                                                         **
** Return value :       none                                               **
**                                                                         **
** Attribute    :       Cycles: 48120      Pm: 78                         **
**                      Modified Registers:  all                           **
**                                                                         **
** Programmer   :       Qi Ying                                            **
*****************************************************************************
      .global inter_6_1
      .global _Pred_lt_3or6
  	  .ref UP_SAMP_MAX 	
      .ref _buffer1   
    
		
_Pred_lt_3or6:  
         movl    acc,        xar0
         sub     acc,        ar7
         movl    p,          acc           ;p= &exc[-T0]   p--*x0    
         mov     ah,         ar6           ;ar6= frac
         neg     ah
         mov     ar6,        ah            ;negate (frac) 
         mov     al,         ar6
         lsl     al,         #1            ;frac 即ar6左移一位
         mov     ar6,        al
         cmp     ar6,        #0 
         sb      _Line_116,  GEQ           ;if frac>=0,跳转L116
         mov     al,         ar6
         addb    al,         #6
         mov     ar6,        al
         movl    acc,        p 
         subb    acc,        #1
         movl    p,          acc          ;x0--
         
_Line_116:
         movl    xar7,       #inter_6_1 
         mov     acc,        #0
         add     acc,        ar6
         addl    xar7,       acc          ;xar7--*c1 &inter_6_1[frac] 
         mov     acc,        #6           
         sub     acc,        ar6
         movl    xar2,       #inter_6_1 
         addl    xar2,       acc          ;xar2--*c2 &inter_6_1[sub (UP_SAMP_MAX, frac)]
         mov     ar4,        #39
         ;movl    xar5,       P            ;xar5--*x1 
_Loop_116:
         movl    acc,        P
         add     acc,        #1
         movl    P,          acc          ;x1=x0++
         movl    xar5,       P            ;xar5--*x1+1
         movl    xar6,       p            ;xar6--*x2
	     push    P
	     movb    xar1,       #0           ;xar1--k 
	     zapa							  ;acc = 0,p = 0,ovc = 0	
		 mov     ar3,        #9           ;循环次数10		
_Loop_124:
	     mov	 t,          *--xar5      ;xar5--,t = *xar5 = x1[-i]
         mpya    p,    t,    *+xar7[ar1]  ;acc = acc +p<<pm,p = x1[-i] * c1[k] 
         mov	 t,          *xar6++   
         mpya    p,    t,    *+xar2[ar1]  ;acc = acc +p<<pm,p = x2[i] * c2[k]                            
	     addb    xar1,       #UP_SAMP_MAX ;k += UP_SAMP_MAX      
	     banz    _Loop_124,  ar3--    
	     addl	 acc,        p<<pm        ;s = acc = acc + p<<pm                                                                                                  ;p始终等于x0
**         push    p
**         movb    ah,         #0            ;p不能放立即数 
**         movl    p,          acc           ;ph--k--0 
**         mov     ar3,        #9            ;循环次数10 
**_Loop_124:         
**         mov     T,          *xar5        ;T--x1[-i]
**         subb    xar5,       #1
**         movb    acc,        #0
**         mov     al,         ph           ;k
**         addl    xar7,       acc          ;xar7--&c1[k]
**                  
**         movb    acc,        #0
**         mpy     acc,   T,   *xar7        ;x1[-i]*c1[k]
**         addl    xar2,       acc          ;长加乘,放回s     
                  
**       movl    acc,        xar7
**         sub     acc,        ph
**         movl    xar7,       acc          ;xar7重新指回c1
**                
**         mov     T,          *xar6++      ;T--x2[i]
                          
**         movb    acc,        #0
**         mov     al,         ph           ;k
**         addl    xar1,       acc          ;xar1--&c2[k]        
                 
**         movb    acc,        #0
**         mpy     acc,   T,   *xar1        ;x2[i]*c2[k]
**         addl    xar2,       acc          ;长加乘,放回s
             
**         movl    acc,        xar1
**         sub     acc,        ph
**         movl    xar1,       acc          ;xar1重新指回c2
         
**         movb    al,         #0
**        movb    ah,         #6             
**         addul   p,          acc          ;ph+6
**         banz    _Loop_124,  ar3--
      
**         pop     p
**         movl    acc,        xar2
****         lsl     acc,        #1
         add     acc,        #0x0800<<#4  ;round(s)=ah
         mov     T,          ah           ;round(s)=T
         mov     *xar0++,    T            ;exc[j]
         pop     P
         banz    _Loop_116,  ar4-- 
         
         subb    xar0,       #40          ;xar0重新指回_buffer1
         LRETR
         
        

⌨️ 快捷键说明

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