spi_loopback.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /* @brief This is a simple application for testing SPI 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.h"
  13. int main(int argc, char *argv[]){
  14. char *buffer = "TEST string";
  15. char rx_buf[255];
  16. memset(rx_buf,0,255);
  17. int res = rp_SPI_InitDevice("/dev/spidev1.0"); // Init spi api.
  18. printf("Init result: %d\n",res);
  19. res = rp_SPI_SetDefaultSettings(); // Set default settings.
  20. printf("Set default settings: %d\n",res);
  21. res = rp_SPI_GetSettings(); // Get uart speed.
  22. printf("Get current settings of spi: %d\n",res);
  23. rp_spi_mode_t mode;
  24. res = rp_SPI_GetMode(&mode);
  25. printf("Get mode: %d ret: %d\n",mode,res);
  26. res = rp_SPI_SetMode(RP_SPI_MODE_LIST); // Set SPI mode: Low idle level, sample on trailing edge.
  27. printf("Set mode: %d\n",res);
  28. rp_spi_cs_mode_t cs_mode;
  29. res = rp_SPI_GetCSMode(&cs_mode);
  30. printf("Get CS mode: %d ret: %d\n",cs_mode,res);
  31. int speed;
  32. res = rp_SPI_GetSpeed(&speed);
  33. printf("Get speed: %d ret: %d\n",speed,res);
  34. res = rp_SPI_SetSpeed(50000000); // Set SPI speed.
  35. printf("Set speed: %d\n",res);
  36. res = rp_SPI_SetWordLen(8); // Set word bit size.
  37. printf("Set word length: %d\n",res);
  38. res = rp_SPI_SetSettings(); // Apply settings to SPI.
  39. printf("Set settings: %d\n",res);
  40. res = rp_SPI_CreateMessage(2); // Create 2 message.
  41. printf("Set settings: %d\n",res);
  42. res = rp_SPI_SetBufferForMessage(0,(uint8_t*)buffer,true,strlen(buffer),false); // Set buffer for first message and create RX buffer.
  43. printf("Set buffers for first msg: %d\n",res);
  44. res = rp_SPI_SetBufferForMessage(1,0,true,100,false); // Create RX buffer.
  45. printf("Set buffers for second msg: %d\n",res);
  46. res = rp_SPI_ReadWrite(); // Pass message to SPI.
  47. printf("Read/Write to spi: %d\n",res);
  48. const uint8_t *rx_buffer = 0;
  49. size_t rx_size = 0;
  50. res = rp_SPI_GetRxBuffer(0,&rx_buffer,&rx_size); // Get pointer to rx buffer. No need free buffer. Api itself destroy buffer.
  51. if (rx_buffer)
  52. printf("Read message: %s (res %d)\n",rx_buffer,res);
  53. res = rp_SPI_DestoryMessage();
  54. res = rp_SPI_Release(); // Close spi api.
  55. printf("UnInit result: %d\n",res);
  56. return 0;
  57. }