toweroff 0 13 апреля, 2020 Опубликовано 13 апреля, 2020 · Жалоба Добрый день. Есть некий tty (UART). Есть процесс, который в него пишет и читает из него. Читать нужно по тайм-ауту после физического окончания передачи, количество передаваемых байт переменное. Очень не хочется отдавать всё на откуп микросекундным задержкам, хотелось бы ждать сигнала от передатчика, что последний стоповый бит передан в канал (ну, в крайнем случае, - положили последний байт в сдвиговый регистр) Как правильно это сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 30 14 апреля, 2020 Опубликовано 14 апреля, 2020 · Жалоба У UART'ов обычно помимо флага прерывания TxEmpty есть флаг TxComplete, который взводится, когда последний бит данных покинул сдвиговый регистр передатчика. Он и означает физическое окончание передачи. Обычно используется в полудуплексных системах, чтобы перевести выход передатчика по окончании в высокоимпедансное состояние. Может быть это вам поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 14 апреля, 2020 Опубликовано 14 апреля, 2020 · Жалоба В 13.04.2020 в 10:52, toweroff сказал: Как правильно это сделать? По-моему, правильно читать не по тайм-ауту после окончания передачи, а всё время, непрерывно. Поток на запись, поток на чтение. И (опционально) - синхронизацию, которая уведомляет принимающий поток, что пошла новая команда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_3m 5 14 апреля, 2020 Опубликовано 14 апреля, 2020 · Жалоба 4 часа назад, dxp сказал: У UART'ов обычно помимо флага прерывания TxEmpty есть флаг TxComplete, который взводится, когда последний бит данных покинул сдвиговый регистр передатчика. Вы заблуждаетесь! В soc заточенных на linux часто применяют 16550 compatible uart. В большинстве реализаций 16550 прерывание по TxEmpty не предусмотрено. Обычно есть флаг TxEmpty без прерывания но в некторых чипах "альтерннативно одаренные" HDL дизайнеры и его не реализуют. И остается только TX Fifo empty. Вот с этим как хочешь так и крутись. Пример https://github.com/Axl-zhang/Allwinner-V40-T3-R40-manual/blob/master/V40_R40_T3_Datasheet_V1.2.pdf Раздел 9.3, стр 632. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 11 14 апреля, 2020 Опубликовано 14 апреля, 2020 · Жалоба On 4/13/2020 at 8:52 AM, toweroff said: Как правильно это сделать? Какой процессор ? Обычно, если возможно, в драйверах реализуют полудуплекс для rs485 https://elixir.bootlin.com/linux/latest/ident/serial_rs485 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться