我正在使用TFT LCD屏幕( ILI9163c - 160 * 128)。它与spi连接 athros AR9331 模块。 Athros AR9331正在运行 OpenWRT linux发行版。所以,我用 spidev0.1 驱动我的液晶显示器。在LCD上填充屏幕或写入任何字符串时,打印时间过长。那么,我该怎么做才能获得足够的打印速度。
感谢。
这是我使用spidev在spi引脚上写数据的功能...
void spi_transactor(unsigned char *write_data, int mode,int size)
{
int ret;
struct spi_ioc_transfer xfer[4];
unsigned char *init_reg;
init_reg = (unsigned char*) malloc(size);
memcpy(init_reg,write_data,size);
if (mode)
{
gpio_set_value(_rs, 1); // DATA
}
else
{
gpio_set_value(_rs, 0); // COMMAND
}
memset(xfer, 0, sizeof xfer);
xfer[0].bits_per_word = 8;
xfer[0].tx_buf = (unsigned long)init_reg;
xfer[0].rx_buf = 0; //( unsigned long ) &buf_rx[0];
xfer[0].len = size; //wlength + rlength;
xfer[0].delay_usecs = 0;
xfer[0].speed_hz = speedx; // 8MHZ
//xfer[0].speed_hz = 160000000; // 40MHZ
ret = ioctl(spi_fd, SPI_IOC_MESSAGE(1), &xfer);
gpio_set_value(_rs, 1);
}
答案 0 :(得分:-1)
这里的主要性能问题是,每次调用函数时,都要在堆上制作要发送的数据的硬拷贝。您还可以每次从头开始设置通信参数,即使它们始终相同。更糟糕的是,该函数存在一个巨大的错误:它会泄漏内存,好像没有明天一样。
硬拷贝并非真正必要除非 SPI通信花费太多时间让程序静坐 - 等待它完成(很可能)。在这种情况下你可以做的是: