TI工程师你们好!
我现在使用贵公司的6467平台采集音频数据,数据是由STM32的IIS采集然后通过SPI接口送到6467,6467做主,STM32做从。
目前我已经成功在Linux /dev目录下生成了一个spidev0.0的设备,并且用Linux内核自带的测试程序spidev_test.c测试读写STM32都没问题。主要问题是这样:
a、当我开启DMA传送数据时,如果我的用户层程序(spidev_test.c)发送和接收都使用时,进程spidev_test传送一会会进入D状态即阻塞了;但是我改成单向的只读或者只写,测试程序就运行正常,长期测试进程不会出现阻塞的情况。
b、当我关闭DMA传送,使用POLL循环的方式传送数据时,一切都正常,不管是单向传数据还是双向传数据,测试很久进程不会出现阻塞的情况。
鉴于以上的情况,我在想,是不是你们提供的SDK用DMA方式驱动SPI的代码有bug?还是我哪里没有注意到?
附上我的设置:
static struct davinci_spi_platform_data dm646x_spi0_pdata = {
.version = SPI_VERSION_1,
.num_chipselect = 2,
.clk_internal = 1,
.cs_hold = 1,
.intr_level = 0,
.poll_mode = 1, /* 0 -> interrupt mode 1-> polling mode */
.use_dma = 0, /* when 1, value in poll_mode is ignored */ //开启DMA传输 此时poll_mode 无效 如果开启DMA传输就会出现进程阻塞,不开启一切正常。
.c2tdelay = 8,
.t2cdelay = 8,
};