Data Sheet
Table Of Contents
- 1.0 Device Overview
- 2.0 Can Message Frames
- 3.0 Message Transmission
- 4.0 Message Reception
- 5.0 Bit Timing
- 6.0 Error Detection
- 7.0 Interrupts
- 8.0 Oscillator
- 9.0 RESET
- 10.0 Modes of Operation
- 11.0 Register Map
- 12.0 SPI™ Interface
- 12.1 Overview
- 12.2 Reset Instruction
- 12.3 Read Instruction
- 12.4 Read RX Buffer Instruction
- 12.5 Write Instruction
- 12.6 Load TX Buffer Instruction
- 12.7 Request-To-Send (RTS) Instruction
- 12.8 Read Status Instruction
- 12.9 RX Status Instruction
- 12.10 Bit Modify Instruction
- Figure 12-1: Bit Modify
- Table 12-1: SPI™ Instruction Set
- Figure 12-2: Read instruction
- Figure 12-3: Read RX Buffer Instruction
- Figure 12-4: Byte Write instruction
- Figure 12-5: Load TX Buffer
- Figure 12-6: Request-to-send (RTS) instruction
- Figure 12-7: BIT Modify instruction
- Figure 12-8: Read Status instruction
- Figure 12-9: RX StatUs Instruction
- Figure 12-10: SPI™ Input Timing
- Figure 12-11: SPI™ Output TIming
- 13.0 Electrical Characteristics
- 14.0 PackAging Information

MCP2515
DS21801D-page 26 Preliminary © 2005 Microchip Technology Inc.
FIGURE 4-3: RECEIVE FLOW FLOWCHART
Set RXBF0
Start
Detect
Start of
Message?
Valid
Message
Received?
Generate
Error
Meets
a filter criteria
Is
CANINTF.RX0IF =
0?
Go to Start
Move message into RXB0
Set RXB0CTRL.FILHIT <2:0>
Is
CANINTF.RX1IF =
0?
Move message into RXB1
Set CANINTF.RX1IF = 1
Yes
No
Generate
Interrupt on INT
Yes
Yes
No
No
Yes
Yes
No
No
Yes
Yes
Frame
No
Yes
No
Begin Loading Message into
Message Assembly Buffer (MAB)
according to which filter criteria
was met
Set RXB0CTRL.FILHIT <0>
according to which filter criteria
Set CANSTAT <3:0> accord-
ing to which receive buffer
the message was loaded into
Is
RXB0CTRL.BUKT =
1?
Generate Overflow Error:
Set EFLG.RX1OVR
Is
CANINTE.ERRIE =
1?
No
Go to Start
Yes
No
Are
BFPCTRL.B0BFM =
1
BF1CTRL.B0BFE = 1?
and
Pin = 0
No
Set RXBF1
Pin = 0
No
Yes
Yes
CANINTE.RX0IE = 1?
CANINTE.RX1IE =
1?
RXB1
RXB0
Set EFLG.RX0OVR
Generate Overflow Error:
Set CANINTF.RX0IF =
1
Are
BFPCTRL.B1BFM =
1
BF1CTRL.B1BFE = 1?
and
Meets
a filter criteria
for RXB1?
for RXB0?
No
Yes
Generate
Interrupt on INT
Determines if the receive
register is empty and able
to accept a new message
Determines if RXB0 can roll
over into RXB1, if it is full.