TIwilliam hill官网
直播中

王凯

7年用户 1311经验值
私信 关注

不知道入口参数ch_status是哪个函数赋给他的,不知道产生这个错误的原因是什么?

您好,
        我在使用EVM DM368开发板,想使用DMA模式的spi传输数据,主要参考的程序是dvsdk开发包drivers/spi文件夹下的spidev.c和davinci_spi.c,现在的问题是传输结束后片选信号不能返回高电平,数据和时钟波形正常;
        在代码中加打印信息后发现,输出DMA传输完成信号的函数davinci_spi_dma_tx_callback的一个入口参数ch_status的值是2,对应的宏是DMA_CC_ERROR(在edma.h中),而正常是1(DMA_COMPLETE),现在主要有两个问题:
1.这个DMA_CC_ERROR是个什么错误?
2.在整个开发包中没有找到调用davinci_spi_dma_tx_callback的函数,也就是不知道入口参数ch_status是哪个函数赋给他的,不知道产生这个错误的原因,也不知道是不是因为有这个错误导致片选没有返回高电平?
期待大家的回答,谢谢!

回帖(6)

臧超楠

2018-5-25 10:44:38
当你的驱动启用DMA时(davinci_spi_master.c),你的传输过程会由DMA完成,tx_callback是在DMA传输过程中出现问题时调用这个问题,详见mach-davinci/dma.c文件。
我也遇到与你类似的问题,是在驱动选用DMA方式,且tx/rx同时进行时会出现rx事件无法完成的问题,应该是这个驱动程序的问题。
DMA_CC_ERROR出现的原因是:
举报

王凯

2018-5-25 10:55:46
引用: 哈哈哈哈嘻嘻 发表于 2018-5-25 10:44
当你的驱动启用DMA时(davinci_spi_master.c),你的传输过程会由DMA完成,tx_callback是在DMA传输过程中出现问题时调用这个问题,详见mach-davinci/dma.c文件。
我也遇到与你类似的问题,是在驱动选用DMA方式,且tx/rx同时进行时会出现rx事件无法完成的问题,应该是这个驱动程序的问题。
DMA_CC_ERROR出现的原因是: ...

多谢回复,我的问题也没有解决,虽然报错,但是貌似不影响传输,回头再仔细看看你说的代码,谢啦!
举报

臧超楠

2018-5-25 11:02:52
引用: 我在线中 发表于 2018-5-25 10:55
多谢回复,我的问题也没有解决,虽然报错,但是貌似不影响传输,回头再仔细看看你说的代码,谢啦!

的确,不会影响传输,因为rx和tx是同时完成的,事件丢失并不影响你从DMA读数据。
首先,你是用ioctl实现的读写吗?rx_buf和tx_buf是否同时都设了值? 如果是,则驱动会阻塞,在以下代码处
if (t->rx_buf != NULL)
    wait_for_completion_interruptible(&davinci_spi_dma->dma_rx_completion);
其次,你用DMA方式读到的数据第一个字节是不是总是0?我读到的第一个字总是0,实际发送的数据是从接收到的第二个字节开始才对上,这就意味着会丢失最后一字节
举报

王凯

2018-5-25 11:21:11
引用: 哈哈哈哈嘻嘻 发表于 2018-5-25 11:02
的确,不会影响传输,因为rx和tx是同时完成的,事件丢失并不影响你从DMA读数据。
首先,你是用ioctl实现的读写吗?rx_buf和tx_buf是否同时都设了值? 如果是,则驱动会阻塞,在以下代码处
if (t->rx_buf != NULL)

用的spidev_write和spidev_read, 读时倒是没出现你说的第一字节是零的问题
举报

更多回帖

发帖
×
20
完善资料,
赚取积分