/************************************************************
* Test sketch for receing CANFD messages using a MCP1517FD
* Click board by Microchip with a Teensy using
* the sending sketch.
*/
#include "IMCTFD.h"
CANFD_message_t msg;
// Constructor. In my case, I'm using default pins for SPI on
// both 3.6. 39 is the interrupt pin attached
// to pin "INT" of the MCP2517FD.
//IMCTFD(port, _miso, _mosi, _sck, _cs, _int, uint32_t _mhz)
IMCTFD FD = IMCTFD(SPI, 12, 11, 14, 10, 39);
void setup() {
Serial.begin(115200);
delay(2000);
// 500kbps arbitration, 4Mbit data transfers
// returns true if successful
FD.setBaudRate(500000, 4);
// the following lines set up your FIFO configurations as either RX or
// TX. In this case I have 4 FIFOs setup, 1 TX and 3 RX. Also configuring
// for TXQ reception
FD.configureFIFO(FIFO1, FIFO_RX, PLSIZE_7, DEPTH_5, PRIORITY_3, TIMESTAMP_ON);
FD.configureFIFO(FIFO2, FIFO_TX, PLSIZE_7, DEPTH_5, PRIORITY_3, TIMESTAMP_ON);
FD.configureFIFO(FIFO3, FIFO_RX, PLSIZE_7, DEPTH_5, PRIORITY_3, TIMESTAMP_ON);
FD.configureFIFO(FIFO4, FIFO_RX, PLSIZE_7, DEPTH_5, PRIORITY_1, TIMESTAMP_ON);
//FD.configureTEF(DEPTH_3, TIMESTAMP_ON);
FD.configureTXQ(PLSIZE_7, DEPTH_3, PRIORITY_1);
FD.enableTimeStamping();
//call back test for FIFO3 Interrupt
//FD.onReceive(myCB);
FD.enableFIFOInterrupt(FIFO3);
FD.onReceive(FIFO3, myCB);
// sets filter configurations for different msg ids
FD.setFIFOFilter(FILTER_0, FIFO1, 0x7df);
FD.setFIFOFilter(FILTER_1, FIFO3, 0x8d0);
FD.setFIFOFilter(FILTER_2, FIFO1, 0x1F5002);
FD.setFIFOFilterRange(FILTER_3, FIFO4, 0x02, 0xa4); //TXQ filter
FD.begin();
FD.currentConfig();
FD.currentFilters();
delay(5000);
}
void loop(){
// Sends a message back to the other sketch as a test
msg.len = 24;
msg.fdf = 1;
for ( uint8_t i = 0; i < 24; i++ ) msg.buf[i] = i + 1;
msg.id = 0x7d9;
FD.write(msg, FIFO2);
delay(50);
if (FD.read(msg, TEF)) {
Serial.println("==========TEF TEF TEF TEF ===========");
Serial.print("from Filter_"); Serial.println(msg.filthit);
Serial.print("ID: 0x"); Serial.println(msg.id, HEX);
Serial.print("TimeStamp: "); Serial.println(msg.timestamp);
Serial.print("Len: "); Serial.println(msg.len);
Serial.print("Sequence: "); Serial.println(msg.sequence);
Serial.print("ESI: "); Serial.println(msg.flags.esi);
Serial.println();
}
if (FD.read(msg, FIFO1)) {
Serial.println("==========FIFO1 Read ===========");
Serial.println(msg.fifo);
Serial.print("from Filter_"); Serial.println(msg.filthit);
Serial.print("ID: 0x"); Serial.println(msg.id, HEX);
Serial.print("TimeStamp: "); Serial.println(msg.timestamp);
Serial.print("Packet type: "); Serial.print(msg.fdf);
Serial.print(", Len: "); Serial.println(msg.len); Serial.print("Output: ");
for ( uint8_t i = 0; i < msg.len; i++ ) {
Serial.print(msg.buf[i]); Serial.print(" ");
} Serial.println();
}
if (FD.read(msg, FIFO4)) {
Serial.println("==========FIFO4 Read ===========");
Serial.println(msg.fifo);
Serial.print("from Filter_"); Serial.println(msg.filthit);
Serial.print("ID: 0x"); Serial.println(msg.id, HEX);
Serial.print("TimeStamp: "); Serial.println(msg.timestamp);
Serial.print("Len: "); Serial.println(msg.len);
Serial.print("Output: ");
for ( uint8_t i = 0; i < msg.len; i++ ) {
Serial.print(msg.buf[i]); Serial.print(" ");
} Serial.println();
}
}
//FIFO3 interrupt call back function
void myCB(const CANFD_message_t &msg){
Serial.println("==========FIFO3 MyCB ===========");
Serial.println(msg.fifo);
Serial.print("ID: 0x"); Serial.println(msg.id, HEX);
Serial.print("TimeStamp: "); Serial.println(msg.timestamp);
Serial.print("Len: "); Serial.println(msg.len);
Serial.print("Output: ");
for ( uint8_t i = 0; i < msg.len; i++ ) {
Serial.print(msg.buf[i]); Serial.print(" ");
} Serial.println();
}