Microchip Technology AC160214 Data Sheet

Page of 478
 2010-2012 Microchip Technology Inc.
DS41414D-page 283
PIC16(L)F1946/47
FIGURE 24-31:
STOP CONDITION RECEIVE OR TRANSMIT MODE       
24.6.10
SLEEP OPERATION
While in Sleep mode, the I
2
C Slave module can receive
addresses or data and when an address match or
complete byte transfer occurs, wake the processor
from Sleep (if the MSSPx interrupt is enabled).
24.6.11
EFFECTS OF A RESET
A Reset disables the MSSPx module and terminates
the current transfer.
24.6.12
MULTI-MASTER MODE
In Multi-Master mode, the interrupt generation on the
detection of the Start and Stop conditions allows the
determination of when the bus is free. The Stop (P) and
Start (S) bits are cleared from a Reset or when the
MSSPx module is disabled. Control of the I
2
C bus may
be taken when the P bit of the SSPxSTAT register is
set, or the bus is Idle, with both the S and P bits clear.
When the bus is busy, enabling the SSPx interrupt will
generate the interrupt when the Stop condition occurs.
In multi-master operation, the SDAx line must be
monitored for arbitration to see if the signal level is the
expected output level. This check is performed by
hardware with the result placed in the BCLxIF bit.
The states where arbitration can be lost are:
• Address Transfer 
• Data Transfer
• A Start Condition 
• A Repeated Start Condition
• An Acknowledge Condition
24.6.13
MULTI -MASTER COMMUNICATION, 
BUS COLLISION AND BUS 
ARBITRATION
Multi-Master mode support is achieved by bus arbitra-
tion. When the master outputs address/data bits onto
the SDAx pin, arbitration takes place when the master
outputs a ‘1’ on SDAx, by letting SDAx float high and
another master asserts a ‘0’. When the SCLx pin floats
high, data should be stable. If the expected data on
SDAx is a ‘1’ and the data sampled on the SDAx pin is
‘0’, then a bus collision has taken place. The master will
set the Bus Collision Interrupt Flag, BCLxIF, and reset
the I
2
C port to its Idle state (
If a transmit was in progress when the bus collision
occurred, the transmission is halted, the BF flag is
cleared, the SDAx and SCLx lines are deasserted and
the SSPxBUF can be written to. When the user ser-
vices the bus collision Interrupt Service Routine and if
the I
2
C bus is free, the user can resume communica-
tion by asserting a Start condition. 
If a Start, Repeated Start, Stop or Acknowledge condi-
tion was in progress when the bus collision occurred, the
condition is aborted, the SDAx and SCLx lines are deas-
serted and the respective control bits in the SSPxCON2
register are cleared. When the user services the bus col-
lision Interrupt Service Routine and if the I
2
C bus is free,
the user can resume communication by asserting a Start
condition.
The master will continue to monitor the SDAx and SCLx
pins. If a Stop condition occurs, the SSPxIF bit will be set.
A write to the SSPxBUF will start the transmission of
data at the first data bit, regardless of where the
transmitter left off when the bus collision occurred.
In Multi-Master mode, the interrupt generation on the
detection of Start and Stop conditions allows the deter-
mination of when the bus is free. Control of the I
2
C bus
can be taken when the P bit is set in the SSPxSTAT
register, or the bus is Idle and the S and P bits are
cleared.
SCLx
SDAx
SDAx asserted low before rising edge of clock
Write to SSPxCON2,
set PEN
Falling edge of
SCLx = 1 for T
BRG
, followed by SDAx = 1 for T
BRG
9th clock
SCLx brought high after T
BRG
Note: T
BRG
 = one Baud Rate Generator period.
T
BRG
T
BRG
after SDAx sampled high. P bit (SSPxSTAT<4>) is set. 
T
BRG
to setup Stop condition
ACK
P
T
BRG
PEN bit (SSPxCON2<2>) is cleared by
   hardware and the SSPxIF bit is set