|
|
@ -121,7 +121,7 @@ lp2b: push de |
|
|
|
|
|
|
|
|
CALL PCF_WAIT_FOR_BB |
|
|
CALL PCF_WAIT_FOR_BB |
|
|
JP NZ,PCF_BBERR |
|
|
JP NZ,PCF_BBERR |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
LD A,(addr) |
|
|
LD A,(addr) |
|
|
OUT (PCF_RS0),A |
|
|
OUT (PCF_RS0),A |
|
|
CALL PCF_START ; GENERATE START CONDITION |
|
|
CALL PCF_START ; GENERATE START CONDITION |
|
|
@ -148,7 +148,7 @@ lp4f: ld a,(addr) ; adjust address |
|
|
call _hexout |
|
|
call _hexout |
|
|
|
|
|
|
|
|
lp5f: ld a,(addr) ; next address |
|
|
lp5f: ld a,(addr) ; next address |
|
|
add a,2 ; adjust for |
|
|
|
|
|
|
|
|
add a,2 ; adjust for |
|
|
ld (addr),a ; 7-bit |
|
|
ld (addr),a ; 7-bit |
|
|
|
|
|
|
|
|
CALL PCF_STOP |
|
|
CALL PCF_STOP |
|
|
@ -157,7 +157,7 @@ lp5f: ld a,(addr) ; next address |
|
|
dec e ; reached end |
|
|
dec e ; reached end |
|
|
jp nz,lp2b ; of line |
|
|
jp nz,lp2b ; of line |
|
|
call _eolout |
|
|
call _eolout |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dec d ; loop until |
|
|
dec d ; loop until |
|
|
jp nz,lp3b ; all done |
|
|
jp nz,lp3b ; all done |
|
|
|
|
|
|
|
|
@ -180,8 +180,8 @@ signon: .db "I2C Bus Scanner" |
|
|
|
|
|
|
|
|
_strout: |
|
|
_strout: |
|
|
st1: ld a,(hl) ; display |
|
|
st1: ld a,(hl) ; display |
|
|
CP '$' ; zero |
|
|
|
|
|
ret z ; terminated |
|
|
|
|
|
|
|
|
CP '$' ; zero |
|
|
|
|
|
ret z ; terminated |
|
|
ld c,a ; string |
|
|
ld c,a ; string |
|
|
call _cout |
|
|
call _cout |
|
|
inc hl |
|
|
inc hl |
|
|
@ -236,12 +236,12 @@ _cout: ; character |
|
|
#IF (PCFECB | PCFDUO) |
|
|
#IF (PCFECB | PCFDUO) |
|
|
_i2c_start: |
|
|
_i2c_start: |
|
|
PCF_START: |
|
|
PCF_START: |
|
|
LD A,PCF_START_ |
|
|
|
|
|
|
|
|
LD A,PCF_START_ |
|
|
OUT (PCF_RS1),A |
|
|
OUT (PCF_RS1),A |
|
|
RET |
|
|
RET |
|
|
#ELSE |
|
|
#ELSE |
|
|
;_i2c_start: |
|
|
;_i2c_start: |
|
|
ld a,_idle ; issue |
|
|
|
|
|
|
|
|
ld a,_idle ; issue |
|
|
out (I2C_BASE),a ; start |
|
|
out (I2C_BASE),a ; start |
|
|
; command |
|
|
; command |
|
|
res _sda,a |
|
|
res _sda,a |
|
|
@ -271,7 +271,7 @@ PCF_ACK .EQU 00000001B |
|
|
; STATUS REGISTER BITS |
|
|
; STATUS REGISTER BITS |
|
|
; |
|
|
; |
|
|
;PCF_PIN .EQU 10000000B |
|
|
;PCF_PIN .EQU 10000000B |
|
|
PCF_INI .EQU 01000000B ; 1 if not initialized |
|
|
|
|
|
|
|
|
PCF_INI .EQU 01000000B ; 1 if not initialized |
|
|
PCF_STS .EQU 00100000B |
|
|
PCF_STS .EQU 00100000B |
|
|
PCF_BER .EQU 00010000B |
|
|
PCF_BER .EQU 00010000B |
|
|
PCF_AD0 .EQU 00001000B |
|
|
PCF_AD0 .EQU 00001000B |
|
|
@ -306,12 +306,12 @@ PCF_WFA0: |
|
|
IN A,(PCF_RS1) ; READ PIN |
|
|
IN A,(PCF_RS1) ; READ PIN |
|
|
LD (PCF_STATUS),A ; STATUS |
|
|
LD (PCF_STATUS),A ; STATUS |
|
|
LD B,A |
|
|
LD B,A |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
DEC HL ; SEE IF WE HAVE TIMED |
|
|
DEC HL ; SEE IF WE HAVE TIMED |
|
|
LD A,H ; OUT WAITING FOR PIN |
|
|
LD A,H ; OUT WAITING FOR PIN |
|
|
OR L ; EXIT IF |
|
|
OR L ; EXIT IF |
|
|
JR Z,PCF_WFA1 ; WE HAVE |
|
|
JR Z,PCF_WFA1 ; WE HAVE |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
LD A,B ; OTHERWISE KEEP LOOPING |
|
|
LD A,B ; OTHERWISE KEEP LOOPING |
|
|
AND PCF_PIN ; UNTIL WE GET PIN |
|
|
AND PCF_PIN ; UNTIL WE GET PIN |
|
|
JR NZ,PCF_WFA0 ; OR TIMEOUT |
|
|
JR NZ,PCF_WFA0 ; OR TIMEOUT |
|
|
@ -346,8 +346,8 @@ PCF_WFBB0: |
|
|
LD A,H |
|
|
LD A,H |
|
|
OR L |
|
|
OR L |
|
|
JR NZ,PCF_WFBB0 ; REPEAT IF NOT TIMED OUT |
|
|
JR NZ,PCF_WFBB0 ; REPEAT IF NOT TIMED OUT |
|
|
CPL ; RET NZ IF TIMEOUT |
|
|
|
|
|
RET |
|
|
|
|
|
|
|
|
CPL ; RET NZ IF TIMEOUT |
|
|
|
|
|
RET |
|
|
; |
|
|
; |
|
|
;----------------------------------------------------------------------------- |
|
|
;----------------------------------------------------------------------------- |
|
|
; DISPLAY ERROR MESSAGES |
|
|
; DISPLAY ERROR MESSAGES |
|
|
@ -361,7 +361,7 @@ PCF_INIERR: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
LD HL,PCF_NOPCF |
|
|
LD HL,PCF_NOPCF |
|
|
JR PCF_PRTERR |
|
|
JR PCF_PRTERR |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
PCF_SETERR: |
|
|
PCF_SETERR: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
LD HL,PCF_WRTFAIL |
|
|
LD HL,PCF_WRTFAIL |
|
|
@ -371,17 +371,17 @@ PCF_REGERR: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
LD HL,PCF_REGFAIL |
|
|
LD HL,PCF_REGFAIL |
|
|
JR PCF_PRTERR |
|
|
JR PCF_PRTERR |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
PCF_CLKERR: |
|
|
PCF_CLKERR: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
LD HL,PCF_CLKFAIL |
|
|
LD HL,PCF_CLKFAIL |
|
|
JR PCF_PRTERR |
|
|
JR PCF_PRTERR |
|
|
; |
|
|
|
|
|
|
|
|
; |
|
|
PCF_IDLERR: |
|
|
PCF_IDLERR: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
LD HL,PCF_IDLFAIL |
|
|
LD HL,PCF_IDLFAIL |
|
|
JR PCF_PRTERR |
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
JR PCF_PRTERR |
|
|
|
|
|
; |
|
|
PCF_ACKERR: |
|
|
PCF_ACKERR: |
|
|
PUSH HL |
|
|
PUSH HL |
|
|
LD HL,PCF_ACKFAIL |
|
|
LD HL,PCF_ACKFAIL |
|
|
@ -415,7 +415,7 @@ PCF_BBERR: |
|
|
PCF_PRTERR: |
|
|
PCF_PRTERR: |
|
|
CALL _strout |
|
|
CALL _strout |
|
|
CALL _eolout |
|
|
CALL _eolout |
|
|
POP HL |
|
|
|
|
|
|
|
|
POP HL |
|
|
RET |
|
|
RET |
|
|
; |
|
|
; |
|
|
PCF_NOPCF .DB "NO DEVICE FOUND$" |
|
|
PCF_NOPCF .DB "NO DEVICE FOUND$" |
|
|
@ -433,15 +433,15 @@ PCF_BBFAIL .DB "BUS BUSY$" |
|
|
; |
|
|
; |
|
|
;----------------------------------------------------------------------------- |
|
|
;----------------------------------------------------------------------------- |
|
|
#IF (PCFECB | PCFDUO) |
|
|
#IF (PCFECB | PCFDUO) |
|
|
_i2c_stop: |
|
|
|
|
|
PCF_STOP: |
|
|
|
|
|
LD A,PCF_STOP_ ; issue |
|
|
|
|
|
|
|
|
_i2c_stop: |
|
|
|
|
|
PCF_STOP: |
|
|
|
|
|
LD A,PCF_STOP_ ; issue |
|
|
OUT (PCF_RS1),A ; stop |
|
|
OUT (PCF_RS1),A ; stop |
|
|
RET ; command |
|
|
RET ; command |
|
|
#ELSE |
|
|
#ELSE |
|
|
;_i2c_stop: |
|
|
|
|
|
ld a,(oprval) |
|
|
|
|
|
res _scl,a |
|
|
|
|
|
|
|
|
;_i2c_stop: |
|
|
|
|
|
ld a,(oprval) |
|
|
|
|
|
res _scl,a |
|
|
res _sda,a |
|
|
res _sda,a |
|
|
out (I2C_BASE),a |
|
|
out (I2C_BASE),a |
|
|
|
|
|
|
|
|
@ -495,7 +495,7 @@ i2c4: in a,(I2C_BASE) |
|
|
res _scl,a |
|
|
res _scl,a |
|
|
out (I2C_BASE),a |
|
|
out (I2C_BASE),a |
|
|
ld (oprval),a |
|
|
ld (oprval),a |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xor a |
|
|
xor a |
|
|
bit _sda,c |
|
|
bit _sda,c |
|
|
ret z |
|
|
ret z |
|
|
|