?? ad7312.asm
字號:
.ifnz AD7312
init_ad7312:
lda #$fe
sta AD7312RegAddr
jsr ReadRegisterAD7312
lda #$fd
sta AD7312RegAddr
jsr ReadRegisterAD7312
lda rOutBuffer
sta DataReadFromReg
lda DataReadFromReg
and #%00000010
bne Prestop
bra initad7312
Prestop:
lda #0
sta DataReadFromReg
jmp init_end
initad7312:
lda #0
sta DataReadFromReg
jsr fDelay1
smb VFD_STB_bit,VFD_PORT_CFG
lda #$8c
sta rOutBuffer
jsr fSendOneByte
rmb VFD_STB_bit,VFD_PORT_CFG
jsr fDelay1
smb VFD_STB_bit,VFD_PORT_CFG
lda #$87
sta rOutBuffer
jsr fSendOneByte
rmb VFD_STB_bit,VFD_PORT_CFG
jsr fDelay1
lda #$d9 ;;Set STANDBY KEY
sta AD7312RegAddr
lda #$01 ;;Set it by user
sta WriteToRegData
jsr WriteDataToAD7312Reg
lda #$f7 ;;Set IR ID first code
sta AD7312RegAddr
lda #$04 ;;Set it by user
sta WriteToRegData
jsr WriteDataToAD7312Reg
lda #$f8 ;;Set IR ID second code
sta AD7312RegAddr
lda #$fb ;;Set it by user
sta WriteToRegData
jsr WriteDataToAD7312Reg
lda #$f9 ;;Set IR Power ON/OFF KEY
sta AD7312RegAddr
lda #$70 ;;Set it by user
sta WriteToRegData
jsr WriteDataToAD7312Reg
lda #$fa ;;Set IR Power ON/OFF KEY
sta AD7312RegAddr
lda #$ff ;;Set it by user
sta WriteToRegData
jsr WriteDataToAD7312Reg
lda #$fb ;;Set IR Power ON/OFF KEY
sta AD7312RegAddr
lda #$ff ;;Set it by user
sta WriteToRegData
jsr WriteDataToAD7312Reg
lda #$fc ;;Enter Power Saving is controlled by AD7312
sta AD7312RegAddr
lda #$a0
sta WriteToRegData
jsr WriteDataToAD7312Reg
lda #$fd ;;FLAG=1 set systerm first connect AC power
sta AD7312RegAddr
lda #$40
sta WriteToRegData
jsr WriteDataToAD7312Reg
.ifnz HUAJIA_AD7312
lda #%00010000
sta IOP_DATA5_H
.endif
init_end:
rts
WriteDataToAD7312Reg:
smb VFD_STB_bit,VFD_PORT_CFG
lda #$44
sta rOutBuffer
jsr fSendOneByte
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
rmb VFD_STB_bit,VFD_PORT_CFG
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
smb VFD_STB_bit,VFD_PORT_CFG
lda AD7312RegAddr
sta rOutBuffer
jsr fSendOneByte
lda WriteToRegData
sta rOutBuffer
jsr fSendOneByte
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
rmb VFD_STB_bit,VFD_PORT_CFG
rts
ReadRegisterAD7312:
smb VFD_STB_bit,VFD_PORT_CFG ;;STB=0
lda #$43
sta rOutBuffer
jsr fSendOneByte
jsr fDelay1
rmb VFD_STB_bit,VFD_PORT_CFG
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
smb VFD_STB_bit,VFD_PORT_CFG ;;STB=0
lda AD7312RegAddr
sta rOutBuffer
jsr fSendOneByte
nop
rmb VFD_DATA_bit,VFD_DATA_PORT_CFG ;;DATA IN
jsr fDelay1
jsr fRecvOneByte
nop
smb VFD_DATA_bit,VFD_DATA_PORT_CFG ;;DATA OUT
jsr fDelay1
rmb VFD_STB_bit,VFD_PORT_CFG
rts
fProcessVfdWrite:
smb VFD_STB_bit,VFD_PORT_CFG ;;STB=0
;;send out command
lda IOP_DATA1_L ;;cmd0
sta rOutBuffer
jsr fSendOneByte
;;get data size
lda IOP_DATA0_L
and #VFD_DAT_LN_MASK
beq lExitPorcessVfdWrite ;;if data len =0 then exit
lProcessDataOut:
sta rDataLen
ldx #0
lSendOutNextByte:
lda IOP_DATA2_L,x
sta rOutBuffer
jsr fSendOneByte
inx
cpx rDataLen
bne lSendOutNextByte
lExitPorcessVfdWrite:
jsr fDelay1
rmb VFD_STB_bit,VFD_PORT_CFG ;;STB=1
rts
;;*************************************************************
;;Function : fProcessVfdRead
;;Description : process VFD read function
;;Input : parameter on memory
;;Output : data memory
;;**************************************************************
fProcessVfdRead:
smb VFD_STB_bit,VFD_PORT_CFG ;;STB=0
;;send out command
lda VfdScanCode ;;cmd
sta rOutBuffer
jsr fSendOneByte
;;start to read data
;;change port to INPUT
rmb VFD_DATA_bit,VFD_DATA_PORT_CFG
;;get data
ldx #0
lRecvNextByte_1:
jsr fRecvOneByte
lda rOutBuffer
sta VfdResponse,x
beq lResponseIs0
;;has new response
smb 0,rSysCtrlFlag
lResponseIs0:
inx
cpx VfdRespLen
bne lRecvNextByte_1
;;check has any new key push
bbr 0,rSysCtrlFlag,lSkipUpdateVfdData
;;copy to latch
ldx #0
lCopyNext:
lda VfdResponse,x
sta VfdResponse1,x
inx
cpx VfdRespLen
bne lCopyNext
lSkipUpdateVfdData:
smb VFD_DATA_bit,VFD_DATA_PORT_CFG
rmb VFD_STB_bit, VFD_PORT_CFG ;;STB=1
;;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_DATA_PORT ;;DATA=1
bra lSendOutOk
lOutLow:
rmb VFD_DATA_bit,VFD_DATA_PORT ;;DATA=0
lSendOutOk:
rmb VFD_CLK_bit,VFD_PORT ;; set CLK = 0
;;hold at least 200ns
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
smb VFD_CLK_bit,VFD_PORT ;; set CLK = 1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
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,VFD_PORT ;; set CLK = 0
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
smb VFD_CLK_bit,VFD_PORT ;; set CLK = 1
jsr fDelay1
jsr fDelay1
jsr fDelay1
jsr fDelay1
bbr VFD_DATA_bit,VFD_DATA_PORT,lIsLow
sec
bra lMakeData
lIsLow:
clc
lMakeData:
rol rOutBuffer ;;fix reverse_fun on vfd.c
dey
bne lRecvNextBit
rts
.endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -