?? spl10308.asm
字號:
.ifnz SPL10308
fProcessVfdWrite:
;;get data size
lda IOP_DATA0_L
and #VFD_DAT_LN_MASK
beq lExitPorcessVfdWrite ;;if data len =0 then exit
sta rDataLen
;;get data address
lda IOP_DATA1_L
and #VFD_FIRST_DATA_ADDR
sta rAddress ;;lcd address
ldx #0
lSendOutNextByte:
lda IOP_DATA1_L
and #F0H
ora #$10
ora rAddress
sta rOutBuffer ;;command+addresss
;;STB = 0 delay 340u
smb VFD_STB_bit,VFD_PORT_CFG
lda #42
sta DelayLoopCnt
jsr fDelayX10us
;;sent cmd and address,address evry time sent!
jsr fSendOneByte
lda IOP_DATA2_L,x
sta rOutBuffer
jsr fSendOneByte
;;-------------------------------------------
;;out clock high
smb VFD_CLK_bit,bPortBuff ;; set CLK = 1
lda bPortBuff
sta VFD_PORT
;;delay 100us
lda #12
sta DelayLoopCnt
jsr fDelayX10us
;;-------------------------------------------
;;out stb high
rmb VFD_STB_bit,VFD_PORT_CFG
;;delay 100us
lda #12
sta DelayLoopCnt
jsr fDelayX10us
;;;-------------------------------------------
;;out data low
rmb VFD_DATA_bit,VFD_DATA_PORT_CFG
inc rAddress
inx
cpx rDataLen
bne lSendOutNextByte
lExitPorcessVfdWrite:
rts
;;*************************************************************
;;Function : fProcessVfdRead
;;Description : process VFD read function
;;Input : parameter on memory
;;Output : data memory
;;**************************************************************
fProcessVfdRead:
;;STB = 0
;;rmb VFD_STB_bit,VFD_PORT
smb VFD_STB_bit,VFD_PORT_CFG
;;rmb 0,rSysCtrlFlag
;;delay 280us
lda #42
sta DelayLoopCnt
jsr fDelayX10us
;;send out command
lda VfdScanCode
sta rOutBuffer
jsr fSendOneByte
;;start to read data
;;change port to INPUT
rmb VFD_DATA_bit,VFD_DATA_PORT_CFG
;;get data
nop
nop
nop
jsr fRecvOneByte
lda rOutBuffer
sta VfdResponse
beq lResponseIs0
and #$0f
sta VfdResponse1
;lda #$12
;sta VfdResponse1
nop
nop
nop
nop
nop
nop
lResponseIs0:
;;change port to OUTPUT
smb VFD_DATA_bit,VFD_DATA_PORT_CFG
nop
nop
nop
nop
nop
nop
.if 0 ;;standby mode code
;;check VFD power code
ldx VFDPowerOffset
lda VfdResponse1,x
cmp VFDPowerMASK
bne lSkipUpdateVfdData
lResetAll:
lda #$de
sta Reset_RISC_L
lda #$ad
sta Reset_RISC_H
.endif
lSkipUpdateVfdData:
smb VFD_CLK_bit,bPortBuff ;; set CLK = 1
lda bPortBuff
sta VFD_PORT
;;delay 100us
lda #11
sta DelayLoopCnt
jsr fDelayX10us
;;-------------------------------------------
;;STB = 1
rmb VFD_STB_bit,VFD_PORT_CFG
;;delay 100us
lda #11
sta DelayLoopCnt
jsr fDelayX10us
;;;-------------------------------------------
;;out data low
rmb VFD_DATA_bit,VFD_DATA_PORT_CFG
;;flush out cache
lda $460
lda $480
rts
;;**************************************************************
;;Function : fSendOneByte
;;Description : output one byte data to VFD port
;;Input : rOutBuffer
;;Output : NONE
;;**************************************************************
fSendOneByte:
ldy #8
lSendNextBit:
ror rOutBuffer
bcc lOutLow
;;smb VFD_DATA_bit,VFD_PORT
rmb VFD_DATA_bit,VFD_DATA_PORT_CFG
bra lSendOutOk
lOutLow:
;;rmb VFD_DATA_bit,VFD_PORT
smb VFD_DATA_bit,VFD_DATA_PORT_CFG
lSendOutOk:
;;out clock low
rmb VFD_CLK_bit,bPortBuff ;; set CLK = 0
lda bPortBuff
sta VFD_PORT
;;smb VFD_CLK_bit,VFD_PORT_CFG
;;hold at least 200ns
;;jsr fDelay1
lda #8
sta DelayLoopCnt
jsr fDelayX10us
;;out clock high
smb VFD_CLK_bit,bPortBuff ;; set CLK = 1
lda bPortBuff
sta VFD_PORT
;;rmb VFD_CLK_bit,VFD_PORT_CFG
;;jsr fDelay1
lda #8
sta DelayLoopCnt
jsr fDelayX10us
dey
bne lSendNextBit
rts
;;**************************************************************
;;Function : fRecvOneByte
;;Description : read one byte data to VFD port
;;Input : NONE
;;Output : rOutBuffer
;;**************************************************************
fRecvOneByte:
ldy #8
lRecvNextBit:
rmb VFD_CLK_bit,bPortBuff ;; set CLK = 0
lda bPortBuff
sta VFD_PORT
;;smb VFD_CLK_bit,VFD_PORT_CFG
;;jsr fDelay1
;;delay 60us
lda #7
sta DelayLoopCnt
jsr fDelayX10us
;;out clock high
smb VFD_CLK_bit,bPortBuff ;; set CLK = 1
lda bPortBuff
sta VFD_PORT
lda #7
sta DelayLoopCnt
jsr fDelayX10us
bbr VFD_DATA_bit,VFD_DATA_PORT,lIsLow
sec
bra lMakeData
lIsLow:
clc
lMakeData:
ror rOutBuffer ;;fix reverse_fun on vfd.c
dey
bne lRecvNextBit
rts
.endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -