"Serial transmit complete" -中断RS485 [小猎犬骨黑 - 埃]
"Serial transmit complete"-Interrupt RS485 [BeagleBoneBlack - Angstrom]
我正在BeagleBoneBlack上开发一个应用程序。嵌入式linux对我来说是全新的=/
我面临的问题是,我想实现RS485通信,我使用SeriaLib库编写了一段C++代码,目前使用专用GPIO来切换RS485接口的方向。到目前为止一切都很好。
要写入消息,使用下面的功能写入
write(fd,Message,Lenght);
唯一的问题是在最后一个字节写入总线=()后立即切换DIRECTION引脚
在微控制器上开发时,对各种中断等做出反应是没有问题的
内核深处有什么解决方案吗在成功传输消息后切换引脚DIRECT?
通常在小型微控制器上,在输入最后一个字符后,您可以启用传输完全中断,也可以在发送例程中忙于等待传输完成标志,然后禁用驱动程序。
然而,一些较重的MCU没有传输完全中断,并且多任务操作系统可能不喜欢忙于等待(如果在轮询之间让步,则会引入不希望的延迟)。我想到了两种处理方法。
-
由于您有一个要禁用的驱动程序,听起来就像您有一对双向驱动程序,并且将接收您发送的所有内容。再加上一些状态跟踪,您可以使用接收中断来知道您的最后一个字符已经发送,并禁用驱动程序。(如果其他人堵塞了总线,也可以处理RX错误)
-
确定从最后一个字符入队到传输完成的波特率相关时间,并在该时间段内设置计时器中断,然后禁用ISR中的驱动程序。