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

📄 c2cxrad2.mac

📁 DSP常用例程
💻 MAC
📖 第 1 页 / 共 2 页
字号:
******************************************************************************
* FILE: c25cxrad2.mac   --> macro file for radix 2 fft's based on 320c5x      *
*                                                                            *
* COPYRIGHT TEXAS INSTRUMENTS INC. 1990                                      *
*                                                                            *
* WRITTEN BY: MANFRED CHRIST       LAST UPDATE: 10. July 90                  *
******************************************************************************
;
; OPEN: DIVID=8                10.7.90
;       BUTTERFLY OPTIMISATION 10.7.90
;
*                                                                            *
* MACRO 'COMBO2X' FOR THE COMPLEX, RADIX-2 DIT FFT                           *
*                                                                            *
* WRITTEN BY: MANFRED CHRIST       LAST UPDATE: 02. July 90                  *
* REVISION  : 1.00                                                           *
* CYCLES    : 33      WORDS: 33                                              *
* ORGANIATION OF THE INPUT DATA MEMORY: R1,I1,R2,I2,R3,I3,R4,I4              *
*                                                                            *
******************************************************************************
*                                                                            *
* THE MACRO 'COMBO2x' PERFORMS FOLLOWING CALCULATIONS:                       *
*                                                                            *
* R1  := [(R1+R2)+(R3+R4)]/4       INPUT               OUTPUT                *
* R2  := [(R1-R2)+(I3-I4)]/4       ------------------  ------------------    *
* R3  := [(R1+R2)-(R3+R4)]/4       AR0 =  7                                  *
* R4  := [(R1-R2)-(I3-I4)]/4       AR1 -> R1,I1        AR1 - > R5,I5         *
* I1  := [(I1+I2)+(I3+I4)]/4       AR2 -> R2,I2        AR2 - > R6,I6         *
* I2  := [(I1-I2)-(R3-R4)]/4       ARP-> AR3 -> R3,I3  ARP - > AR3 - > R7,I7 *
* I3  := [(I1+I2)-(I3+I4)]/4       AR4 -> R4,I4        AR4 - > R8,I8         *
* I4  := [(I1-I2)+(R3-R4)]/4                                                 *
*                                                                            *
* For a 16-point Radix 2 complex FFT the Macro 'COMBO2x' has to be           *
* repeated N/4 times (e.g. 4  times for a  16 point FFT).                    *
*                                                                            *
******************************************************************************
;
COMBO2y $MACRO  p           
;                                                    ARP AR1 AR2 AR3 AR4 AR5
;                                                    --- --- --- --- --- ---
     LACC   *,14,AR4    ; ACC := (R3)/4               4  R1  R2  R3  R4  T1
     SUB    *,14,AR5    ; ACC := (R3+R4)/4            5  R1  R2  R3  R4  T1
     SACH   *+,1,AR4    ; T1   = (R3-R4)/2            4  R1  R2  I3  R4  T2
;
     ADD    *+,15,AR5   ; ACC := (R3+R4)/4            5  R1  R2  R3  I4  T2
     SACH   *,1,AR2     ; T2   = (R3+R4)/2            2  R1  R2  R3  I4  T2
;
     ADD    *,14,AR1    ; ACC := (R2+R3+R4)/4         1  R1  R2  R3  I4  T2
     ADD    *,14        ; ACC := (R1+R2+R3+R4)/4      1  R1  R2  R3  I4  T2
     SACH   *+,0,AR5    ; R1  := (R1+R2+R3+R4)/4      5  I1  R2  R3  I4  T2
     SUB    *,16,AR3    ; ACC := (R1+R2-(R3+R4))/4    3  I1  R2  R3  I4  T2
     SACH   *+,0,AR5    ; R3  := (R1+R2-(R3+R4))/4    5  I1  R2  I3  I4  T2
;
     ADD    *,15,AR2    ; ACC := (R1+R2)/4            2  I1  R2  I3  I4  T2
     SUB    *,15,AR3    ; ACC := (R1-R2)/4            3  I1  R2  I3  I4  T2
     ADD    *,14,AR4    ; ACC := ((R1-R2)+(I3))/4     4  I1  R2  I3  I4  T2
     SUB    *,14,AR2    ; ACC := ((R1-R2)+(I3-I4))/4  2  I1  R2  I3  I4  T2
     SACH   *+,0,AR4    ; R2  := ((R1-R2)+(I3-I4))/4  4  I1  I2  I3  I4  T2
     ADD    *-,15,AR3   ; ACC := ((R1-R2)+ I3+I4 )/4  3  I1  I2  I3  R4  T2
     SUB    *,15,AR4    ; ACC := ((R1-R2)-(I3-I4))/4  4  I1  I2  I3  R4  T2
     SACH   *+,0,AR1    ; R4  := ((R1-R2)-(I3-I4))/4  1  I1  I2  I3  I4  T2
;
     LACC   *,14,AR2    ; ACC := (I1)/4               2  I1  I2  I3  I4  T2
     SUB    *,14,AR5    ; ACC := (I1-I2)/4            5  I1  I2  I3  I4  T2
     SACH   *,1,AR2     ; T2  := (I1-I2)/2            2  I1  I2  I3  I4  T2
     ADD    *,15,AR3    ; ACC := ((I1+I2))/4          4  I1  I2  I3  I4  T2
     ADD    *,14,AR4    ; ACC := ((I1+I2)+(I3))/4     4  I1  I2  I3  I4  T2
     ADD    *,14,AR1    ; ACC := ((I1+I2)+(I3+I4))/4  1  I1  I2  I3  I4  T2
     SACH   *0+,0,AR3   ; I1  := ((I1+I2)+(I3+I4))/4  3  R5  I2  I3  I4  T2
     SUB    *,15,AR4    ; ACC := ((I1+I2)-(I3+I4))/4  4  R5  I2  I3  I4  T2
     SUB    *,15,AR3    ; ACC := ((I1+I2)-(I3+I4))/4  3  R5  I2  I3  I4  T2
     SACH   *0+,0,AR5   ; I3  := ((I1+I2)-(I3+I4))/4  5  R5  I2  R7  I4  T2
;
     LACC   *-,15       ; ACC := (I1-I2)/4            5  R5  I2  R7  I4  T1
     SUB    *,15,AR2    ; ACC := ((I1-I2)-(R3-R4))/4  2  R5  I2  R7  I4  T1
     SACH   *0+,0,AR5   ; I2  := ((I1-I2)-(R3-R4))/4  5  R5  R6  R7  I4  T1
     ADD    *,16,AR4    ; ACC := ((I1-I2)+(R3-R4))/4  4  R5  R6  R7  I4  T1
     SACH   *0+,0,AR:p: ; I4  := ((I1-I2)+(R3-R4))/4  3  R5  R6  R7  R8  T1
;
     $ENDM


COMBO2x $MACRO  num         ; REPEAT MACRO 'COMBO2y': N/4 times
        LAR     AR7,#:num:/divid-1 
loopc:  .set    $ 

        $if     divid=4
        combo2y 3
        combo2y 3
        $endif

        $if     divid=8
        combo2y 3
        combo2y 3
        combo2y 3
        combo2y 3
        combo2y 3
        combo2y 3
        $endif

        combo2y 3
        combo2y 7
        banz    loopc,*-,ar3 
        MAR     *,AR2     ; ARP=AR2
        $ENDM
;
******************************************************************************
*                                                                            *
*     MACRO 'ZEROI'    number of words/number of cycles: 10                  *
*                                                                            *
*        ARP=2 FOR INPUT AND OUTPUT                                          *
*        AR2 -> QR,QI,QR+1,...                                               *
*        AR3 -> PR,PI,PR+1,...                                               *
*                                                                            *
*        CALCULATE Re[P+Q] AND Re[P-Q]                                       *
*        QR'=(PR-QR)/2                                                       *
*        PR'=(PR+QR)/2                                                       *
*        PI'=(PI+QI)/2                                                       *
*        PI'=(PI-QI)/2                                                       *
*                                                                            *
*  version 1.00    from Manfred Christ   update: 2. July 90                  *
*                                                                            *
******************************************************************************
ZEROI    $MACRO            ;                            AR1  AR2  ARP
         LACC    *,15,AR1  ; ACC := (1/2)(QR)           PR   QR    1
         ADD     *,15      ; ACC := (1/2)(PR+QR)        PR   QR    1
         SACH    *+,0,AR2  ; PR  := (1/2)(PR+QR)        PI   QR    2
         SUB     *,16      ; ACC := (1/2)(PR+QR)-(QR)   PI   QR    2
         SACH    *+        ; QR  := (1/2)(PR-QR)        PI   QI    2
;
         LACC    *,15,AR1  ; ACC := (1/2)(QI)           PI   QI    1
         ADD     *,15      ; ACC := (1/2)(PI+QI)        PI   QI    1
         SACH    *+,0,AR2  ; PI  := (1/2)(PI+QI)        PR+1 QI    2
         SUB     *,16      ; ACC := (1/2)(PI+QI)-(QI)   PR+1 QI    2
         SACH    *+        ; QI  := (1/2)(PI-QI)        PR+1 QR+1  2
         $ENDM
******************************************************************************
*                                                                            *
*     MACRO 'PBY2I'    number of words/number of cycles: 12                  *
*                                                                            *
*        PR'=(PR+QI)/2      PI'=(PI-QR)/2                                    *
*        QR'=(PR-QI)/2      QI'=(PI+QR)/2                                    *
*                                                                            *
*  version 1.00    from Manfred Christ   update: 02. July 90                 *
*                                                                            *
******************************************************************************
PBY2I    $MACRO            ;                            AR1  AR2  ARP
         LACC    *+,15,AR5 ;                            PR   QI    5
         SACH    *,1,AR2   ; TMP=QR                     PR   QI    2
;
         LACC    *,15,AR1  ; ACC := QI/2                PR   QI    1
         ADD     *,15      ; ACC := (PR+QI)/2           PR   QI    1
         SACH    *+,0,AR2  ; PR  := (PR+QI)/2           PI   QI    2
         SUB     *-,16     ; ACC := (PR-QI)/2           PI   QR    2
         SACH    *+,0,AR1  ; QR  := (PR-QI)/2           PI   QI    1
;
         LACC    *,15,AR5  ; ACC := (PI)/2              PI   QI    5
         SUB     *,15,AR1  ; ACC := (PI-QR)/2           PI   QI    1
         SACH    *+,0,AR5  ; PI  := (PI-QR)/2           PR+1 QI    5
         ADD     *,16,AR2  ; ACC := (PI+QR)/2           PR+1 QI    2
         SACH    *+        ; QI  := (PI+QR)/2           PR+1 QI+1  2
         $ENDM
;
******************************************************************************
*                                                                            *
*     MACRO 'PBY4J'    number of words/number of cycles: 16                  *
*                                                                            *
*  T=SIN(45)=COS(45)=W45                                                     *
*                                                                            *
*                                                                            *
*        PR'= PR + (W*QI + W*QR) = PR + W * QI + W * QR    (<- AR1)          *
*        QR'= PR - (W*QI + W*QR) = PR - W * QI - W * QR    (<- AR2)          *
*        PI'= PI + (W*QI - W*QR) = PI + W * QI - W * QR    (<- AR1+1)        *
*        QI'= PI - (W*QI - W*QR) = PI - W * QI + W * QR    (<- AR1+2)        *
*                                                                            *
*                                                                            *
*  version 1.00    from Manfred Christ   update: 02. July 90                 *
*                                                                            *
******************************************************************************
;
PBY4J    $MACRO            ; TREG= W                  AR5   PREG   AR1  AR2 ARP
         MPY      *+,AR5   ; PREG= W*QR/2               -   W*QR/2 PR   QI   5
         SPH      *,AR1    ; TMP = W*QR/2            W*QR/2 W*QR/2 PR   QI   1
         LACC     *,15,AR2 ; ACC = PR/2              W*QR/2 W*QR/2 PR   QI   2
         MPYS     *-       ; ACC = (PR-W*QR)/2       W*QR/2 W*QI/2 PR   QR   2
         SPAC              ; ACC = (PR-W*QI-W*QR)/2  W*QR/2 W*QI/2 PR   QR   2
         SACH     *+,0,AR1 ; QR  = (PR-W*QI-W*QR)/2  W*QR/2 W*QI/2 PR   QI   1
         SUB      *,16     ; ACC = (-PR-W*QI-W*QR)/2 W*QR/2 W*QI/2 PR   QI   1
         NEG               ; ACC =  (PR+W*QI+W*QR)/2 W*QR/2 W*QI/2 PR   QI   1
         SACH     *+       ; QR  =  (PR+W*QI+W*QR)/2 W*QR/2 W*QI/2 PI   QI   1
;
         LACC     *,15,AR5 ; ACC = (PI)/2            W*QR/2 W*QI/2 PI   QI   5
         SPAC              ; ACC = (PI-W*QI)/2       W*QR/2   -    PI   QI   5
         ADD      *,16,AR2 ; ACC = (PI-W*QI+W*QR)/2     -     -    PI   QI   2
         SACH     *+,0,AR1 ; QI  = (PI-W*QI+W*QR)/2     -     -    PI   QR1  1
         SUB      *,16     ; ACCU= (-PI-W*QI+W*QR)/2    -     -    PI   QR1  1
         NEG               ; ACCU=  (PI+W*QI-W*QR)/2    -     -    PI   QR1  1
         SACH     *+,0,AR2 ; PI  =  (PI+W*QI-W*QR)/2    -     -    PR1  QR1  2
         $ENDM
;
******************************************************************************
*                                                                            *
*     MACRO 'P3BY4J'   number of words/number of cycles: 16                  *
*                                                                            *
*  version 1.00    from: Manfred Christ   update: 02. July 90                *
*                                                                            *
*   ENTRANCE IN THE MACRO: ARP=AR2                                           *
*                          AR1->PR,PI                                        *
*                          AR2->QR,QI                                        *
*                          TREG=W=COS(45)=SIN(45)                            *
*                                                                            *
*        PR'= PR + (W*QI - W*QR) = PR + W * QI - W * QR    (<- AR1)          *
*        QR'= PR - (W*QI - W*QR) = PR - W * QI + W * QR    (<- AR2)          *
*        PI'= PI - (W*QI + W*QR) = PI - W * QI - W * QR    (<- AR1+1)        *
*        QI'= PI + (W*QI + W*QR) = PI + W * QI + W * QR    (<- AR1+2)        *
*                                                                            *
*       EXIT OF THE MACRO: ARP=AR2                                           *
*                          AR1->PR+1,PI+1                                    *
*                          AR2->QR+1,QI+1                                    *
*                                                                            *
******************************************************************************
P3BY4J   $MACRO p        ; TREG= W                  AR5   PREG   AR1  AR2 ARP
                         ;                         ------ ------ ---  --- ---
      MPY    *+,AR5      ; PREG= W*QR/2               -   W*QR/2 PR   QI   5
      SPH    *,AR1       ; TMP = W*QR/2            W*QR/2 W*QR/2 PR   QI   1
      LACC   *,15,AR2    ; ACC = PR/2              W*QR/2 W*QR/2 PR   QI   2
      MPYA   *-          ; ACC = (PR+W*QR)/2       W*QR/2 W*QI/2 PR   QR   2
      SPAC               ; ACC = (PR-W*QI+W*QR)/2  W*QR/2 W*QI/2 PR   QR   2
      SACH   *+,0,AR1    ; QR' = (PR-W*QI+W*QR)/2  W*QR/2 W*QI/2 PR   QI   1
      SUB    *,16        ; ACC = (-PR-W*QI+W*QR)/2 W*QR/2 W*QI/2 PR   QI   1
      NEG                ; ACC =  (PR+W*QI-W*QR)/2 W*QR/2 W*QI/2 PR   QI   1
      SACH   *+          ; PR' =  (PR+W*QI-W*QR)/2 W*QR/2 W*QI/2 PI   QI   1
;
      LACC   *,15,AR5    ; ACC = (PI)/2            W*QR/2 W*QI/2 PI   QI   5

⌨️ 快捷键说明

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