?? ex4.asm
字號:
.sect "init"
.global init
.text
.word init
.space 8
.word timer0
init: ldp 0,dp
ldi @STCK,sp ;INIT STACK
ldi 1800H,st ;INIT ST
;-------------------------UART
ldi @MCTL,ar0 ;降低總線速度適應雙口RAM
ldi MBUS3,r0
sti r0,*ar0
ldi @MCTLS,ar0
sti r0,*ar0
ldi 0,r0
ldi @PORT232,ar1
sti r0,*ar1 ;清除接收標志
;-------------------------UART
ldi @MCTL,ar0 ;INIT MAIN BUS
ldi MBUS1,r0
sti r0,*ar0
ldi @MCTLS,ar0
sti r0,*ar0
ldi 0,r0
ldi @ADADER,ar0
sti r0,*ar0
ldi @ADADERM,ar0
sti r0,*ar0
ldi @TSDATA,ar0
ldi @SADDR,ar1
sti ar0,*ar1
;-------------------------DDS
call ddsinit
ldf 11,r0
ldi @F1,ar0
stf r0,*ar0
float 495,r0
ldi @FL,ar0
stf r0,*ar0
float 605,r0
ldi @FH,ar0
stf r0,*ar0
call sinit
;-------------------------DDS
call initt0 ;timer0 init
ldi 100H,IE ;ACTIVE TIMER0
or 2000h,st
main: ldi @TNUM,ar0
ldi *ar0,r0
absi r0
cmpi 666h,r0
blt main
ldi 0,r0
sti r0,*ar0
ldi @LEDS,ar0
ldi *ar0,r0
cmpi 0,r0
ldieq 1,r0
ldine 0,r0
sti r0,*ar0
ldi @LED,ar0
sti r0,*ar0
;-------------------------UART
ldi @MCTL,ar0 ;降低總線速度適應雙口RAM
ldi MBUS3,r0
sti r0,*ar0
ldi @MCTLS,ar0
sti r0,*ar0
ldi @PORT232,ar1
ldi *ar1,r0
and 0ffh,r0
cmpi 55h,r0
bne jump
ldi *+ar1(1),r0
and 0ffh,r0
cmpi 3,r0
bne FSKout
ldi 808h,ar0
lsh 12,ar0
addi 30h,ar0
ldi 0h,r0 ;STOP TIMER1
sti r0,*ar0
ldi *+ar1(2),r0
and 0ffh,r0
ldi *+ar1(3),r1
and 0ffh,r1
lsh 8,r0
or r1,r0
float r0
;-------------------------DDS
ldi @FL,ar0
stf r0,*ar0
ldi @FH,ar0
stf r0,*ar0
ldi @MCTL,ar0
ldi MBUS7,r0
sti r0,*ar0
ldi @MCTLS,ar0
sti r0,*ar0
ldi @FL,ar0
ldf *ar0,r0
ldi @FH,ar0
ldf *ar0,r1
mpyf @SINGFXS,r0
addf 0.5,r0
fix r0
mpyf @SINGFXS,r1
addf 0.5,r1
fix r1
ldi 0ffffh,r6
lsh 16,r6
and3 r6,r0,r5
lsh -16,r5
ldi @DDS_FREQ0H,ar0
sti r5,*ar0
ldi @DDS_FREQ0L,ar0
sti r0,*ar0
and3 r1,r6,r5
lsh -16,r5
ldi @DDS_FREQ1H,ar0
sti r5,*ar0
ldi @DDS_FREQ1L,ar0
sti r1,*ar0
ldi 0,r0
ldi @PORT232,ar1
sti r0,*ar1 ;清除接收標志
;ldi @MCTL,ar0
;ldi MBUS1,r0
;sti r0,*ar0
;ldi @MCTLS,ar0
;sti r0,*ar0
br jump
FSKout: ldi *+ar1(2),r0
and 0ffh,r0
ldi *+ar1(3),r1
and 0ffh,r1
lsh 8,r0
or r1,r0
ldi *+ar1(4),r1
and 0ffh,r1
ldi *+ar1(5),r2
and 0ffh,r2
lsh 8,r1
or r2,r1
ldi *+ar1(6),r2
and 0ffh,r2
ldi *+ar1(7),r3
and 0ffh,r3
lsh 8,r2
or r3,r2
float r0
float r1
float r2
ldi @F1,ar0
stf r2,*ar0
ldi @FL,ar0
stf r1,*ar0
ldi @FH,ar0
stf r2,*ar0
call sinit
ldi 0,r0
ldi @PORT232,ar1
sti r0,*ar1 ;清除接收標志
;-------------------------UART
jump: ldi @MCTL,ar0 ;INIT MAIN BUS
ldi MBUS1,r0
sti r0,*ar0
ldi @MCTLS,ar0
sti r0,*ar0
call msamp
br main
;------------------------------
timer0: push st
push ar0
push ar1
push ar2
push BK
ldi SAMNUM,BK
ldi @MCTL,ar0
ldi MBUS7,ar1
sti ar1,*ar0
ldi @ADADER,ar0
ldi *ar0++,ar2
addi 2000h,ar2
and 3fffh,ar2
sti ar2,*ar0
ldi @SADDR,ar0
ldi *ar0,ar0
sti ar2,*ar0++%
ldi @SADDR,ar2
sti ar0,*ar2
ldi @MCTL,ar1
ldi @MCTLS,ar0
ldi *ar0,ar0
sti ar0,*ar1
ldi @TNUM,ar0
ldi *ar0,ar1
addi 1,ar1
sti ar1,*ar0
pop BK
pop ar2
pop ar1
pop ar0
pop st
reti
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
initt0: ldi 0,r0
ldi 808h,ar0
lsh 12,ar0
addi 20h,ar0
sti r0,*+ar0(4)
ldi FS,r0
sti r0,*+ar0(8)
ldi 3c1h,r0
sti r0,*ar0
rets
;------------------------------
msamp: ldi SAMNUM,BK
ldi @INADDR,ar2
ldi @SADDR,ar0
ldi *ar0,ar1
ldi DLENTH0,rc
subi 2,rc
float *ar1++%,r0
rptb samp0
samp0: float *ar1++%,r0
|| stf r0,*ar2++
stf r0,*ar2++
;------------------below selelct
ldf 0.0,r0
ldi DLENTH0,rc
subi 1,rc
rptb samp1
samp1: stf r0,*ar2++
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ddsinit:ldi @MCTL,ar0
ldi MBUS7,r0
sti r0,*ar0
ldi 4000h,r0
lsh 4,r0
rpts r0
nop
ldi 0,r0
ldi @DDS_PHASE0,ar0
sti r0,*ar0
ldi @DDS_PHASE1,ar0
sti r0,*ar0
ldi @DDS_PHASE2,ar0
sti r0,*ar0
ldi @DDS_PHASE3,ar0
sti r0,*ar0
ldi @MCTL,ar0
ldi MBUS1,r0
sti r0,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sinit: ldi @F1,ar0
ldf *ar0,r0
call initt1
ldi @MCTL,ar0
ldi MBUS7,r0
sti r0,*ar0
ldi @FL,ar0
ldf *ar0,r0
ldi @FH,ar0
ldf *ar0,r1
mpyf @SINGFXS,r0
addf 0.5,r0
fix r0
mpyf @SINGFXS,r1
addf 0.5,r1
fix r1
ldi 0ffffh,r6
lsh 16,r6
and3 r6,r0,r5
lsh -16,r5
ldi @DDS_FREQ0H,ar0
sti r5,*ar0
ldi @DDS_FREQ0L,ar0
sti r0,*ar0
and3 r1,r6,r5
lsh -16,r5
ldi @DDS_FREQ1H,ar0
sti r5,*ar0
ldi @DDS_FREQ1L,ar0
sti r1,*ar0
ldi @MCTL,ar0
ldi MBUS1,r0
sti r0,*ar0
ldi @MCTLS,ar0
sti r0,*ar0
rets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subE: initt1
initt1: call invf ;input data R0 float
ldf @FT15M,r4
mpyf r0,r4
addf 0.5,r4
fix r4
ldi 0h,r0 ;r4=FS
ldi 808h,ar0 ;INIT TIMER1
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;subE: initt1
.data
TNUM .word 7000H
LEDS .word 7001H
MCTLS .word 7002H
SADDR .word 7003H
F1 .word 7004H
FL .word 7005H
FH .word 7006H
TSDATA .word 10000H
INADDR .word 800000H
MCTL .word 808064H
STCK .word 809E00H
ADADER .word 0810000H
ADADERM .word 0810001H
LED .word 0810003H
PORT232 .word 0C00200H
SIMVECT .word 0809FC1H
;------------------------------
FS .set 727H
DLENTH0 .set 8192
SAMNUM .set 2000H
MBUS1 .set 0001038H
MBUS3 .set 0001098H
MBUS7 .set 00010F8H
;------------------------------
SINGFXS .FLOAT 178.95697 ;2^32/24000000
FT15M .FLOAT 15000000.0 ;FT15M=F0/FS/8=120000000/8/FS=15000000/FS
;--------------------------------------------------------------------------
DDS_FREQ0L .WORD 0810008H
DDS_FREQ0H .WORD 0810009H
DDS_FREQ1L .WORD 081000AH
DDS_FREQ1H .WORD 081000BH
DDS_PHASE0 .WORD 081000CH
DDS_PHASE1 .WORD 081000DH
DDS_PHASE2 .WORD 081000EH
DDS_PHASE3 .WORD 081000FH
.end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -