Skip to content

Instantly share code, notes, and snippets.

@amcjen
Created March 10, 2019 22:45
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 amcjen/a03e619eb32c9e840b7f1267d943f713 to your computer and use it in GitHub Desktop.
Save amcjen/a03e619eb32c9e840b7f1267d943f713 to your computer and use it in GitHub Desktop.
// -------------------------------------------------------------
// CANtest for Teensy 3.6 dual CAN bus
// by Collin Kidder, Based on CANTest by Pawelsky (based on CANtest by teachop)
//
// Both buses are left at default 250k speed and the second bus sends frames to the first
// to do this properly you should have the two buses linked together. This sketch
// also assumes that you need to set enable pins active. Comment out if not using
// enable pins or set them to your correct pins.
//
// This sketch tests both buses as well as interrupt driven Rx and Tx. There are only
// two Tx buffers by default so sending 5 at a time forces the interrupt driven system
// to buffer the final three and send them via interrupts. All the while all Rx frames
// are internally saved to a software buffer by the interrupt handler.
//
#include <FlexCAN.h>
#ifndef __MK66FX1M0__
#error "Teensy 3.6 with dual CAN bus is required to run this example"
#endif
static CAN_message_t msg;
static uint8_t hex[17] = "0123456789abcdef";
static CAN_filter_t mask;
uint32_t inCnt=0, outCnt=0;
// -------------------------------------------------------------
static void hexDump(uint8_t dumpLen, uint8_t *bytePtr)
{
uint8_t working;
while( dumpLen-- ) {
working = *bytePtr++;
Serial.write( hex[ working>>4 ] );
Serial.write( hex[ working&15 ] );
}
Serial.write('\r');
Serial.write('\n');
}
// -------------------------------------------------------------
void setup(void)
{
Serial.begin(2000000);
delay(1000);
Serial.println(F("Hello Teensy 3.6 dual CAN Test."));
mask.rtr = 0;
mask.ext = 0;
mask.id = 0;
Can0.begin(1000000, mask, 3, 4);
Can1.begin(1000000, mask, 33, 34);
msg.ext = 0;
msg.id = 0x100;
msg.len = 8;
msg.buf[0] = 10;
msg.buf[1] = 20;
msg.buf[2] = 0;
msg.buf[3] = 100;
msg.buf[4] = 128;
msg.buf[5] = 64;
msg.buf[6] = 32;
msg.buf[7] = 16;
}
// -------------------------------------------------------------
void loop(void)
{
CAN_message_t inMsg;
while (Can1.available())
{
Can1.read(inMsg);
inCnt++;
//Serial.print("CAN bus 0: "); hexDump(8, inMsg.buf);
Serial.print("Out: ");
Serial.print(outCnt);
Serial.print(" : In: ");
Serial.println(inCnt);
}
msg.buf[0]++;
Can0.write(msg);
outCnt++;
msg.buf[0]++;
Can0.write(msg);
outCnt++;
msg.buf[0]++;
Can0.write(msg);
outCnt++;
msg.buf[0]++;
Can0.write(msg);
outCnt++;
msg.buf[0]++;
Can0.write(msg);
outCnt++;
delayMicroseconds(600);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment