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