?? fft.a30
字號(hào):
;*****************************************************************
;* PROGRAM : 256 Bit FFT Program *
;* FILE NAME : fft.A30 *
;* FUNCTION : 256 fft *
;*****************************************************************
;
;---------- INCLUDE OF SFR FILE ----------------
;
.list off ; don't draw up a prpgram list
.include SFR62S.INC ; include of sfr file
.list on ; draw up a program list
;
;---------- DEFINE OF SYMBOLS ------------------
;
VramTOP .equ 000400H ; top address of internal RAM
VramEND .equ 002BFFH ; end address of internal RAM
VprogTOP.equ 0F0000H ; top address of program area
Vintbase.equ 0FA000H ; top address of variable vector table
VIstack .equ 002C00H ; stack pointer
Vvector .equ 0FFFDCH ; top address of fixed vector table
SB_base .equ 000400H ; base address of SB recative
wnk .equ 0e0000h ; wnk of fft
;
;---------- KEEP OF RAM AREA -------------------
;
.section memory,data
.org VramTOP
numr: .blkw 256
numi: .blkw 256
flag: .blkb 1
addr: .blkb 1
temp: .blkw 1
;-----------------------------------------------
.section prog,code
.org VprogTOP
.sb SB_base ; assings aprovisional SB register value
.sbsym num ; place data in SB addressing mode
.sbsym addr
.sbsym flag
.sbsym temp
;---------- CLEAR OF RAM -----------------------
reset:
ldc #VIstack,ISP ; set Interrupt Stack Pointer
ldc #SB_base,SB ; set SB register
ldintb #Vintbase ; set Interrupt TaBle register
mov.w #0,r0 ; 0 clear
mov.w #(VramEND+1-VramTOP)/2,r3 ; number of times
mov.w #VramTOP,a1 ; start address
sstr.w
;---------- INITIALLIZE ------------------------
LDINTB #USER_vector_table
mov.b #00000110B,int0ic
mov.b #0,pd8
mov.b #1,pur2
mov.w #0,r0
mov.w #256,r3
mov.w #numr,a1
sstr.w
mov.w #7fffh,r0
mov.w #128,r3
mov.w #numr+64,a1
sstr.w
mov.w #0,r0
mov.w #256,r3
mov.w #numi,a1
sstr.w
;---------- MAIN PROGRAM -----------------------
;-----------------------------調(diào)整順序輸入順序的程序-----------------
mov.b #080h,r0l
mov.w #numr,a0
huan:
mov.b #8,r0h
mov.w a0,r1
sub.w #numr,r1
shl.w #-1,r1
br:
rot.b #1,r1l
rorc.b r1h
dec.b r0h
jnz br
mov.b r1h,a1
shl.w #1,a1
add.w #numr,a1
mov.w [a0],r1
xchg.w r1,[a1]
mov.w r1,[a0]
add.w #2,a0
dec.b r0l
jnz huan
;-----------------------------
mov.b #80h,r0l
mov.w #numi,a0
huani:
mov.b #8,r0h
mov.w a0,r1
sub.w #numi,r1
shl.w #-1,r1
bri:
rot.b #1,r1l
rorc.b r1h
dec.b r0h
jnz bri
mov.b r1h,a1
shl.w #1,a1
add.w #numi,a1
mov.w [a0],r1
xchg.w r1,[a1]
mov.w r1,[a0]
add.w #2,a0
dec.b r0l
jnz huani
;----------------------------------------------
mov.b #1,flag[sb] ;8級(jí)蝶形運(yùn)算
dft_fft:
;---------------------級(jí)間旋轉(zhuǎn)因子的計(jì)算程序------------------
mov.b #0,addr[sb]
rotate:
mov.b addr[sb],r0l
mov.b flag[sb],r0h
lp1: shl.b #-1,r0l ;rotate factor
dec.b r0h
jnz lp1
jc n5
mov.w #0,a0
jmp n1
n5: mov.b addr[sb],r0l
mov.b #9,r0h
sub.b flag[sb],r0h
lp2: shl.b #1,r0l
dec.b r0h
jnz lp2
mov.b #9,r0h
sub.b flag[sb],r0h
lp3: shl.b #-1,r0l
dec.b r0h
jnz lp3
mov.b #8,r0h
sub.b flag[sb],r0h
jz n2
lp4: shl.b #1,r0l
dec.b r0h
jnz lp4
;------------------
n2: mov.b r0l,a0
shl.w #1,a0 ;retate factor
n1:
mov.w addr[sb],a1
shl.w #1,a1 ;data address
;------------------
mov.w numi[a1],r0 ;the real part
lde.w sin[a0],r3
mul.w r3,r0
mov.w r2,temp[sb]
mov.w numr[a1],r0
lde.w cos[a0],r3
mul.w r3,r0
sub.w temp[sb],r2
mov.w r2,numr[a1]
;------------------
mov.w numr[a1],r0 ;the image part
lde.w sin[a0],r3
mul.w r3,r0
mov.w r2,temp[sb]
mov.w numi[a1],r0
lde.w cos[a0],r3
mul.w r3,r0
add.w temp[sb],r2
mov.w r2,numi[a1]
jmp n4
;------------------
n4: mov.b addr[sb],r1h
add.b #1,r1h
mov.b r1h,addr[sb]
jnz rotate
;---------------------蝶形運(yùn)算程序--------------------
butter:
mov.b #0,r0h
bl:
mov.b flag[sb],r0l
dec.b r0l
jz n3
b2:
rot.b #-1,r0h
rorc.w a0
dec.b r0l
jnz b2
n3: shl.w #-1,a0
mov.w a0,a1
or.w #8000h,a1
mov.b #9,r0l
sub.b flag[sb],r0l
b3:
rot.b #-1,r0h
rorc.w a0
rot.b #1,r0h
rot.b #-1,r0h
rorc.w a1
dec.b r0l
jnz b3
rot.w #-6,a0 ;butter address
rot.w #-6,a1
and.w #01feh,a0
and.w #01feh,a1
mov.w numr[a0],r2 ;real part
mov.w numr[a1],r3
sub.w r2,r3
xchg.w r3,numr[a1]
add.w r2,r3
mov.w r3,numr[a0]
mov.w numi[a0],r2 ;image part
mov.w numi[a1],r3
sub.w r2,r3
xchg.w r3,numi[a1]
add.w r2,r3
mov.w r3,numi[a0]
inc.b r0h
cmp.b #128,r0h ;128 butterflys
jnz bl
;----------------------------
mov.b flag[sb],r1h
add.b #1,r1h
mov.b r1h,flag[sb]
cmp.b #9,r1h
jnz dft_fft
;-----------------------------------------------
wait
;---------- START-----------------------
dummy:
reit
;----------------wnk-------------------------
.section wnk_fft,romdata
.org wnk
sin:
.word 0000000000000000b
.word 1111110011011011b
.word 1111100110111000b
.word 1111011010010101b
.word 1111001101110100b
.word 1111000001010100b
.word 1110110100110111b
.word 1110101000011101b
.word 1110011100000111b
.word 1110001111110100b
.word 1110000011100110b
.word 1101110111011100b
.word 1101101011010111b
.word 1101011111011001b
.word 1101010011100000b
.word 1101000111101110b
.word 1100111100000100b
.word 1100110000100001b
.word 1100100101000101b
.word 1100011001110011b
.word 1100001110101001b
.word 1100000011101000b
.word 1011111000110001b
.word 1011101110000101b
.word 1011100011100011b
.word 1011011001001011b
.word 1011001111000000b
.word 1011000101000000b
.word 1010111011001100b
.word 1010110001100100b
.word 1010101000001010b
.word 1010011110111101b
.word 1010010101111101b
.word 1010001101001011b
.word 1010000100101000b
.word 1001111100010011b
.word 1001110100001101b
.word 1001101100010111b
.word 1001100100110000b
.word 1001011101011001b
.word 1001010110010010b
.word 1001001111011011b
.word 1001001000110101b
.word 1001000010100000b
.word 1000111100011101b
.word 1000110110101010b
.word 1000110001001010b
.word 1000101011111011b
.word 1000100110111110b
.word 1000100010010011b
.word 1000011101111011b
.word 1000011001110101b
.word 1000010110000010b
.word 1000010010100010b
.word 1000001111010110b
.word 1000001100011100b
.word 1000001001110101b
.word 1000000111100010b
.word 1000000101100010b
.word 1000000011110110b
.word 1000000010011101b
.word 1000000001011000b
.word 1000000000100111b
.word 1000000000001001b
.word 1000000000000000b
.word 1000000000001001b
.word 1000000000100111b
.word 1000000001011000b
.word 1000000010011101b
.word 1000000011110110b
.word 1000000101100010b
.word 1000000111100010b
.word 1000001001110101b
.word 1000001100011100b
.word 1000001111010110b
.word 1000010010100010b
.word 1000010110000010b
.word 1000011001110101b
.word 1000011101111011b
.word 1000100010010011b
.word 1000100110111110b
.word 1000101011111011b
.word 1000110001001010b
.word 1000110110101010b
.word 1000111100011101b
.word 1001000010100000b
.word 1001001000110101b
.word 1001001111011011b
.word 1001010110010010b
.word 1001011101011001b
.word 1001100100110000b
.word 1001101100010111b
.word 1001110100001101b
.word 1001111100010011b
.word 1010000100101000b
.word 1010001101001011b
.word 1010010101111101b
.word 1010011110111101b
.word 1010101000001010b
.word 1010110001100100b
.word 1010111011001100b
.word 1011000101000000b
.word 1011001111000000b
.word 1011011001001011b
.word 1011100011100011b
.word 1011101110000101b
.word 1011111000110001b
.word 1100000011101000b
.word 1100001110101001b
.word 1100011001110011b
.word 1100100101000101b
.word 1100110000100001b
.word 1100111100000100b
.word 1101000111101110b
.word 1101010011100000b
.word 1101011111011001b
.word 1101101011010111b
.word 1101110111011100b
.word 1110000011100110b
.word 1110001111110100b
.word 1110011100000111b
.word 1110101000011101b
.word 1110110100110111b
.word 1111000001010100b
.word 1111001101110100b
.word 1111011010010101b
.word 1111100110111000b
.word 1111110011011011b
.word 1111111111111111b
.word 0000001100100100b
.word 0000011001000111b
.word 0000100101101010b
.word 0000110010001011b
.word 0000111110101011b
.word 0001001011001000b
.word 0001010111100010b
.word 0001100011111000b
.word 0001110000001011b
.word 0001111100011001b
.word 0010001000100011b
.word 0010010100101000b
.word 0010100000100110b
.word 0010101100011111b
.word 0010111000010001b
.word 0011000011111011b
.word 0011001111011110b
.word 0011011010111010b
.word 0011100110001100b
.word 0011110001010110b
.word 0011111100010111b
.word 0100000111001110b
.word 0100010001111010b
.word 0100011100011100b
.word 0100100110110100b
.word 0100110000111111b
.word 0100111010111111b
.word 0101000100110011b
.word 0101001110011011b
.word 0101010111110101b
.word 0101100001000010b
.word 0101101010000010b
.word 0101110010110100b
.word 0101111011010111b
.word 0110000011101100b
.word 0110001011110010b
.word 0110010011101000b
.word 0110011011001111b
.word 0110100010100110b
.word 0110101001101101b
.word 0110110000100100b
.word 0110110111001010b
.word 0110111101011111b
.word 0111000011100010b
.word 0111001001010101b
.word 0111001110110101b
.word 0111010100000100b
.word 0111011001000001b
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -