Skip to content

Instantly share code, notes, and snippets.

@rechargecar
Created November 30, 2012 19:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rechargecar/4177995 to your computer and use it in GitHub Desktop.
Save rechargecar/4177995 to your computer and use it in GitHub Desktop.
MCP2515 basic reading (and writing)
byte i=0;
// CAN message frame (actually just the parts that are exposed by the MCP2515 RX/TX buffers)
Frame message;
void loop() {
message.id = 0;
// This implementation utilizes the MCP2515 INT pin to flag received messages or other events
if(CAN.Interrupt()) {
// determine which interrupt flags have been set
byte interruptFlags = CAN.Read(CANINTF);
if(interruptFlags & RX0IF) {
// read from RX buffer 0
message = CAN.ReadBuffer(RXB0);
}
if(interruptFlags & RX1IF) {
// read from RX buffer 1
message = CAN.ReadBuffer(RXB1);
// (this is poor code as clearly if two messages are received then the second will overwrite the first)
}
if(interruptFlags & TX0IF) {
// TX buffer 0 sent
}
if(interruptFlags & TX1IF) {
// TX buffer 1 sent
}
if(interruptFlags & TX2IF) {
// TX buffer 2 sent
}
if(interruptFlags & ERRIF) {
// error handling code
}
if(interruptFlags & MERRF) {
// error handling code
// if TXBnCTRL.TXERR set then transmission error
// if message is lost TXBnCTRL.MLOA will be set
}
}
if(message.id>0) {
// Print message
Serial.print("ID: ");
Serial.println(message.id,HEX);
Serial.print("Extended: ");
if(message.ide) {
Serial.println("Yes");
} else {
Serial.println("No");
}
Serial.print("DLC: ");
Serial.println(message.dlc,DEC);
for(i=0;i<message.dlc;i++) {
Serial.print(message.data[i],HEX);
Serial.print(" ");
}
Serial.println();
Serial.println();
// Send out a return message for each one received
// Simply increment message id and data bytes to show proper transmission
// Note: Please see explanation at top of sketch. You might want to comment this out!
// message.id++;
// for(i=0;i<message.dlc;i++) {
// message.data[i]++;
// }
// CAN.LoadBuffer(TXB0, message);
// CAN.SendBuffer(TXB0);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment