📄 pca9564_init.asm
字号:
.ifnz PCA9564
PCA9564_Init:
;;----------------------------------------------------------
;;RESET=0
rmb PCA9564_RESET_bit,PCA9564_RESET_PORT
;;Delay 1us (request >100ns)
jsr PCA9564_Delay_1us
;;RESET=1
smb PCA9564_RESET_bit,PCA9564_RESET_PORT
;;Delay 1us( request >250ns)
jsr PCA9564_Delay_1us
;;---------------------------------------------------------
;;set TimeOut Register I2CTO=0xff
lda #$00
sta rOutBuffer_9564
jsr PCA9564_WRITE_I2CTO
;;--------------------------------------------------------
;;set Own Address Register I2CADR=0x64 & set A0A1=01
lda #$76
sta rOutBuffer_9564
jsr PCA9564_WRITE_I2CADR
;;--------------------------------------------------------
;;set Control Register I2CCON=0x45 & set A0A1=11
lda #$45
sta rOutBuffer_9564
jsr PCA9564_WRITE_I2CCON
;;--------------------------------------------------------
;;Delay 1ms (request >500us) wait OSC wake up
jsr PCA9564_Delay_1ms
;;--------------------------------------------------------
;;set Control Register I2CCON=0xc5 & set A0A1=11
lda #$c5
sta rOutBuffer_9564
jsr PCA9564_WRITE_I2CCON
;;--------------------------------------------------------
rts
;;=======================================================================
PCA9564_WRITE_I2CTO:
;; set A0A1=00 ,I2CTO
rmb PCA9564_A0_bit,PCA9564_A0_PORT
rmb PCA9564_A1_bit,PCA9564_A1_PORT
jsr PCA9564_WRITE_PORT
rts
;;=======================================================================
PCA9564_WRITE_I2CADR:
;; set A0A1=01 ,I2CADR
rmb PCA9564_A0_bit,PCA9564_A0_PORT
smb PCA9564_A1_bit,PCA9564_A1_PORT
jsr PCA9564_WRITE_PORT
rts
;;=======================================================================
PCA9564_WRITE_I2CDAT:
;; set A0A1=10 ,I2CDAT
smb PCA9564_A0_bit,PCA9564_A0_PORT
rmb PCA9564_A1_bit,PCA9564_A1_PORT
jsr PCA9564_WRITE_PORT
rts
;;=======================================================================
PCA9564_WRITE_I2CCON:
;; set A0A1=11 ,I2CCON
smb PCA9564_A0_bit,PCA9564_A0_PORT
smb PCA9564_A1_bit,PCA9564_A1_PORT
jsr PCA9564_WRITE_PORT
rts
;;=======================================================================
PCA9564_WRITE_PORT:
;; set PCA9564_DATA_PORT as output port
lda #%11111111
sta PCA9564_DATA_CFG
;; CE=0
rmb PCA9564_CE_bit,PCA9564_CE_PORT
;; delay for tcs
nop
nop
;; WR=0
rmb PCA9564_WR_bit,PCA9564_WR_PORT
;; write data to PCA9564 port
lda rOutBuffer_9564
sta PCA9564_DATA_PORT
nop
nop
;; WR=1
smb PCA9564_WR_bit,PCA9564_WR_PORT
;; delay for tch
nop
nop
;; CE=1
smb PCA9564_CE_bit,PCA9564_CE_PORT
rts
;;========================================================================
PCA9564_READ_PORT:
;; set PCA9564_DATA_PORT as input port first should set dataport input
;; because after WR,RD change low ,data valid in 17ns
lda #%00000000
sta PCA9564_DATA_CFG
;; CE=0
rmb PCA9564_CE_bit,PCA9564_CE_PORT
;; delay for tcs
nop
nop
;; RD=0
rmb PCA9564_RD_bit,PCA9564_RD_PORT
;; read data from PCA9564
lda PCA9564_DATA_PORT
sta rOutBuffer_9564
nop
nop
;; RD=1
smb PCA9564_RD_bit,PCA9564_RD_PORT
;; delay for tch
nop
nop
;; CE=1
smb PCA9564_CE_bit,PCA9564_CE_PORT
rts
;;======================================================================
PCA9564_Delay_1ms:
phx
phy
ldx #80
delay2:
ldy #250
delay1:
nop
nop
nop
nop
nop
dey
bne delay1
dex
bne delay2
ply
plx
rts
;;=======================================================================
PCA9564_Delay_1us:
phx
ldx #125
delay3:
nop
dex
bne delay3
plx
rts
.endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -