Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <errno.h>
- #include <unistd.h>
- #include <stdint.h>
- #include <time.h>
- #include <sys/stat.h>
- #include <sys/ioctl.h>
- #include <linux/spi/spidev.h>
- void cs_change_command()
- {
- struct spi_ioc_transfer tr;
- static int fd = -1;
- uint8_t rx_buffer[128];
- uint8_t tx_buffer[128];
- printf("%s() start\n", __func__);
- if (fd < 0) {
- uint8_t bits = 0;
- uint8_t mode = SPI_MODE_3;
- fd = open("/dev/spidev1.3", O_RDWR);
- if (fd < 0) {
- printf("Failed to open spidev1.3\n");
- return;
- }
- if(ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits) < 0)
- printf("spidev1.3 ioctl0 failed (%m)\n");
- if(ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits) < 0)
- printf("spidev1.3 ioctl1 failed (%m)\n");
- if(ioctl(fd, SPI_IOC_WR_MODE, &mode) < 0)
- printf("spidev1.3 ioctl2 failed (%m)\n");
- }
- memset(&tr, 0, sizeof (tr));
- memset(rx_buffer, 0, 128);
- memset(tx_buffer, 0, 128);
- tx_buffer[0] = 0xA5;
- tx_buffer[1] = 0x10;
- tx_buffer[2] = 0xF0;
- tx_buffer[3] = 0x00;
- tr.tx_buf = (unsigned long)tx_buffer;
- tr.rx_buf = (unsigned long)rx_buffer;
- tr.len = 128;
- tr.speed_hz = 10000000;
- tr.delay_usecs = 1;
- tr.cs_change = 1;
- tr.bits_per_word = 8;
- if (ioctl(fd, SPI_IOC_MESSAGE(1), &tr) < 0)
- printf("spidev1.3 ioctl failed (%m)\n");
- else
- printf("spidev1.3 ioctl success\n");
- }
- void no_dma_command()
- {
- struct spi_ioc_transfer tr;
- static int fd = -1;
- uint8_t rx_buffer[3];
- uint8_t tx_buffer[3];
- printf("%s() start\n", __func__);
- if (fd < 0) {
- uint8_t bits = 0;
- uint8_t mode = SPI_MODE_3;
- fd = open("/dev/spidev1.1", O_RDWR);
- if (fd < 0) {
- printf("Failed to open spidev1.1\n");
- return;
- }
- if(ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits) < 0)
- printf("spidev1.1 ioctl0 failed (%m)\n");
- if(ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits) < 0)
- printf("spidev1.1 ioctl1 failed (%m)\n");
- if(ioctl(fd, SPI_IOC_WR_MODE, &mode) < 0)
- printf("spidev1.1 ioctl2 failed (%m)\n");
- }
- memset(&tr, 0, sizeof (tr));
- memset(rx_buffer, 0, 3);
- memset(tx_buffer, 0, 3);
- tx_buffer[0] = 0xA5;
- tr.tx_buf = (unsigned long)tx_buffer;
- tr.rx_buf = (unsigned long)rx_buffer;
- tr.len = 3;
- tr.speed_hz = 10000000;
- tr.delay_usecs = 1;
- tr.cs_change = 1;
- tr.bits_per_word = 8;
- if (ioctl(fd, SPI_IOC_MESSAGE(1), &tr) < 0)
- printf("spidev1.1 ioctl failed (%m)\n");
- else
- printf("spidev1.1 ioctl success\n");
- }
- int main()
- {
- while (1) {
- cs_change_command();
- no_dma_command();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement