我正在编写一个测试程序,通过 IDF SPI Master 驱动程序从 ADC 读取数据。我正在使用不带 DMA 的轮询传输。这是我正在使用的代码:
代码:
全选
uint16_t val;
spi_transac
tion_t trans = {}:
trans.flags = SPI_TRANS_USE_TXDATA;
trans.length = 16;
trans.rx_buffer = &val;
ESP_ERROR_CHECK( spi_device_acquire_bus(spi, portMAX_DELAY) );
for (i=0; i < 16; i++) {
ESP_ERROR_CHECK( spi_device_polling_transmit(spi, &trans) );
val = SPI_SWAP_DATA_RX(val, 16);
reads
= val;
}
spi_device_release_bus(spi);
这段代码运行良好,问题是传输之间有大约 8 us 的间隔,不允许代码读取速度足够快以满足我的要求。
在驱动程序代码中进行一些手动分析后,我发现代码花费更多时间的函数是在 spi_device_polling_start() 调用的 spi_device_polling_start() 中启动传输(由 spi_device_polling_transmit()。
我的问题是,如何缩短事务之间的时间以获得更高的采样率?