📄 ex5.asm
字号:
lsh 12,ar0
addi 30h,ar0
sti r0,*+ar0(4) ;COUNTER CLEAR
sti r4,*+ar0(8) ;15000000/FS
ldi 3c1h,r0 ;RUN TIMER1
sti r0,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subE: invf
invf: ldf r0,r3 ;use r0,r1,r2,r3
absf r0 ;input & output use r0
pushf r0
pop r1
ash -24,r1
negi r1
subi 1,r1
ash 24,r1
push r1
popf r1
mpyf r1,r0,r2
subrf 2.0,r2
mpyf r2,r1
mpyf r1,r0,r2
subrf 2.0,r2
mpyf r2,r1
mpyf r1,r0,r2
subrf 2.0,r2
mpyf r2,r1
mpyf r1,r0,r2
subrf 2.0,r2
mpyf r2,r1
rnd r1
mpyf r1,r0,r2
subrf 1.0,r2
mpyf r1,r2
addf r2,r1
rnd r1,r0
negf r0,r2
ldf r3,r3
ldfn r2,r0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subF: sqrt
sqrt: ldf r0,r3 ;use r0,r1,r2,r3
retsle ;input & output use r0
pushf r0
pop r1
ash -24,r1
addi 1,r1
ash -1,r1
negi r1,r1
ash 24,r1
push r1
popf r1
mpyf 0.5,r0
mpyf3 r1,r1,r2
mpyf r0,r2
subrf 1.5,r2
mpyf r2,r1
rnd r1,r1
mpyf3 r1,r1,r2
mpyf r0,r2
subrf 1.5,r2
mpyf r2,r1
rnd r1,r1
mpyf3 r1,r1,r2
mpyf r0,r2
subrf 1.5,r2
mpyf r2,r1
rnd r1,r1
mpyf3 r1,r1,r2
mpyf r0,r2
subrf 1.5,r2
mpyf r2,r1
rnd r1,r1
mpyf3 r1,r1,r2
mpyf r0,r2
subrf 1.5,r2
mpyf r2,r1
rnd r1,r0
mpyf r3,r0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subK: fft
fft: ldi @LOGFFT,ar0 ;ar0 save 09--512,0b--2048
ldi 1,ar1
lsh3 *ar0,ar1,r7
ldi r7,ir0
ldi r7,ar7
lsh -1,ar7
ldi 2048,ir1
ldi 13,ar4
subi *ar0,ar4
lsh3 ar4,ar1,ar5
ldi 1,ar6
fft1: ldi @INADDRD,ar0
ldi *ar0,ar0
addi3 ar7,ar0,ar1
addi3 r7,ar0,ar2
addi3 ar7,ar2,ar3
ldi ar6,rc
subi 1,rc
rptb fft2
addf3 *ar1,*ar0,r0
subf3 *ar1,*ar0,r1
addf3 *ar3,*ar2,r2
subf3 *ar3,*ar2,r3
stf r1,*ar1++(ir0)
|| stf r0,*ar0++(ir0)
fft2: stf r3,*ar3++(ir0)
|| stf r2,*ar2++(ir0)
cmpi 1,ar7
bzd fft5
ldi 1,r6
ldi @SINTAB,ar4
fft3: addi ar5,ar4
ldf *ar4,r5
ldi r6,ar0
ldi @INADDRD,ar1
ldi *ar1,ar1
addi ar1,ar0
addi3 ar7,ar0,ar1
addi3 r7,ar0,ar2
addi3 ar7,ar2,ar3
addi 1,r6
ldi ar6,rc
subi 1,rc
rptb fft4
subf3 *ar1,*ar0,r2
subf3 *ar3,*ar2,r1
mpyf3 r2,r5,r0
|| addf3 *ar3,*ar2,r3
mpyf3 *+ar4(ir1),r1,r3
|| stf r3,*ar2++(ir0)
subf3 r0,r3,r4
mpyf3 r1,r5,r0
|| addf3 *ar1,*ar0,r3
mpyf3 *+ar4(ir1),r2,r3
|| stf r3,*ar0++(ir0)
addf r0,r3
fft4: stf r4,*ar3++(ir0)
|| stf r3,*ar1++(ir0)
cmpi ar7,r6
bnz fft3
lsh 1,ar5
brd fft1
lsh 1,ar6
ldi ar7,ir0
lsh -1,ar7
fft5: ldi r7,rc
subi 3,rc
ldi r7,ir0
lsh -1,ir0
ldi @INADDRD,ar0
ldi *ar0,ar0
addi3 r7,ar0,ar1
ldi ar0,ar2
nop *ar0++(1)
nop *ar2++(ir0)B
ldi ar1,ar3
rptb fft6
cmpi ar2,ar0
bged fft6
nop *ar1++(1)
nop *ar3++(ir0)B
ldf *ar2,r2
|| ldf *ar0++(1),r0
ldf *ar3,r3
|| ldf *ar1,r1
stf r2,*-ar0(1)
|| stf r0,*ar2
stf r3,*ar1
|| stf r1,*ar3
fft6: nop *ar2++(ir0)B
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
output: ldi @MCTL,ar3
ldi MBUS3,ar1
sti ar1,*ar3
ldi @MCTLS,ar3
sti ar1,*ar3
ldi @PORT232,ar1
addi 1,ar1
ldi 21,r0
sti r0,*ar1++ ;1
ldi @PWADDR,ar2
;add program
ldi 99,rc
rptb out1
ldf *ar2++,r0
call dwamp
out1: nop
;--------------------------------------
ldi @PORT232,ar1
ldi 55h,r0
sti r0,*ar1
ldi @MCTL,ar3
ldi MBUS1,ar1
sti ar1,*ar3
ldi @MCTLS,ar3
sti ar1,*ar3
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dwamp: call sqrt
ldf @XNUM,r6
mpyf r6,r0
fix r0
ldi 0ffh,ar4
and3 ar4,r0,r1 ;r1=low 8 bit
and 0ff00h,r0 ;r0=high 8 bit
lsh -8,r0
sti r1,*ar1++
sti r0,*ar1++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.data
;--------------------------------------common data
SINTAB .word SINP
FS .set 727H
DLENTH .set 8192
SULOG .set 0dH
SAMNUM .word 2000H
;--------------------------------------
XNUM .float 0.00048828 ;1/2048
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADRR
SADDR .word 7000H
TNUM .word 7001H
INADDRD .WORD 7002H
LOGFFT .WORD 7003H
;--------------------------------------
MCTLS .WORD 7004H
LEDS .WORD 7005H
FL .WORD 7006H
FH .WORD 7007H
F1 .WORD 7008H
;---------------------------------------------------------------FLASH
TSDATA .WORD 10000H
TSDATAM .WORD 12000H
;------------------------------------------------------------inter ram
MCTL .word 808064H
STCK .word 809E00H
INADDR .word 800000H
PWADDR .word 804000H
;--------------------------------------------------------------------------
ADADER .WORD 810000H ;read
ADADERM .WORD 810001H ;write
LED .WORD 810003H
DDS_FREQ0L .WORD 810008H
DDS_FREQ0H .WORD 810009H
DDS_FREQ1L .WORD 81000AH
DDS_FREQ1H .WORD 81000BH
DDS_PHASE0 .WORD 81000CH
DDS_PHASE1 .WORD 81000DH
DDS_PHASE2 .WORD 81000EH
DDS_PHASE3 .WORD 81000FH
;--------------------------------------------------------------------------
PORT232 .word 0C00000H
PORT2 .word 0C00200H
;--------------------------------------------------------------------------
MBUS1 .set 0001038H ;xxx1 wait level 3--1 wait
MBUS3 .set 0001098H ;x111 wait level 7--3 wait dual port
MBUS7 .set 00010F8H ;x111 wait level F--7 wait DDS & D/A
;-----------------------------------------------------------T_DATA
SINGFXS .FLOAT 178.95697 ;2^32/24000000
FT15M .FLOAT 15000000.0 ;FT15M=F0/FS/8=120000000/8/FS=15000000/FS
;-----------------------------------------------------------------------------
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -