Chinaunix

标题: 串口DMA实现 [打印本页]

作者: yinkaizhong    时间: 2009-02-03 11:43
标题: 串口DMA实现
各位大哥!小弟最近在调试uart的DMA实现方式,具体的是接收、发送都采用DMA方式,
参考的是内核drivers/serial/bfin_5xx.c来改的!
目前遇到的问题是:大量接收数据时存在丢数据的情况,希望有做个相关的大哥们帮帮忙!
作者: yidou    时间: 2009-02-03 13:19
DMA + polling, 还是DMA + interrupt方式?
如果是interrupt方式, 跟踪一下中断次数和发送次数是否匹配。
UART FIFO有多大? 考虑一下FIFO是否可能溢出? FIFO满的时候是怎么处理? 不处理的情况下会有数据丢失。
作者: yinkaizhong    时间: 2009-02-03 13:55
DMA + polling方式,16级FIFO,FIFO没有溢出,如果溢出了,会进溢出错误处理中断,
FIFO满时,如果现在还有数据来,会报溢出错误;
作者: yidou    时间: 2009-02-03 14:14
逻辑上看不出来有问题了
作者: yinkaizhong    时间: 2009-02-03 14:47
有没有好的一点的测试方法,因为如果直接在驱动里面,添加printk 调试语句的,又是一个发送的过程
作者: yidou    时间: 2009-02-03 14:56
把发送和接收的数据, 做log, 然后手工比较。
或是, 做一些有规律的数据来发送, 如果收到的数据不符合规律, 程序就停
作者: yinkaizhong    时间: 2009-02-03 16:22
作LOG是什么意思阿?
   恩  我现在就是在作一些有规律的测试,但错了就停,我还是不能清楚,是错在DMA BUF,还是上层TTY
作者: yidou    时间: 2009-02-03 17:08
有进展吗?
丢数据后, uart driver是否正常?建议出错后, 把寄存器dump出来,确认一下寄存器是否处于正常状态。
作者: yinkaizhong    时间: 2009-02-03 17:39
没有多大进展,还没找到在那里出的错误,主要是要大量接收时,如何来判断那里出错,方法还没有找到
所以DUMP寄存器也无法判断
作者: yidou    时间: 2009-02-05 10:11
原帖由 yinkaizhong 于 2009/2/3 17:39 发表
没有多大进展,还没找到在那里出的错误,主要是要大量接收时,如何来判断那里出错,方法还没有找到
所以DUMP寄存器也无法判断


发送有规律的数据, 比如A到Z, 接收到数据后, 进行校验。 是否可行?
作者: emmoblin    时间: 2009-02-15 23:00
这种问题最好的调试方法就是多加一些计数。
把各个环节都加上计数,慢慢的就能找到问题了
作者: yidou    时间: 2009-02-16 08:57
原帖由 emmoblin 于 2009/2/15 23:00 发表
这种问题最好的调试方法就是多加一些计数。
把各个环节都加上计数,慢慢的就能找到问题了


慢慢的调试, 慢慢就找到了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2