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

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Ingwar
Полковник
Сообщения: 1928
Зарегистрирован: 28 окт 2015, 22:47
Откуда: Ленобласть
Имя: Игорь
Поблагодарили: 2 раза

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

Сообщение Ingwar »

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

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

Сообщение Sancho »

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

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

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

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

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

Сообщение Ingwar »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость