Два UART одновременно

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Два UART одновременно

#1

Сообщение Ingwar » 27.09.2021{, 20:30}

Вопрос для знающих или сталкивавшихся. Планирую поднять мастер и слейв на 2ух "железных" uart. На тестовой плате с двумя МАХами485 полгода назад проверял чтение с нескольких частотников мастером и "отдавал" в комп по слейву. Тогда использовал "софт" для мастера и "хард" для слейва. Тесты были удачными, но краткие, на столе. Тут решил вернуться к проекту и собрать на 328РВ (там 2 uart). И возник вопрос - что будет, если во время опроса частотников, придет запрос на слейв платы? Насколько я слышал, uart чувствителен к таймингам обмена. Как поведут себя "железные"? Что я потеряю и/или получу неверные данные? Спасет ли ситуацию использование одного аппаратного и запрет на прерывания в "софтовом" мастере (запрос к плате по "харду" проигнорится и при повторе все прочитается нормально)?
Или не парится и будет все по "классике" - пока один обмен не закончится, другой не начнется?
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Два UART одновременно

#2

Сообщение Sancho » 28.09.2021{, 09:44}

Ingwar писал(а):
27.09.2021{, 20:30}
И возник вопрос - что будет, если во время опроса частотников, придет запрос на слейв платы?
Ingwar писал(а):
27.09.2021{, 20:30}
Как поведут себя "железные"?
UARTы на РВ независимы. Работают на аппаратных прерываниях.
Если во время приёма данных uart1 в буфер, ещё раз подчеркну - в буфер порта, будет запрос/приём на второй uart, мк спокойно это примет. Т.е. начинает прилетать байт в какой-нить порт, именно аппаратный, он его принимает в фоне, независимо от loop, после приёма срабатывает прерывание, loop приостанавливается на считывание байта в буфер/массив по адресу внутренней переменной, переменная инкрементируется, loop дальше. писец как быстро, несколько тактов мк, не считал. За этот промежуток передающее устройство также готовится к передаче следующего - сдвиг указателя в массиве, загрузку байта в передатчик, плюс нормированное минимальное время между байтами - этого с лихвой хватает на приём данных из двух аппаратных uart, даже если данные идут абсолютно синхронно.
Нормированное время между байтами в одной посылке не более 1,5 байта, однако "для скоростей более 19200 бод допускается использовать интервалы 750us" - времени просто немеряно!

Посему для
Ingwar писал(а):
27.09.2021{, 20:30}
Или не парится и будет все по "классике" - пока один обмен не закончится, другой не начнется?
ответом будет :
какой индикатор окончания приёма сработает раньше - тому первому и ответят.
Индикатор приёма - флаг постоянного количества байт в буфере приёма в течении указанного промежутка времени.

Насчёт
Ingwar писал(а):
27.09.2021{, 20:30}
Насколько я слышал, uart чувствителен к таймингам обмена.
данного случая это никак не касается.
Есть другие тайминги, определяющие время, в течении которого мастер ожидает ответа от слэва, timeout.
Это время, как правило, всегда больше времени всей посылки, часто в несколько раз, настраиваемое, - поэтому даже при использовании функции Serial.flush()(жесть, не люблю) для управления пином передачи, или как раньше в флп постоянно, Вы успеете отправить свои данные с другого uart мастеру до окончания его терпения.
Как то так.

Отправлено спустя 17 минут 55 секунд:
ATMEGA328PB - вещь!!!
Для флпрог не особая разница, а для ручного, сишного, кодо-ваяния просто отлично!
СпойлерПоказать
google перевод
– Два 8-разрядных таймера / счетчика с отдельным Прескалером и режимом сравнения
– Три 16-разрядных таймера / счетчика с отдельным Прескалером, режимом сравнения и режимом захвата
– Счетчик реального времени с отдельным генератором
– Десять ШИМ-каналов
– 8-канальный 10-разрядный АЦП в пакетах TQFP и QFN/MLF
– Два Программируемых последовательных USART
Два последовательных интерфейса SPI Master/SLAVE
Два байтовых 2-проводных последовательных интерфейса (совместимость с Philips I2C)
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Два UART одновременно

#3

Сообщение Ingwar » 28.09.2021{, 14:32}

Sancho писал(а):
28.09.2021{, 10:02}
Как то так.
Александр, благодарю за развернутый ответ.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Ответить

Вернуться в «Спросить у знатоков»