can_pass.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /* @brief This is a simple application for testing CAN communication on a RedPitaya
  2. *
  3. * (c) Red Pitaya http://www.redpitaya.com
  4. *
  5. * This part of code is written in C programming language.
  6. * Please visit http://en.wikipedia.org/wiki/C_(programming_language)
  7. * for more details on the language used herein.
  8. */
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include "rp_hw_can.h"
  13. int main(int argc, char *argv[]){
  14. int res = rp_CanSetFPGAEnable(true); // init can in fpga for pass can controller to GPIO (N7,P7)
  15. printf("Init result: %d\n",res);
  16. res = rp_CanStop(RP_CAN_0); // set can0 interface to DOWN for configure
  17. printf("Stop can0: %d\n",res);
  18. res = rp_CanSetBitrate(RP_CAN_0,200000); // set can0 bitrate
  19. printf("Set bitrate: %d\n",res);
  20. res = rp_CanSetControllerMode(RP_CAN_0,RP_CAN_MODE_LOOPBACK,false); // set loopback mode
  21. printf("Set loopback mode OFF: %d\n",res);
  22. res = rp_CanStop(RP_CAN_1); // set can1 interface to DOWN for configure
  23. printf("Stop can1: %d\n",res);
  24. res = rp_CanSetBitrate(RP_CAN_1,200000); // set can1 bitrate
  25. printf("Set bitrate: %d\n",res);
  26. res = rp_CanSetControllerMode(RP_CAN_1,RP_CAN_MODE_LOOPBACK,false); // set loopback mode
  27. printf("Set loopback mode OFF: %d\n",res);
  28. res = rp_CanStart(RP_CAN_0); // set can0 interface to UP
  29. printf("Start can0: %d\n",res);
  30. res = rp_CanOpen(RP_CAN_0); // open socket for can0
  31. printf("Open socket: %d\n",res);
  32. res = rp_CanStart(RP_CAN_1); // set can1 interface to UP
  33. printf("Start can1: %d\n",res);
  34. res = rp_CanOpen(RP_CAN_1); // open socket for can1
  35. printf("Open socket: %d\n",res);
  36. unsigned char tx_buffer[8];
  37. tx_buffer[0] = 1;
  38. tx_buffer[1] = 2;
  39. tx_buffer[2] = 3;
  40. tx_buffer[3] = 4;
  41. tx_buffer[4] = 5;
  42. res = rp_CanSend(RP_CAN_0,123, tx_buffer,3,false,false,0); // write buffer to can0
  43. printf("Write result: %d\n",res);
  44. res = rp_CanSend(RP_CAN_0,321, tx_buffer,5,true,false,0); // write buffer to can0
  45. printf("Write result: %d\n",res);
  46. rp_can_frame_t frame;
  47. res = rp_CanRead(RP_CAN_1,2000, &frame); // read frame from can1
  48. printf("Read result: %d\n",res);
  49. printf("Can ID: %d data: %d,%d,%d\n",frame.can_id,frame.data[0],frame.data[1],frame.data[2]);
  50. res = rp_CanRead(RP_CAN_1,0, &frame); // read frame from can1 without timeout
  51. printf("Read result: %d\n",res);
  52. printf("Can ID: %d data: %d,%d,%d,%d,%d\n",frame.can_id,frame.data[0],frame.data[1],frame.data[2],frame.data[3],frame.data[4]);
  53. res = rp_CanClose(RP_CAN_0); // close socket for can0
  54. printf("Close can0 result: %d\n",res);
  55. res = rp_CanClose(RP_CAN_1); // close socket for can1
  56. printf("Close can1 result: %d\n",res);
  57. return 0;
  58. }