Initial commit
This is just the 2018 code configured for PlatformIO
This commit is contained in:
@ -0,0 +1,108 @@
|
||||
// Arduino Due - CANbus Library - Extended Frames with Ping/Pong sending
|
||||
// Ping/Pong torture test with extended frames.
|
||||
// This example sets up a receive and transmit mailbox on both canbus devices.
|
||||
// First CAN0 sends to CAN1. When CAN1 receives it sends to CAN0. PING/PONGs forever
|
||||
// and as quickly as possible - This will saturate the bus so don't have anything important connected.
|
||||
// By Thibaut Viard/Wilfredo Molina/Collin Kidder 2014
|
||||
|
||||
// Required libraries
|
||||
#include "variant.h"
|
||||
#include <due_can.h>
|
||||
|
||||
#define TEST1_CAN_TRANSFER_ID 0x11AE756A //random 29 bits
|
||||
#define TEST1_CAN0_TX_PRIO 15
|
||||
#define CAN_MSG_DUMMY_DATA 0x11BFFA4E
|
||||
|
||||
// CAN frame max data length
|
||||
#define MAX_CAN_FRAME_DATA_LEN 8
|
||||
|
||||
uint32_t sentFrames, receivedFrames;
|
||||
|
||||
//Leave this defined if you use the native port or comment it out if you use the programming port
|
||||
#define Serial SerialUSB
|
||||
|
||||
CAN_FRAME frame1, frame2, incoming;
|
||||
|
||||
void setup() {
|
||||
|
||||
// start serial port at 115200 bps:
|
||||
Serial.begin(115200);
|
||||
|
||||
// Verify CAN0 and CAN1 initialization, baudrate is 1Mb/s:
|
||||
if (Can0.begin(CAN_BPS_1000K) &&
|
||||
Can1.begin(CAN_BPS_1000K)) {
|
||||
}
|
||||
else {
|
||||
Serial.println("CAN initialization (sync) ERROR");
|
||||
}
|
||||
|
||||
//Initialize the definitions for the frames we'll be sending.
|
||||
//This can be done here because the frame never changes
|
||||
frame1.id = TEST1_CAN_TRANSFER_ID;
|
||||
frame1.length = MAX_CAN_FRAME_DATA_LEN;
|
||||
//Below we set the 8 data bytes in 32 bit (4 byte) chunks
|
||||
//Bytes can be set individually with frame1.data.bytes[which] = something
|
||||
frame1.data.low = 0x20103040;
|
||||
frame1.data.high = CAN_MSG_DUMMY_DATA;
|
||||
//We are using extended frames so mark that here. Otherwise it will just use
|
||||
//the first 11 bits of the ID set
|
||||
frame1.extended = 1;
|
||||
|
||||
frame2.id = TEST1_CAN_TRANSFER_ID + 0x200;
|
||||
frame2.length = MAX_CAN_FRAME_DATA_LEN;
|
||||
frame2.data.low = 0xB8C8A8E8;
|
||||
frame2.data.high = 0x01020304;
|
||||
frame2.extended = 1;
|
||||
|
||||
//Both of these lines create a filter on the corresponding CAN device that allows
|
||||
//just the one ID we're interested in to get through.
|
||||
//The syntax is (mailbox #, ID, mask, extended)
|
||||
//You can also leave off the mailbox number: (ID, mask, extended)
|
||||
Can1.watchFor(TEST1_CAN_TRANSFER_ID + 0x200);
|
||||
Can0.watchFor(TEST1_CAN_TRANSFER_ID);
|
||||
|
||||
test_1();
|
||||
}
|
||||
|
||||
// Test rapid fire ping/pong of extended frames
|
||||
static void test_1(void)
|
||||
{
|
||||
|
||||
CAN_FRAME inFrame;
|
||||
uint32_t counter = 0;
|
||||
|
||||
// Send out the first frame
|
||||
Can0.sendFrame(frame2);
|
||||
sentFrames++;
|
||||
|
||||
while (1==1) {
|
||||
if (Can0.available() > 0) {
|
||||
Can0.read(incoming);
|
||||
Can0.sendFrame(frame2);
|
||||
delayMicroseconds(100);
|
||||
sentFrames++;
|
||||
receivedFrames++;
|
||||
counter++;
|
||||
}
|
||||
if (Can1.available() > 0) {
|
||||
Can1.read(incoming);
|
||||
Can1.sendFrame(frame1);
|
||||
delayMicroseconds(100);
|
||||
sentFrames++;
|
||||
receivedFrames++;
|
||||
counter++;
|
||||
}
|
||||
if (counter > 5000) {
|
||||
counter = 0;
|
||||
Serial.print("S: ");
|
||||
Serial.print(sentFrames);
|
||||
Serial.print(" R: ");
|
||||
Serial.println(receivedFrames);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// can_example application entry point
|
||||
void loop()
|
||||
{
|
||||
}
|
||||
Reference in New Issue
Block a user