【发布时间】:2016-11-05 05:40:12
【问题描述】:
我正在尝试通过 SPI 总线使用 max7219 8x8 LED 矩阵。
我在 Galileo 板上完成了以下 GPIO 设置。
数字引脚功能 Linux 电平转换器 Mux 引脚
L: dir_out H: dir_in
IO11 SPI MOSI spidev1.0 gpio24 gpio44(H)
gpio72(L)
IO12 gpio 用于
从机选择 gpio15 gpio42 -
IO13 SPI SCK spidev1.0 gpio30 gpio46(H)
我将上面的gpio设置如下 - 根据需要设置多路复用器引脚。 - 导出 gpio24、gpio 42、gpio30、gpio15 并将方向字段设置为“OUT”,将值字段设置为“0”, -将gpio15(从选择值)设置为“0”。
我正在使用以下代码访问 LED 矩阵并设置模式:
int fd;
uint8_t array1[2];
uint8_t array [] = {
0x0F, 0x00,
0x0C, 0x01,
0x09, 0x00,
0x0A, 0x01,
0x0B, 0x07,
0x01, 0x06,
0x02, 0x06, };
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
static uint8_t mode;
static uint8_t bits = 8;
static uint32_t speed = 50000;
static uint16_t delay;
fd= open(DEVICE,O_RDWR);
struct spi_ioc_transfer tr =
{
.tx_buf = (unsigned long)array1,
.rx_buf = 0,
.len = ARRAY_SIZE(array1),
.speed_hz = speed,
.bits_per_word = bits,
.cs_change = 1,
};
array1[0] = array [i];
array1[1] = array [i+1];
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
if(ret<0)
{
printf("ioctl Failed\n");
}
usleep(500000);
close (fd);
【问题讨论】:
-
我在 LED 8x8 显示屏上看不到任何变化。即使设置了max7219显示器的控制寄存器
-
变量
i在哪里声明和初始化赋值array1[0] = array [i];? -
@J.Piquard 我已经在同一个函数中声明了它,只是在这里没有包含它。我将其初始化为 0。
标签: c linux-device-driver embedded-linux spi intel-galileo