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

📄 dft_128.asm

📁 (Ebook-Pdf) Dsp - Real Time Digital Signal Processing (Usando Tms320-55Xx). 有书
💻 ASM
字号:
;
;    DFT_128 - compute 128 points DFT
;
;    Entry T0: AR0: pointer to complex input sample buffer
;              AR1: pointer to complex output sample buffer
;    Return: None
;
     .def	_dft_128
     .ref	_sine_cos	

N    .set 128
TWOPIN    .set 0x7fff>>6    ; 2*PI/N, N=128
          .bss Wn,2         ; Wn[0]=Wr, Wn[1]=Wi      
          .bss angle,1      ; Angle for sine-cosine function
     .text	

_dft_128
    pshboth XAR5            ; Save AR5
    bset    SATD
    mov     #N-1,BRC0       ; Repeat counter for loop N times
    mov     #N-1,BRC1       ; Repeat counter for loop N times
    mov     XAR0,XAR5       ; AR5 pointer to sample buffer  
    mov     XAR0,XAR3
    mov     #0,T2           ; k = T2 = 0
    rptb    outer_loop-1    ; for(k=0;k<N;k++) {
    mov     XAR3,XAR5       ; Reset x[] pointer
    mov     #TWOPIN<<#16,AC0; hi(AC0) = 2*PI/N
    mpy     T2,AC0
    mov     #0,AC2          ; Xr[k] = 0
    mov     #0,AC3          ; Xi[k] = 0
    mov     #0,*(angle)	
    mov     AC0,T3          ; angle=2*PI*k/N
    rptb    inner_loop-1    ; for(n=0;n<N;n++) {
    mov     *(angle),T0     ; T0=2*PI*k*n/N
    mov     *(angle),AC0
    add     T3,AC0
    mov     AC0,*(angle)    ; Update angle
    amov    #Wn,XAR0        ; AR0 is the pointer to Wn
    call    _sine_cos       ; sine_cos(angle, Wn)
    bset    SATD            ; sine_cos turn off FRCT & SATD
    macm40  *AR5+,*AR0,AC2  ; XR[k]+Xin[n]*Wr
    macm40  *AR5-,*AR0+,AC3 ; XI[k]+Xin[n+1]*Wr
    masm40  *AR5+,*AR0,AC3  ; XI[k]+Xin[n+1]*Wr-Xin[n]*Wi
    macm40  *AR5+,*AR0-,AC2 ; XR[k]+Xin[n]*Wr+Xin[n+1]*Wi
inner_loop                  ; } end of inner loop
    mov     hi(AC2<<#-5),*AR1+
    mov     hi(AC3<<#-5),*AR1+
    add     #1,T2
outer_loop                  ; } end of outer loop
    popboth XAR5
    bclr    SATD
    ret
    .end

⌨️ 快捷键说明

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