«Последовательная передача завершена» — Прерывание RS485 [BeagleBoneBlack — Angstrom]

Я разрабатываю приложение на BeagleBoneBlack. Встроенный Linux для меня совершенно новый = /

Проблема, с которой я сталкиваюсь, заключается в том, что я хочу реализовать связь RS485,
Я написал фрагмент C ++ — кода с использованием библиотеки SeriaLib, на данный момент выделенный GPIO используется для переключения направления интерфейса RS485. Все было хорошо до этого момента.

Для написания сообщения используется функция write ниже

write(fd,Message,Lenght);

Единственная проблема заключается в переключении DIRECTION-Pin сразу после того, как последний байт записан в BUS = (

При разработке на микроконтроллерах нет проблем реагировать на различные прерывания и так далее.

Есть ли решение — глубоко в ядре? — переключить пин DIRECT после успешной передачи сообщения?

1

Решение

Обычно на маленький В микроконтроллере после ввода последнего символа вы можете включить прерывание завершения передачи или просто заняться ожиданием флага завершения передачи в процедуре отправки, а затем отключить драйвер.

Тем не менее, некоторые более тяжелые MCU не имеют полного прерывания передачи, и многозадачная ОС может нелюбовь заняты ожиданием (и вводят нежелательную задержку, если вы уступаете между опросами). На ум приходят два способа борьбы с этим.

  1. Поскольку у вас есть драйвер для отключения, похоже, у вас есть одна двунаправленная пара, и будет получить все, что вы передаете. В сочетании с отслеживанием состояния вы можете использовать Получать прервите, чтобы узнать, что ваш последний персонаж был отправлен, и отключите драйвер. (Также обработайте ошибки RX, если кто-то еще блокирует автобус)

  2. Определите время, зависящее от скорости передачи, от постановки в очередь последнего символа до завершения передачи, и установите прерывание таймера на это время, затем отключите драйвер в ISR.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector