Advertisement
Guest User

Untitled

a guest
Oct 9th, 2015
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. #include <fcntl.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <unistd.h>
  7. #include <stdint.h>
  8. #include <time.h>
  9. #include <sys/stat.h>
  10. #include <sys/ioctl.h>
  11. #include <linux/spi/spidev.h>
  12.  
  13. void cs_change_command()
  14. {
  15. struct spi_ioc_transfer tr;
  16. static int fd = -1;
  17. uint8_t rx_buffer[128];
  18. uint8_t tx_buffer[128];
  19.  
  20. printf("%s() start\n", __func__);
  21.  
  22. if (fd < 0) {
  23. uint8_t bits = 0;
  24. uint8_t mode = SPI_MODE_3;
  25.  
  26. fd = open("/dev/spidev1.3", O_RDWR);
  27. if (fd < 0) {
  28. printf("Failed to open spidev1.3\n");
  29. return;
  30. }
  31.  
  32. if(ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits) < 0)
  33. printf("spidev1.3 ioctl0 failed (%m)\n");
  34. if(ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits) < 0)
  35. printf("spidev1.3 ioctl1 failed (%m)\n");
  36. if(ioctl(fd, SPI_IOC_WR_MODE, &mode) < 0)
  37. printf("spidev1.3 ioctl2 failed (%m)\n");
  38. }
  39.  
  40. memset(&tr, 0, sizeof (tr));
  41.  
  42. memset(rx_buffer, 0, 128);
  43. memset(tx_buffer, 0, 128);
  44. tx_buffer[0] = 0xA5;
  45. tx_buffer[1] = 0x10;
  46. tx_buffer[2] = 0xF0;
  47. tx_buffer[3] = 0x00;
  48.  
  49. tr.tx_buf = (unsigned long)tx_buffer;
  50. tr.rx_buf = (unsigned long)rx_buffer;
  51. tr.len = 128;
  52. tr.speed_hz = 10000000;
  53. tr.delay_usecs = 1;
  54. tr.cs_change = 1;
  55. tr.bits_per_word = 8;
  56.  
  57. if (ioctl(fd, SPI_IOC_MESSAGE(1), &tr) < 0)
  58. printf("spidev1.3 ioctl failed (%m)\n");
  59. else
  60. printf("spidev1.3 ioctl success\n");
  61. }
  62.  
  63. void no_dma_command()
  64. {
  65. struct spi_ioc_transfer tr;
  66. static int fd = -1;
  67. uint8_t rx_buffer[3];
  68. uint8_t tx_buffer[3];
  69.  
  70. printf("%s() start\n", __func__);
  71.  
  72. if (fd < 0) {
  73. uint8_t bits = 0;
  74. uint8_t mode = SPI_MODE_3;
  75.  
  76. fd = open("/dev/spidev1.1", O_RDWR);
  77. if (fd < 0) {
  78. printf("Failed to open spidev1.1\n");
  79. return;
  80. }
  81.  
  82. if(ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits) < 0)
  83. printf("spidev1.1 ioctl0 failed (%m)\n");
  84. if(ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits) < 0)
  85. printf("spidev1.1 ioctl1 failed (%m)\n");
  86. if(ioctl(fd, SPI_IOC_WR_MODE, &mode) < 0)
  87. printf("spidev1.1 ioctl2 failed (%m)\n");
  88. }
  89.  
  90. memset(&tr, 0, sizeof (tr));
  91.  
  92. memset(rx_buffer, 0, 3);
  93. memset(tx_buffer, 0, 3);
  94. tx_buffer[0] = 0xA5;
  95.  
  96. tr.tx_buf = (unsigned long)tx_buffer;
  97. tr.rx_buf = (unsigned long)rx_buffer;
  98. tr.len = 3;
  99. tr.speed_hz = 10000000;
  100. tr.delay_usecs = 1;
  101. tr.cs_change = 1;
  102. tr.bits_per_word = 8;
  103.  
  104. if (ioctl(fd, SPI_IOC_MESSAGE(1), &tr) < 0)
  105. printf("spidev1.1 ioctl failed (%m)\n");
  106. else
  107. printf("spidev1.1 ioctl success\n");
  108. }
  109.  
  110. int main()
  111. {
  112. while (1) {
  113. cs_change_command();
  114. no_dma_command();
  115. }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement