Вопрос для знающих или сталкивавшихся. Планирую поднять мастер и слейв на 2ух "железных" uart. На тестовой плате с двумя МАХами485 полгода назад проверял чтение с нескольких частотников мастером и "отдавал" в комп по слейву. Тогда использовал "софт" для мастера и "хард" для слейва. Тесты были удачными, но краткие, на столе. Тут решил вернуться к проекту и собрать на 328РВ (там 2 uart). И возник вопрос - что будет, если во время опроса частотников, придет запрос на слейв платы? Насколько я слышал, uart чувствителен к таймингам обмена. Как поведут себя "железные"? Что я потеряю и/или получу неверные данные? Спасет ли ситуацию использование одного аппаратного и запрет на прерывания в "софтовом" мастере (запрос к плате по "харду" проигнорится и при повторе все прочитается нормально)?
Или не парится и будет все по "классике" - пока один обмен не закончится, другой не начнется?
Два UART одновременно
-
- Полковник
- Сообщения: 1928
- Зарегистрирован: 28 окт 2015, 22:47
- Откуда: Ленобласть
- Имя: Игорь
- Поблагодарили: 2 раза
Два UART одновременно
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Два UART одновременно
Ingwar писал(а): 27 сен 2021, 20:30 И возник вопрос - что будет, если во время опроса частотников, придет запрос на слейв платы?
UARTы на РВ независимы. Работают на аппаратных прерываниях.
Если во время приёма данных uart1 в буфер, ещё раз подчеркну - в буфер порта, будет запрос/приём на второй uart, мк спокойно это примет. Т.е. начинает прилетать байт в какой-нить порт, именно аппаратный, он его принимает в фоне, независимо от loop, после приёма срабатывает прерывание, loop приостанавливается на считывание байта в буфер/массив по адресу внутренней переменной, переменная инкрементируется, loop дальше. писец как быстро, несколько тактов мк, не считал. За этот промежуток передающее устройство также готовится к передаче следующего - сдвиг указателя в массиве, загрузку байта в передатчик, плюс нормированное минимальное время между байтами - этого с лихвой хватает на приём данных из двух аппаратных uart, даже если данные идут абсолютно синхронно.
Нормированное время между байтами в одной посылке не более 1,5 байта, однако "для скоростей более 19200 бод допускается использовать интервалы 750us" - времени просто немеряно!
Посему для
ответом будет :Ingwar писал(а): 27 сен 2021, 20:30 Или не парится и будет все по "классике" - пока один обмен не закончится, другой не начнется?
какой индикатор окончания приёма сработает раньше - тому первому и ответят.
Индикатор приёма - флаг постоянного количества байт в буфере приёма в течении указанного промежутка времени.
Насчёт
данного случая это никак не касается.
Есть другие тайминги, определяющие время, в течении которого мастер ожидает ответа от слэва, 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, если что. запомните на всякий. многие знают номер тлф.
-
- Полковник
- Сообщения: 1928
- Зарегистрирован: 28 окт 2015, 22:47
- Откуда: Ленобласть
- Имя: Игорь
- Поблагодарили: 2 раза
Два UART одновременно
Александр, благодарю за развернутый ответ.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость