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

📄 cfft512c.asm

📁 2407TI库函数
💻 ASM
📖 第 1 页 / 共 3 页
字号:
            
            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    #(__FFT512C_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
_FFT512C_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=512 FFT (384 ENTRIES)
;--------------------------------------------------------------------------     

        .sect   "FFTtf" 
        .label  TF_LOAD_STRT_ADR                    
TWID:   .word   0,402,804,1206,1608,2009,2411,2811,3212,3612
        .word   4011,4410,4808,5205,5602,5998,6393,6787,7180,7571
        .word   7962,8351,8740,9127,9512,9896,10279,10660,11039,11417
        .word   11793,12167,12540,12910,13279,13646,14010,14373,14733,15091
        .word   15447,15800,16151,16500,16846,17190,17531,17869,18205,18538
        .word   18868,19195,19520,19841,20160,20475,20788,21097,21403,21706
        .word   22006,22302,22595,22884,23170,23453,23732,24008,24279,24548
        .word   24812,25073,25330,25583,25833,26078,26320,26557,26791,27020
        .word   27246,27467,27684,27897,28106,28311,28511,28707,28899,29086
        .word   29269,29448,29622,29792,29957,30118,30274,30425,30572,30715
        .word   30853,30986,31114,31238,31357,31471,31581,31686,31786,31881
        .word   31972,32058,32138,32214,32286,32352,32413,32470,32522,32568
        .word   32610,32647,32679,32706,32729,32746,32758,32766,32767,32766
        .word   32758,32746,32729,32706,32679,32647,32610,32568,32522,32470
        .word   32413,32352,32286,32214,32138,32058,31972,31881,31786,31686
        .word   31581,31471,31357,31238,31114,30986,30853,30715,30572,30425
        .word   30274,30118,29957,29792,29622,29448,29269,29086,28899,28707
        .word   28511,28311,28106,27897,27684,27467,27246,27020,26791,26557
        .word   26320,26078,25833,25583,25330,25073,24812,24548,24279,24008
        .word   23732,23453,23170,22884,22595,22302,22006,21706,21403,21097
        .word   20788,20475,20160,19841,19520,19195,18868,18538,18205,17869
        .word   17531,17190,16846,16500,16151,15800,15447,15091,14733,14373
        .word   14010,13646,13279,12910,12540,12167,11793,11417,11039,10660
        .word   10279,9896,9512,9127,8740,8351,7962,7571,7180,6787
        .word   6393,5998,5602,5205,4808,4410,4011,3612,3212,2811
        .word   2411,2009,1608,1206,804,402,0,-402,-804,-1206
        .word   -1608,-2009,-2411,-2811,-3212,-3612,-4011,-4410,-4808,-5205
        .word   -5602,-5998,-6393,-6787,-7180,-7571,-7962,-8351,-8740,-9127
        .word   -9512,-9896,-10279,-10660,-11039,-11417,-11793,-12167,-12540,-12910
        .word   -13279,-13646,-14010,-14373,-14733,-15091,-15447,-15800,-16151,-16500
        .word   -16846,-17190,-17531,-17869,-18205,-18538,-18868,-19195,-19520,-19841
        .word   -20160,-20475,-20788,-21097,-21403,-21706,-22006,-22302,-22595,-22884
        .word   -23170,-23453,-23732,-24008,-24279,-24548,-24812,-25073,-25330,-25583
        .word   -25833,-26078,-26320,-26557,-26791,-27020,-27246,-27467,-27684,-27897
        .word   -28106,-28311,-28511,-28707,-28899,-29086,-29269,-29448,-29622,-29792
        .word   -29957,-30118,-30274,-30425,-30572,-30715,-30853,-30986,-31114,-31238
        .word   -31357,-31471,-31581,-31686,-31786,-31881,-31972,-32058,-32138,-32214
        .word   -32286,-32352,-32413,-32470,-32522,-32568,-32610,-32647,-32679,-32706
        .word   -32729,-32746,-32758,-32766
        .label  TF_LOAD_END_ADR
          

⌨️ 快捷键说明

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