PIC17C75X
FIGURE 15-28: MASTER TRANSMIT FLOWCHART
Idle Mode
Write SSPBUF
Num_Clocks = 0,
BF = 1
Force SCL = 0
Yes
Release SDA so
slave can drive ACK
Num_Clocks
= 8?
No
Load BRG with
SSPADD<6:0>,
start BRG count
Load BRG with
SSPADD<6:0>,
start BRG count,
SDA = Current Data bit
No
BRG
rollover?
BRG
No
rollover?
Yes
Yes
Force SCL = 1,
Stop BRG
Stop BRG,
Force SCL = 1
(Clock Arbitration)
No
(Clock Arbitration)
SCL = 1?
Yes
No
SCL = 1?
Yes
Load BRG with
SSPADD<6:0>,
count high time
Bus collision detected
No
SDA =
Data bit?
Set BCLIF, hold prescale off
Clear XMIT enable
Yes
No
Rollover?
Yes
Load BRG with
SSPADD<6:0>,
count SCL high time
Yes
Read SDA and place into
AKSTAT bit (SSPCON2<6>)
No
No
No
SDA =
Data bit?
BRG
rollover?
SCL = 0?
Force SCL = 0,
BF = 0,
Yes
Set SSPIF
Yes
Reset BRG
Num_Clocks
= Num_Clocks + 1
DS30264A-page 150
Preliminary
1997 Microchip Technology Inc.