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)