Created
March 10, 2019 22:45
-
-
Save amcjen/a03e619eb32c9e840b7f1267d943f713 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ------------------------------------------------------------- | |
// 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