“串行传输完成” - 中断RS485 [BeagleBoneBlack - Angstrom]

时间:2014-01-15 15:36:58

标签: c++ linux beagleboneblack angstrom-linux rs485

我正在BeagleBoneBlack上开发一个应用程序。嵌入式Linux对我来说是个新鲜的东西= /

我面临的问题是我想要实现RS485通信, 我使用SeriaLib-Library编写了一段C ++ - Code,目前使用专用的GPIO来切换RS485接口的方向。到目前为止一切都很好。

要编写消息,函数write将在下面使用

write(fd,Message,Lenght);

唯一的问题是在最后一个字节写入BUS后立即切换DIRECTION-Pin =(

在微控制器上开发时,对各种中断等做出反应是没有问题的。

有没有解决方案 - 深入内核? - 在成功传输消息后切换引脚DIRECT?

1 个答案:

答案 0 :(得分:2)

正常情况下,在微控制器上发送最后一个字符时,您可以启用传输完成中断,或者只是忙于等待发送例程中的发送完成标志,然后禁用驱动程序。

然而,一些重量较重的MCU没有传输完成中断,并且多任务操作系统可能不喜欢忙碌等待(并且如果您在民意调查之间产生,则会引入不希望的延迟)。脑海中浮现出两种处理方式。

  1. 由于你有一个要禁用的驱动程序,听起来你有一个双向对,并且会收到你发送的所有内容。再加上一些状态跟踪,您可以使用 receive 中断来知道您的最后一个字符已被发送,并禁用该驱动程序。 (如果其他人阻塞了总线,也处理RX错误)

  2. 确定从最后一个字符排队到传输完成之间的波特率相关时间,并在该时间内设置定时器中断,然后在ISR中禁用驱动程序。