Datasheet

2010 Microchip Technology Inc. Preliminary DS39974A-page 339
PIC18F47J13 FAMILY
20.5.14 SLEEP OPERATION
While in Sleep mode, the I
2
C module can receive
addresses or data and when an address match or
complete byte transfer occurs, wake the processor
from Sleep (if the MSSP interrupt is enabled).
20.5.15 EFFECTS OF A RESET
A Reset disables the MSSP module and terminates the
current transfer.
20.5.16 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 Start and
Stop bits are cleared from a Reset or when the MSSP
module is disabled. Control of the I
2
C bus may be taken
when the P bit (SSPxSTAT<4>) is set, or the bus is Idle,
with both the Start and Stop bits clear. When the bus is
busy, enabling the MSSP 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 in
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
20.5.17 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 out-
puts 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 = 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 (Figure 20-27).
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 services
the bus collision Interrupt Service Routine, and if the I
2
C
bus is free, the user can resume communication by
asserting a Start condition.
If a Start, Repeated Start, Stop or Acknowledge condition
was in progress when the bus collision occurred, the con-
dition is aborted, the SDAx and SCLx lines are
deasserted, and the respective control bits in the
SSPxCON2 register are cleared. When the user services
the bus collision Interrupt Service Routine (ISR), 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 Stop bit is set in the SSPxSTAT
register, or the bus is Idle and the Start and Stop bits
are cleared.
FIGURE 20-27: BUS COLLISION TIMING FOR TRANSMIT AND ACKNOWLEDGE
SDAx
SCLx
BCLxIF
SDAx Released
SDAx Line Pulled Low
by Another Source
Sample SDAx. While SCLx is High,
Data doesn’t Match what is Driven
Bus Collision has Occurred
Set Bus Collision
Interrupt (BCLxIF)
by the Master;
by Master
Data Changes
while SCLx = 0