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

📄 fft.a30.bak

📁 1.熟悉硬件仿真工具KD30的使用。 2.修改样本程序 SAMP1a
💻 BAK
📖 第 1 页 / 共 2 页
字号:
;*****************************************************************
;*	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 -----------------------
;-----------------------------调整顺序输入顺序的程序-----------------
	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级蝶形运算
dft_fft:
;---------------------级间旋转因子的计算程序------------------
      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
;---------------------蝶形运算程序--------------------
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

⌨️ 快捷键说明

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