XiLinx SDK FreeRTOS学习记录(五)——串口问题解决全过程以及串口接收中断函数的测试
串口问题
串口出现问题真的很恶心,再也不想遇到这样的问题了。
首先是发现识别不到串口设备,以为是驱动没装好,搞了一晚上驱动,但是发现其它电脑也都识别不到,这里说明一下,上一篇blog里面的那些操作,一点用没有,驱动就正常安装就可以了,识别不到设备大概率不是自己的原因。当时尝试了换一台电脑,没用,换一块转接板也没用,直到今天才发现,是串口线的问题,换了一根线就能识别到了。但是这时候又出现了新的问题,虽然识别到了设备,但是串口依然是没有数据输出,然而这次换了一台电脑就能输出了,那就说明设备现在是没问题了,问题出现在我的电脑。一开始我又把思路放在了驱动上,以为是什么别的驱动跟这个冲突了,但是又不知道该怎么找哪个驱动冲突了。然后我又尝试换用不同的驱动助手去尝试,看有没有哪个能收到我的数据,当我用一个叫O-ComTool_Pro的串口助手时发现,它不像别的串口助手一样会显示串口的全名,而是之后COMx,这个时候我就注意到,我的UART串口和蓝牙什么什么链路都是COM3,所以在这个串口助手里面就只显示一个COM3,因此我猜测是不是这两个冲突了,所以我就去把UART改为COM5,问题解决!!!!!!!!
接收中断函数
之前的问题是,我要是设置135接收字节和50的阈值,会进入下面这段函数多少次。
if((IsrStatus & ((u32)XUARTPS_IXR_RXOVR | (u32)XUARTPS_IXR_RXEMPTY |
(u32)XUARTPS_IXR_RXFULL)) != (u32)0) {
/* Received data interrupt */
ReceiveDataHandler(InstancePtr);
}
今天我试了一下在Handler前面加了一段打印信息,然后进行测试,当我输入135个字符串的时候,这个判断进入了两次,超时判断进入了一次,100字节时也是这样,这就说明我们之前的想法时错误的,当我输入50字节时进入了一次RXOVR和一次TOUT其实是因为50接受满了以后,FIFO变成了0,然后超时了,并不是接收满了同时也会触发超时,若输入51字节依然时RXOVR一次TOUT一次。