📄 gt1128.asm
字号:
.ifnz GT1128
init_gt1128:
rmb VFD_STB_bit,VFD_PORT
jsr dly800ns ;ce hold time
;;send out ID
lda #%11010000
sta rOutBuffer
ldy #6 ;6bits
jsr fSendBit
lda #%10001010 ;;enable osc1
sta rOutBuffer
ldy #9 ;9bits, the lastest bit is x(0 or 1)
jsr fSendBit
lda #%10010110 ;;enable osc2
sta rOutBuffer
ldy #9 ;9bits, the lastest bit is x(0 or 1)
jsr fSendBit
lda #%10101000 ;;set BIAS&DUTY
sta rOutBuffer
ldy #9 ;9bits, the lastest bit is x(0 or 1)
jsr fSendBit
lda #%10101111 ;;lcd on
sta rOutBuffer
ldy #9 ;9bits, the lastest bit is x(0 or 1)
jsr fSendBit
smb VFD_DATA_bit,VFD_DATA_PORT
jsr dly800ns
smb VFD_STB_bit,VFD_PORT
rts
;;**************************************************************
;;Function : GT1128 fProcessorVfdWrite
;;Description : Send data or command
;;Input : IOP_DATA1_H -- IOP_DATA4_H
;;Output : NONE
;;**************************************************************
fProcessVfdWrite:
jsr dly800ns ;ce hold time
rmb VFD_STB_bit,VFD_PORT
lda IOP_DATA0_L
and #VFD_DAT_LN_MASK
sta rDataLen
;;send out ID
lda #%11010100
sta rOutBuffer
ldy #6 ;6bits ID code
jsr fSendBit
jsr dly800ns
;;send out Address
lda IOP_DATA1_H
sta rOutBuffer
rol rOutBuffer
nop
rol rOutBuffer
ldy #6 ;6bits Address
jsr fSendBit
jsr dly800ns
;;start to send data
ldx #0
rSendOutNextByte:
lda IOP_DATA2_L,x
sta rOutBuffer
ldy #8
jsr fSendBit
jsr dly800ns
inx
cpx rDataLen ;32bits total
bne rSendOutNextByte
jsr dly800ns ;ce hold time
smb VFD_STB_bit,VFD_PORT
rts
;;*************************************************************
;;Function : fProcessVfdRead
;;Description : process VFD read function
;;Input : parameter on memory
;;Output : data memory
;;**************************************************************
fProcessVfdRead:
rmb VFD_STB_bit,VFD_PORT
jsr dly800ns
;;send out ID
lda #%11011000
sta rOutBuffer
ldy #6 ;6bits
jsr fSendBit
;;send out ID
lda #32
sta rOutBuffer
rol rOutBuffer
nop
rol rOutBuffer
ldy #6 ;6bits
jsr fSendBit
;;start to read data
rmb VFD_DATA_bit,VFD_DATA_PORT_CFG
ldx #0
lRecvNextByte_1:
jsr fRecvOneByte
lda rOutBuffer
sta VfdResponse,x
inx
cpx #2
bne lRecvNextByte_1
jsr dly800ns ;ce hold time
smb VFD_STB_bit,VFD_PORT
smb VFD_DATA_bit,VFD_DATA_PORT_CFG
;;copy to latch
ldx #0
lCopyNext:
lda VfdResponse,x
sta VfdResponse1,x
inx
cpx #4
bne lCopyNext
lda $460 ;flush out cache
lda $480
rts
;;**************************************************************
;;Function : fRecvOneByte
;;Description : read one byte data to VFD port
;;Input : NONE
;;Output : rOutBuffer
;;**************************************************************
fRecvOneByte:
ldy #8
lRecvNextBit:
;;out clk low
rmb VFD_CLK_bit,VFD_PORT
;;delay at least 1.5us
jsr dly800ns ;data output delay
jsr dly800ns
jsr dly800ns
jsr dly800ns
bbr VFD_DATA_bit,VFD_DATA_PORT,lIsLow
sec
bra lMakeData
lIsLow:
clc
lMakeData:
ror rOutBuffer
;;out clock high
smb VFD_CLK_bit,VFD_PORT
jsr dly800ns ;clk high time
jsr dly800ns
jsr dly800ns
jsr dly800ns
dey
bne lRecvNextBit
rts
;;*************************************************************
;;Function :fSentBit
;;Description :y register value decide how many bit send
;;Input :rOutBuffer MSB out!
;;Output :NONE
;;**************************************************************
fSendBit:
lSendBitloop:
;;out clock low
rmb VFD_CLK_bit,VFD_PORT
jsr dly800ns
rol rOutBuffer
bcc lOutLow1
smb VFD_DATA_bit,VFD_DATA_PORT
bra lSendOutOk1
lOutLow1:
rmb VFD_DATA_bit,VFD_DATA_PORT
lSendOutOk1:
;;hold at least 400ns
jsr dly800ns ;ce setup time & data setup time
jsr dly800ns ;ce setup time & data setup time
;;out clock high
smb VFD_CLK_bit,VFD_PORT
jsr dly800ns ;data hold time
jsr dly800ns ;ce setup time & data setup time
dey
bne lSendBitloop
rts
dly800ns:
phx
ldx #8
lDelayLoop3:
dex
bne lDelayLoop3
plx
rts
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -