📄 dv336.asm
字号:
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub7: test_ ram
test_ram:
ldi 2000h,ar0
ldi 0,r0
ldi @FFFF,r1
lsh 16,r1
addi @FFFF,r1
ldi 1900h,rc
lsh 4,rc
rptb testr
ldi *ar0,r3
push r3
sti r1,*ar0
ldi *ar0,r2
cmpi r1,r2
bne teste
sti r0,*ar0
ldi *ar0,r2
cmpi r0,r2
bne teste
pop r3
sti r3,*ar0++
testr: nop
br testg
teste:
ldi 1,ar6
br stop
testg:
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subG: write_frequency
wfreq: ;input: r7 float; ar7 word num.
;write addr. ar1; ar4 mpyf num.
float ar4,r6 ;point position:ar5
mpyf r6,r7 ;work unit:ar6,r6,r5
addf 0.5,r7 ;ar7,ar4,ar5 may continus use
fix r7
ldi 0ffh,ar6
and3 ar6,r7,r6 ;r6=low 8 bit
lsh 8,ar6
and3 ar6,r7,r5 ;r5=middle 8 bit
lsh -8,r5
lsh 8,ar6
and ar6,r7
lsh -16,r7 ;r7=hifh 8 bits
sti r6,*ar1++
sti r5,*ar1++
cmpi 2,ar7
beq wfreq0
sti r7,*ar1++
wfreq0:
sti ar5,*ar1++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm subH: write_amplitude
wamp: ;input: r7 float; ar7 word num.
;write addr. ar1;
call sqrt
ldf @XNUM,r6
mpyf r6,r0
cmpi 1,r7
beq wamp0
mpyf r6,r0
mpyf 2,r0
wamp0: mpyf 1.2,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
;--------------------------------------------------------------jljs
;--------------------------------------------------------------jljs
; 1: rdata 2: jfirlp 3: jprc 4: ifftj 5: half 6: jproc
; 7: jlimit 8: jrule 9: jddata A: jfindf B: move C: jdata
; D: jljsf E: jamplh F: jljs G: jtest H: jcode I: jinit
; J: jljsdc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;jljs sub1:cjljs
cjljs: ldi @JSDATA,ar0
ldi 1536,rc
ldf 0,r0
rptb cjljs0
cjljs0: stf r0,*ar0++
ldi @JDATAS0,ar0
ldi 8190,rc
ldi 0,r0
rptb cjljs1
cjljs1: sti r0,*ar0++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;comm sub2: msamp
rdata: ldi @SAMNUM,BK
ldi @TDATA,ar2
ldi @CHNUM,ar0
ldi *ar0,r0
subi 1,r0
mpyi 4000h,r0
addi r0,ar6
ldi ar6,ar1
ldi 1000h,ir0
nop *ar1--(ir0)%
ldi 4094,rc
float *ar1++%,r0
rptb jsamp0
jsamp0: float *ar1++%,r0
|| stf r0,*ar2++
stf r0,*ar2
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;jljs sub3: jfirlp
jfirlp: ldi @JSDATA,ar1
ldi @JINADDR,ar3
ldi 1534,rc ;2048-512-2=1534
ldf *ar1++,r0
rptb jfetc0
jfetc0: ldf *ar1++,r0
|| stf r0,*ar3++
stf r0,*ar3++
ldi N46,BK
ldi @SAR46,ar0
ldi *ar0,ar1
ldi ar1,ar7 ;57*9=513,data number=512
ldi 6,ir0
nop *ar1++(ir0)%,
sti ar1,*ar0
ldi ar7,ar1
ldi @TDATA,ar2
ldi ar2,ar7
addi 4096,ar7
ldi @H46,ar0
jfir0: ldf *ar2++,r0 ;use ar2,ar7,ar0,ar1
cmpi ar2,ar7
blt jfir2
stf r0,*ar1++%
ldi @JPOINT,ar4
ldi *ar4,r0
addi 1,r0
sti r0,*ar4
cmpi 1,r0
beq jfir1
cmpi JFNUM,r0
ldige 0,r0
sti r0,*ar4
br jfir0
jfir1: ldf 0,r0
ldf 0,r2
rpts N46-1
mpyf3 *ar0++(1)%,*ar1++(1)%,r0
|| addf r0,r2
addf r0,r2
stf r2,*ar3++
br jfir0
jfir2: ldf 0,r0
ldi 2047,rc
rptb jfetc3
jfetc3: stf r0,*ar3++ ;IMAG PART CLEAR end
ldi @JINADDR,ar1
addi 512,ar1
ldi @JSDATA,ar3
ldi 1534,rc
ldf *ar1++,r0
rptb jfetc2
jfetc2: ldf *ar1++,r0
|| stf r0,*ar3++
stf r0,*ar3
rets
;SUB12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;jljs sub4: jrcout
jrcout: ldi @MCTL,ar3 ;INIT MAIN BUS
ldi MBUS3,ar1
sti ar1,*ar3
ldi @MCTLS,ar0
sti ar1,*ar0
ldi @PORT232,ar1
addi 1,ar1
ldi 35,r0
sti r0,*ar1++ ;1
ldi @RAX,ar0
ldi *ar0,r0
sti r0,*ar1++ ;2
ldi @SMODE,ar0
ldi *ar0,r1
ldi @GMODE,ar0
ldi *ar0,r0
lsh 4,r0
or r1,r0
sti r0,*ar1++ ;3
ldi @JSORT,ar0
ldi *ar0,r6
sti r6,*ar1++ ;4
ldi @JLFLAG,ar0
ldi *ar0,r0
sti r0,*ar1++ ;5 F0
ldi 0ffh,r1
ldi 0ff00h,r2
ldi @JSUM,ar0 ;6-7
ldf *ar0,r0
mpyf 10.0,r0
addf 0.5,r0
fix r0
and3 r1,r0,r4
and3 r2,r0,r5
lsh -8,r5
sti r4,*ar1++
sti r5,*ar1++
;----------------------------------
ldi @JCYSUMZ,ar3
ldi *ar3,r1
lsh -1,r1
ldi 0ffh,r4
ldi 0ff00h,r5
and3 r4,r1,r6
and r5,r1
lsh -8,r1
sti r6,*ar1++ ;8
sti r1,*ar1++ ;9
ldi ar2,ar0
ldi *ar0++,r1
sti r1,*ar1++ ;10 first code "1" or "0"
jtemp1: ldi 11,rc ;11-34 12*2=24
rptb jrcout0
ldi *ar0++(2),r1
and3 r4,r1,r6 ;r6=low 8 bit
and r5,r1 ;r1=high 8 bit
lsh -8,r1
sti r6,*ar1++
jrcout0:sti r1,*ar1++
;--------------------------------------
ldi @CHNUM,ar0
ldi *ar0,r1
sti r1,*ar1++ ;35
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subA: save data of 25,50 and 75hz
move: ldi @JINADDR,ar0 ;move fft data from 20 to 171
ldi @SAVE,ar1
addi 20,ar0
ldi ar0,ar2
addi 20,ar1
ldi ar1,ar3
ldi 151,rc
rptb move1
ldf *ar0++,r1
move1: stf r1,*ar1++
addi JDLENTH,ar2
addi 100h,ar3
ldi 151,rc
rptb move2
ldf *ar2++,r1
move2: stf r1,*ar3++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub9: find f0
jfindf:
ldi J_S1,r4
ldi J_S2,ar7
subi r4,ar7
ldi @PWADDR,ar0
ldi J_R5,r5
ldi @JRESULT,ar2
ldi ar2,ar6
addi 2,ar6
ldf 0,r2
jcomp0 ldi ar0,ar5 ;ar0 is pwaddr,input data first addr.
ldi ar7,rc ;use init value: ar2 ar0 ar7
subi 1,rc ;ar2 is result addr.
ldf *ar5++,r0 ;ar7 data number
ldi ar5,r1 ;ar6 result end addr.
rptb jcomp1 ;ar5 save ar0
cmpf *ar5++,r0
ldflt *-ar5(1),r0 ;r1 save active addr.
jcomp1 ldilt ar5,r1
subi 1,r1
ldi r1,ar5
subi r5,ar5
ldi r5,rc
lsh 1,rc
rptb jcomp2
jcomp2: stf r2,*ar5++
subi ar0,r1
addi r4,r1 ;r4=first f
lsh -1,r1
sti r1,*ar2++
cmpi ar6,ar2
blt jcomp0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub2: jprc
jprc: call ifftj
call half
call jproc
call jlimit
call jrule
call jddata
call jdata
call jamplh
call jljs
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub3: ifftj
ifftj:
ldi JS25,r0
ldi @JINADDR,ar1
ldi JDLENTH,rc
ldf 0,r2
lsh 1,rc
subi 1,rc
rptb ift0
ift0: stf r2,*ar1++
ldi @SAVE,ar0
ldi @JINADDR,ar1
ldi JDLENTH,r1
addi3 r1,ar1,ar2
subi r0,ar2
addi r0,ar0
addi r0,ar1
ldi 25,r6
ldi r6,rc
rptb ift1
ldf *ar0++,r1
stf r1,*ar1++
ift1: stf r1,*ar2--
ldi @SAVE,ar0
ldi @JINADDR,ar1
addi r0,ar0
addi 100h,ar0
ldi JDLENTH,r1
addi r1,ar1
addi3 r1,ar1,ar2
subi r0,ar2
addi r0,ar1
ldi r6,rc
rptb ift2
ldf *ar0++,r1
negf r1,r2
stf r1,*ar1++
ift2: stf r2,*ar2--
ldi @INADDRD,ar0
ldi @JINADDR,r0
sti r0,*ar0
ldi @LOGFFT,ar0 ;ar0 save 09--512,0b--2048
ldi JLOGNUM,r0
sti r0,*ar0
call ifft
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub4: half
half:
ldi @JINADDR,ar1
ldi 2047,rc
ldf 0,r3
rptb half0
ldf *ar1++,r2
half0: addf r2,r3
mpyf @XNUM,r3
ldi @JINADDR,ar1
ldi JDLENTH,rc
subi 1,rc
rptb half1
ldf *ar1,r2
subf r3,r2 ;r2=r2+m(i)
cmpf 0,r2
ldflt 0,r2
half1: stf r2,*ar1++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub5: jproc
jproc:
ldi @JINADDR,ar1
ldi @JINADDR,ar0
ldi 0,r6
jproc0:
ldf *ar1++,r0
ldi 44,rc
rptb jproc1
jproc1: addf *ar1++,r0
mpyf JX45,r0
stf r0,*ar0++
ldi ar0,ar1
addi 1,r6
cmpi 2003,r6
blt jproc0
ldi @JINADDR,ar1
ldi @JINADDR,ar0
ldi 0,r6
jproc2:
ldf *ar1++,r0
ldi 44,rc
rptb jproc3
jproc3: addf *ar1++,r0
mpyf JX45,r0
stf r0,*ar0++
ldi ar0,ar1
addi 1,r6
cmpi 1958,r6
blt jproc2
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub6: jlimit
jlimit:
ldi @JINADDR,ar1
ldi 1957,rc
ldf 0,r4
rptb jlimi0
jlimi0: addf *ar1++,r4
mpyf @XNUM,r4
ldf 0,r5
ldf 0,r0
ldi @JINADDR,ar1
ldf *ar1++,r2
ldi 1957,rc
rptb jlimi1
cmpf r4,r2
ble jlimi1
addf r2,r5
addf 1.0,r0
jlimi1: ldf *ar1++,r2
call invf
mpyf r0,r5
subf3 r4,r5,r0
mpyf JCIFF,r0
addf r0,r4
ldi @JLIANG,ar0
stf r4,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sub7: jrule
jrule:
ldi @JDATAS0,ar1
ldi @JDATAD,ar0
ldi *ar1++,r0
ldi 5117,rc ;1024X7=7168, 7168-2048-1=5119
rptb jrule0
jrule0: ldi *ar1++,r0
|| sti r0,*ar0++
sti r0,*ar0++
ldi @JLIANG,ar1
ldf *ar1,r7
ldi @JINADDR,ar2 ;5120+1958=7078
ldi 1957,rc
rptb jrule1
ldi 0,r0
cmpf *ar2++,r7
ldile 1,r0
jrule1: sti r0,*ar0++
ldi @JDATAS0,ar1
ldi @JDATAD,ar0
addi 512,ar0
ldi *ar0++,r0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -