#include <FlexCAN_T4.h>
FlexCAN_T4<CAN3, RX_SIZE_256, TX_SIZE_16> Can1;
// FCTP_OPT::*ptr->begin();
//FlexCAN_T4Base* tonton = Can0;
void setup(void) {
//tony->begin();
// Serial2.begin(115200);
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
delay(2000);
digitalWriteFast(LED_BUILTIN, !digitalReadFast(LED_BUILTIN) );
delay(2000);
Serial.println( " Hello World" );
Serial.println("\n" __FILE__ " " __DATE__ " " __TIME__);
pinMode(6, OUTPUT);
digitalWrite(6, LOW);
Can1.begin();
Can1.setBaudRate(1000000);
Can1.setMaxMB(64);
Can1.enableFIFO(1); Can1.enableFIFOInterrupt();
Can1.setFIFOFilterTable(A);
Serial.println( " Hello World 1" );
Can1.onReceive(MB0, canSniff);
Can1.onReceive(MB1, canSniff);
Can1.enableMBInterrupt(MB0, 1);
Serial.println( " Hello World 2" );
Can1.setRFFN(13);
Can1.setFIFOFilter(REJECT_ALL);
for ( uint8_t i = 34; i < 64; i++ ) {
Can1.setMB((FLEXCAN_MAILBOX)i, RX, INACTIVE);
}
Serial.println( " Hello World 3" );
Can1.setMB(MB38, TX, STD);
Serial.println( " Hello World 3a" );
Can1.setMB(MB60, RX, STD);
Serial.println( " Hello World 3b" );
Can1.setMBFilter(MB60, 0x05);
Serial.println( " Hello World 3c" );
Can1.enableMBInterrupt(MB60, 1);
Serial.println( " Hello World 3d" );
Can1.onReceive(MB60, canSniff);
Serial.println( " Hello World 3e" );
delay(100);
digitalWriteFast(LED_BUILTIN, HIGH );
Can1.mailboxStatus();
delay(100);
digitalWriteFast(LED_BUILTIN, LOW );
Serial.println( " Hello World 4" );
Can1.setFIFOFilter(3, 8, STD);
Can1.setFIFOFilter(7, 290000, EXT);
Can1.setFIFOFilter(22, 13, STD);
Can1.setFIFOFilter(27, 5, STD);
Can1.setClock(CLK_60MHz);
Serial.println( " Hello World 5" );
}
void loop() {
Can1.events();
static uint32_t sending = millis();
if ( millis() - sending > 1000 ) {
digitalWriteFast(LED_BUILTIN, !digitalReadFast(LED_BUILTIN) );
sending = millis();
CAN_message_t msg;
msg.id = 0x55;
msg.len = 8;
msg.seq = 0;
for ( uint8_t i = 0; i < 8; i++ ) msg.buf[i] = 0xFF;
for ( uint8_t i = 19; i < 32; i++ ) Can1.write(msg);
msg.id = 5;
uint8_t val = random(0, 6);
delay(1);
for ( uint8_t i = 0; i < 8; i++ ) msg.buf[i] = val + i + 1;
Can1.write( msg);
// delay(100);
msg.flags.remote = 0;
msg.len = 8;
msg.seq = 1;
CAN_message_t msg2 = msg;
val = random(7, 19);
msg2.len = 8;
for ( uint8_t i = 0; i < 8; i++ ) msg2.buf[i] = val + i + 2;
Can1.write( msg2);
}
}
void canSniff(const CAN_message_t &msg) { // global callback
if ( !msg.id ) return;
Serial.print("MB "); Serial.print(msg.mb);
Serial.print(" BUS "); Serial.print(msg.bus);
Serial.print(" LEN: "); Serial.print(msg.len);
Serial.print(" EXT: "); Serial.print(msg.flags.extended);
Serial.print(" REMOTE: "); Serial.print(msg.flags.remote);
Serial.print(" TS: "); Serial.print(msg.timestamp);
Serial.print(" ID: "); Serial.print(msg.id);
Serial.print(" Buffer: ");
for ( uint8_t i = 0; i < msg.len; i++ ) {
Serial.print(msg.buf[i], HEX); Serial.print(" ");
} Serial.println();
}