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

📄 cfft128c.asm

📁 2407TI库函数
💻 ASM
📖 第 1 页 / 共 3 页
字号:
            LAR     AR0,*,AR2       ; ARP=AR2, AR2=xxxxh, AR7->&ipcb[0], AR0=&ipcb[0]
            LAR     AR2,#2          ; ARP=AR2, AR2=2
            MAR     *0+,AR3         ; ARP=AR3, AR3=xxxxh, AR2=&ipcb[0]+2->ipcb[2] 
            LAR     AR3,#4          ; ARP=AR3, AR3=4
            MAR     *0+,AR4         ; ARP=AR4, AR4=xxxxh, AR3=&ipcb[0]+4->ipcb[4]
            LAR     AR4,#6          ; ARP=AR4, AR4=6
            MAR     *0+,AR3         ; ARP=AR3, AR3->ipcb[4], AR4=&ipcb[0]+6->ipcb[6]
            MAR     *,AR3           ; ARP=AR3, AR3->ipcb[4]
            LAR     AR0,#7h         ; ARP=AR3, AR3->ipcb[4], AR0=7h
                                    ; Increment for data pointer
            LAR     AR7,#(N/4-1)    ; Loop 32 times
            
STAGE1_2_LP:
            COMBO
            BANZ    STAGE1_2_LP,*-,AR3  

;------------------------------------------------------------------
; Stage 3 - Using ZEROI, PBY4I,PBY2I,P3BY4I Macros
;------------------------------------------------------------------
            
            MAR     *,AR5           ; ARP=AR5, AR5->T1
            SPLK    #COS45K,*       ; ARP=AR5, AR5->T1, T1=COS45K
            LT      *               ; ARP=AR5, AR5->T1, TREG=COS45K
            SBRK    #6              ; ARP=AR5, AR5->ipcbptr
            LAR     AR6,*           ; ARP=AR5, AR5->ipcbptr, AR6=ipcbptr->ipcb[0],  ---->P
            LAR     AR2,*           ; ARP=AR5, AR5->ipcbptr, AR2=ipcbptr
            ADRK    #6              ; ARP=AR5, AR5->T1
            MAR     *,AR2           ; ARP=AR2, AR2=ipcbptr  
            ADRK    #8              ; ARP=AR2, AR2=ipcbptr+8->ipcb[8], ---->Q 
            LAR     AR0,#9h         ; Increment for data pointer
            LAR     AR7,#(N/8-1)    ; Loop 16 times
            
STAGE3_LP:  ZEROI
            PBY4I
            PBY2I
            P3BY4I  7,0             ; AR7 at end, Use *0+ modify
            BANZ    STAGE3_LP,*-,AR2
            
;--------------------------------------------------------------------
; Stage 4 - Using ZEROI, PBY4I,PBY2I,P3BY4I,BFLY Macros
;--------------------------------------------------------------------
            MAR     *,AR5           ; ARP=AR5, AR5->T1
            SBRK    #6              ; ARP=AR5, AR5->ipcbptr
            LAR     AR6,*           ; ARP=AR5, AR5->ipcbptr, AR6=ipcbptr->ipcb[0],  ---->P
            LAR     AR2,*           ; ARP=AR5, AR5->ipcbptr, AR2=ipcbptr
            ADRK    #6              ; ARP=ARP, AR5->T1
            MAR     *,AR2           ; ARP=AR2, AR2=ipcbptr  
            ADRK    #16             ; ARP=AR2, AR2=ipcbptr+16->ipcb[16], ---->Q 
            LAR     AR0,#(N/8)      ; Twiddle Factor increment
            LAR     AR7,#(N/16-1)   ; Loop 8 Times, Group loop counter
                                                                                            
STAGE4_LP:  ZEROI
            
            LAR     AR3,#(TWID+N/16+N/4)
            LAR     AR4,#(TWID+N/16)
            BFLY    2               ; ARP=AR2
            
            MAR     *,AR5           ; ARP=AR5, AR5->T1
            SPLK    #COS45K,*       ; ARP=AR5, AR5->T1, T1=COS45K
            LT      *,AR2           ; ARP=AR2, TREG=COS45K
                        
            PBY4I
            
            BFLY    2
            
            PBY2I
            
            BFLY    2

            MAR     *,AR5           ; ARP=AR5, AR5->T1
            SPLK    #COS45K,*       ; ARP=AR5, AR5->T1, T1=COS45K
            LT      *,AR2           ; ARP=AR2, TREG=COS45K
                        
            P3BY4I  2,
            
            BFLY    6    
            
            ADRK    #16             ; Data offset
            MAR     *,AR2
            ADRK    #16             ; Data offset
            MAR     *,AR7       
            BANZ    STAGE4_LP,*-,AR2

;--------------------------------------------------------
; Stage 5 to LOG2(N) - Using BFLY Macro
;--------------------------------------------------------   

; Initialisation
; 1. Initialise the Butterfly loop(BLC), Group loop(GLC) & Stage loop counter(SLC)
; 2. Initialise the Data offset(DOST) and twiddle factor offset (TOST)          
            MAR     *,AR5           ; ARP=AR5, AR5->T1
            ADRK    #2              ; ARP=AR5, AR5->GLCB
            SPLK    #(N/32),*       ; ARP=AR5, AR5->GLCB, GLCB=N/8
            SBRK    #3              ; ARP=AR5, AR5->BLC
            SPLK    #16,*-          ; ARP=AR5, AR5->GLC, BLC=16
            SPLK    #(N/32),*-      ; ARP=AR5, AR5->SLC, GLC=(N/32)
            SPLK    #(NSTG-4),*-    ; ARP=AR5, AR5->TOST, SLC=NSTG-4
            SPLK    #(N/32),*-      ; ARP=AR5, AR5->DOST, TOST=4
            SPLK    #32,*-          ; ARP=AR5, AR5->ipcbptr, DOST=32

SLP:                                ; Stage loop            
            LAR     AR6,*           ; ARP=AR5, AR5->ipcbptr, AR6=ipcbptr ------>P
            LAR     AR2,*+          ; ARP=AR5, AR5->DOST, AR2=ipcbptr
            LAR     AR0,*+,AR2      ; ARP=AR2, AR2=ipcbptr, AR5->TOST, AR0=DOST   
            MAR     *0+,AR5         ; ARP=AR5, AR5->TOST, AR2=ipcbptr+DOST -----> Q
            LAR     AR0,*           ; ARP=AR5, AR5->TOST, AR0=TOST
            ADRK    #3              ; ARP=AR5, AR5->BLC
            
GLP:                                ; Group loop
            LAR     AR3,#(TWID+N/4) ; COS(Angle)
            LAR     AR4,#(TWID)     ; SIN(Angle)
            LAR     AR7,*+,AR7      ; ARP=AR7, AR7=BLC,AR5->T1
            MAR     *-,AR2          ; ARP=AR2, AR7=BLC-1

BLP:                                ; Butterfly loop
            BFLY    7
            BANZ    BLP,*-,AR2                             

; Operations performed between the group
; 1. Manuplating the P & Q pointer to point to the next group
; 2. Reinitialising the WI and WR twiddle factor pointer  
; 3. Decrementing the Group Count by 1, till all the group in the stage is computed
; 4. Reinitialising the Butterfly loop index for next group

            MAR     *,AR5           ; ARP=AR5, AR5->T1
            SBRK    #5              ; ARP=AR5, AR5->DOST
            LAR     AR0,*+,AR6      ; ARP=AR6, AR0=DOST, AR5->TOST
            MAR     *0+,AR2         ; ARP=AR2
            MAR     *0+,AR5         ; ARP=AR5, AR5->TOST 
            LAR     AR0,*           ; ARP=AR5, AR5->TOST, AR0=TOST  
            ADRK    #2              ; ARP=AR5, AR5->GLC
            LACL    *               ; ARP=AR5, AR5->GLC, ACCL=GLC
            SUB     #1              ; ACCL=GLC-1
            SACL    *+              ; ARP=AR5, AR5->BLC, GLC=GLC-1
            BCND    GLP,NEQ

; Operation Performed, between the stage
; 1. Mutiply the data offset by 2
; 2. Divide the Group count by 2
; 3. Divide the Twiddle offset by 2
; 4. Multiply the butterfly count by 2
; 5. Decrementing the stage count by 1, till all the stage gets over
; 6. Reinitialising the P & Q data pointer to the first group of next stage         
            SBRK    #4              ; ARP=AR5, AR5->DOST
            LACL    *               ; ARP=AR5, AR5->DOST, ACCL=DOST
            SACL    *+,1            ; ARP=AR5, AR5->TOST, DOST=DOST*2
            LACL    *               ; ARP=AR5, AR5->TOST, ACCL=TOST
            SFR                     ; ARP=AR5, AR5->TOST, ACCL=TOST/2           
            SACL    *+              ; ARP=AR5, AR5->SLC, TOST=TOST/2  
            LACL    *               ; ARP=AR5, AR5->SLC, ACCL=SLC
            SUB     #1              ; ACCL=SLC-1
            SACL    *+              ; ARP=AR5, AR5->GLC, SLC=SLC-1  
            ADRK    #4              ; ARP=AR5, AR5->GLCB
            LACL    *               ; ARP=AR5, AR->GLCB,  ACCL=GLCB
            SFR                     ; ARP=AR5, AR5->GLCB, ACCL=GLCB/2
            SACL    *               ; ARP=AR5, AR5->GLCB, GLCB=GLCB/2
            SBRK    #4              ; ARP=AR5, AR5->GLC
            SACL    *+              ; ARP=AR5, AR5->BLC, GLC=GLCB/2
            
            LACL    *               ; ARP=AR5, AR5->BLC, ACCL=BLC
            SACL    *,1             ; ARP=AR5, AR5->BLC, BLC=BLC*2 
            SBRK    #2              ; ARP=AR5, AR5->SLC
            LACL    *               ; ARP=AR5, AR5->SLC, ACCL=SCL
            SBRK    #3              ; ARP=AR5, AR5->ipcbptr
            BCND   SLP,NEQ
            
            MAR     *,AR1
            SBRK    #(__FFT128C_calc_frs+1)     ; Clear the local frame
            LAR     AR0,*-          ; Retrive Caller's frame pointer
            LAR     AR7,*-
            LAR     AR6,*-
            PSHD    *               ; Push the return address to TOS
            RET                     ; Return to the caller

;================================================================================
; TWIDDLE FACTOR INITIALISATION
;===============================================================================            
; Twiddle factor Initialisation
_FFT128C_init:
            POPD    *+
            LAR     AR2,#TWID               ; Copy the twiddle factor from ROM to RAM
            LACC    #TF_LOAD_STRT_ADR 
            MAR     *,AR2
            LAR     AR3, #(TF_LOAD_END_ADR-TF_LOAD_STRT_ADR-1)
loop1:      TBLR    *+,AR3
            ADD     #1
            BANZ    loop1,*-,AR2 
            MAR     *,AR1
            SBRK    #1
            PSHD    *               ; Push the return address to TOS
            RET  



;--------------------------------------------------------------------------
; TWIDDLE FOR N=128 FFT (96 ENTRIES)
;--------------------------------------------------------------------------     

        .sect   "FFTtf" 
        .label  TF_LOAD_STRT_ADR                    
TWID:   .word   0,1608,3212,4808,6393,7962,9512,11039,12540,14010
        .word   15447,16846,18205,19520,20788,22006,23170,24279,25330,26320
        .word   27246,28106,28899,29622,30274,30853,31357,31786,32138,32413
        .word   32610,32729,32767,32729,32610,32413,32138,31786,31357,30853
        .word   30274,29622,28899,28106,27246,26320,25330,24279,23170,22006
        .word   20788,19520,18205,16846,15447,14010,12540,11039,9512,7962
        .word   6393,4808,3212,1608,0,-1608,-3212,-4808,-6393,-7962
        .word   -9512,-11039,-12540,-14010,-15447,-16846,-18205,-19520,-20788,-22006
        .word   -23170,-24279,-25330,-26320,-27246,-28106,-28899,-29622,-30274,-30853
        .word   -31357,-31786,-32138,-32413,-32610,-32729
        .label  TF_LOAD_END_ADR
          

⌨️ 快捷键说明

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