完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
您好,
我在使用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个回答
|
|
当你的驱动启用DMA时(davinci_spi_master.c),你的传输过程会由DMA完成,tx_callback是在DMA传输过程中出现问题时调用这个问题,详见mach-davinci/dma.c文件。
我也遇到与你类似的问题,是在驱动选用DMA方式,且tx/rx同时进行时会出现rx事件无法完成的问题,应该是这个驱动程序的问题。 DMA_CC_ERROR出现的原因是: |
|
|
|
哈哈哈哈嘻嘻 发表于 2018-5-25 10:44 多谢回复,我的问题也没有解决,虽然报错,但是貌似不影响传输,回头再仔细看看你说的代码,谢啦! |
|
|
|
的确,不会影响传输,因为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:02 用的spidev_write和spidev_read, 读时倒是没出现你说的第一字节是零的问题 |
|
|
|
内核2.6.32-rc6的spi驱动工作在DMA模式时有BUG,会导致此问题,davinci最新的2.6.37的内核修正了这个问题,但2.6.37的SPI驱动修改了很多数据结构,无法直接在2.6.32上使用,需要做移植。 |
|
|
|
哈哈哈哈嘻嘻 发表于 2018-5-25 11:34 多谢回复,终于不用再纠结这个问题了,回头下个新版本的内核看看 |
|
|
|
只有小组成员才能发言,加入小组>>
334 浏览 1 评论
528 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
773 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
649 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1126 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
56浏览 29评论
121浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
251浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
200浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
56浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:31 , Processed in 0.769053 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号