-
- Гавно вопрос. Вместо УАРТа возьми многобитный (>= 16) SPI и передавай свои данные вместе со стартом/стопом, а в хвост просто добавь сколько нужно для паузы пустых бит (клоки, ессно, не нужны). S12345678sssssss - например, для 16-битного SPI - типа 6 лишних стоп-бит (машей касло не испортить). Ниже подобное предлагали --> - MBedder(15.05.2021 15:10, ссылка)
- А что за пакет что такие фантазии потребовались... POV_(171 знак., 15.05.2021 13:16, )
- Если не хочется прерываний, можно использовать МК, в которых есть механизмы EVENT и CCL (configurable custom logic), которые аппаратно конфигурируют вывод TxD. Такие МК, например, унаследовал Микрочип от Атмеля (серии ATSAM и XMega). Для разработки использовать их облачную среду Atmel Start и Microchip Studio (в прошлом Atmel Studio 7). Поначалу ломает шаблон, но это всегда так. - Guest(15.05.2021 11:50, )
- Может задействовать второй УАРТ для пауз? Выход его игнорить - maleon(15.05.2021 09:49)
- Спасибо! Или блокировать выход основного, загрузить его любым
байтом, после прерывания снять блокировку, и работать как обычно. - Evgeny_CD(15.05.2021 14:57)
- Я вам ниже предлагал использовать loopback для контроля передачи пакета путем приема "эхо". Второй UART тогда не нужен. Если нет встроенного loopback, то можно сгородить внешний мультиплексор для RXD хоть на 74HC00 какой-нибудь. Когда пакет передан (и принят) блокируете выход TXD и передаете "вникуда" еще один байт. - rezident(15.05.2021 17:22)
- Спасибо! Или блокировать выход основного, загрузить его любым
байтом, после прерывания снять блокировку, и работать как обычно. - Evgeny_CD(15.05.2021 14:57)
- Делаем вывод через уарт только через одну процедуру и только пакетами. В процедуре делаем програмно паузы какие хотим и где хотим. - Boвa(15.05.2021 09:22)
- Альтернативные идеи? Решения основанные на строгом соблюдении таймингов - сразу фтопку, без рассмотрения! Они невозможны ни на линуксе ни на винде. Протокол должен одинаково хорошо работать через 16550-uart внутри SOC/PC, usb-uart, bt-uart и даже через tcp сокет. Единственное что можно допустить - таймаут на неответ устройства. PS: паузу умеет передавать UART в NUC970. - 3m(15.05.2021 08:02)
- классика. на такого типа задачах используют cheblin(174 знак., 15.05.2021 07:40, ссылка, картинка)
- Указанное положение дополнительного байта удобно при дешифровке, дополнительный байт в конце удобнее при шифровании maleon(77 знак., 15.05.2021 10:01)
- Это не совсем в тему. Проблема как я понял в том что мастер
передает поток байт слитно когда сразу после стопа идет старт
следующего байта а тупенький слэйв не успевает выгребать из uart
байты при слитной передаче. Ответ тут один: тупеньким слэйвам
которые не успевают / нет dma / нет памяти для двойной буферизации
пора занять место на кладбище. Им нечего делать в XXI веке. - 3m(15.05.2021 08:06)
- без фрэйминга тут делать нечего. восстановиться после сбоя нереально. cheblin(107 знак., 15.05.2021 09:13)
- Проще всего 74LV4040A поставить, UART на сброс через инвертор,
какой-то разряд на прерывание, и какой-то таймер на выход для
клока. Evgeny_CD(101 знак., 15.05.2021 01:09, ссылка)
- в целом вся задача гавной воняет ))))))) - Mahagam(15.05.2021 01:33)
- +1 - 3m(15.05.2021 08:07)
- в целом вся задача гавной воняет ))))))) - Mahagam(15.05.2021 01:33)
- SPI. нахрен клок и прочие енаблы. тупо выхлоп данных. естественно,
что перед отправкой сформированный пакет из 8-и битных данных
должен быть перековеркан в 10-ти битные. Mahagam(484 знак., 14.05.2021 22:55)
- Замысел немного другой. Идёт поток символов. Каждый байт
засовывается по прерыванию. Evgeny_CD(328 знак., 14.05.2021 23:46)
- ради любопытства глянул даташит на STM32F407. он же умеет в
IDLE/BREAK frame. неужто этого недостаточно? - Mahagam(15.05.2021 00:10)
- STM32 лишний для этой задачи. Тут RL78, dsPIC с банками регистров самое то. Скорость реакции на прерывание критична. - Evgeny_CD(15.05.2021 01:14)
- они все умеют, но... с детктом ошибок там кривизна, сначала флаг ошибки фрейма, а уж потом флаг брейка, если работать по протоколу лина то все как ок выходит, с чистым уартом придется один фиг ожидать "а что это было ???" - Aleksey_75(15.05.2021 00:17)
- ради любопытства глянул даташит на STM32F407. он же умеет в
IDLE/BREAK frame. неужто этого недостаточно? - Mahagam(15.05.2021 00:10)
- SPI синхронен, в варианте slave внешний клок хоть 0.1 Гц. - Evgeny_CD(14.05.2021 23:11)
- Замысел немного другой. Идёт поток символов. Каждый байт
засовывается по прерыванию. Evgeny_CD(328 знак., 14.05.2021 23:46)
- А в чем недостаток простого ide-детектора? Также есть break. В случае с модбасами вообще проблем нет - настраиваем dma на приём 256 байт, если не сработал idle, то пакет битый. - evgeniy1294(14.05.2021 21:21)
- Ножку с аппаратно генерируемым битом "передача" соединить с
ножкой-входом таймера, а с таймера - прерывание. Cкpипaч(44 знак., 14.05.2021 21:19)
- 100 ног есть, таймеров подходящих нет. Надо, чтобы по потенциалу
таймер сбрасывался. Есть MCU с таймером, который сбрасывается
внешней ногой и начинает считать с нуля? - Evgeny_CD(14.05.2021 23:49)
- Сделать таймер программно :)))) Cкpипaч(472 знак., 15.05.2021 09:55)
- Вход CAPTURE/COMPARE, не? - Cкpипaч(15.05.2021 09:30)
- 100 ног есть, таймеров подходящих нет. Надо, чтобы по потенциалу
таймер сбрасывался. Есть MCU с таймером, который сбрасывается
внешней ногой и начинает считать с нуля? - Evgeny_CD(14.05.2021 23:49)
- Передатчик в режим 9 бит, 9-й бит в единицу, dastun(155 знак., 14.05.2021 21:03)
- Приемник гарантированно прочухается и при передаче нормального 0xFF - Samx(14.05.2021 21:00)
- Аналоговая схема (одновибратор) будет неизбежно завязана на
скорость и иметь точность выдержки паузы +/- лапоть. Лучше уж тогда
loopback задействовать. - rezident(14.05.2021 20:38)
- Незабвенный NE555 имел точность 10% времени при 5% точности
конденсаторов и 1% точности резисторов. Причём точность сохранялась
даже при варьировании питания. Фокус - пороги срабатывания,
задаются делителем питания, а не просто уровнем. - Evgeny_CD(14.05.2021 23:57)
- NE555 до сих пор использую в виде LMC555, но проблема перестройки парметров одновибратора в зависимости от baudrate никак не освещена. Вы же озвучили проблему формирования паузы с точностью до длины одного символа. Однако время передачи символа пропорционально выбранной скорости передачи. Будете переключаемый набор резисторов ставить? Кроме того, к вашему сведению NE555 не перезапускаемый таймер. Для добавления функции перезапуска нужны еще пара внешних элементов. - rezident(15.05.2021 11:32)
- Незабвенный NE555 имел точность 10% времени при 5% точности
конденсаторов и 1% точности резисторов. Причём точность сохранялась
даже при варьировании питания. Фокус - пороги срабатывания,
задаются делителем питания, а не просто уровнем. - Evgeny_CD(14.05.2021 23:57)
- У людей это делалось DMA-контроллером умнее хлебушка. Настраивается
scatter-gather на таймер+UART+таймер. А на прием - UART должен быть
связан событием с таймером. Говорят у каких-то МК и такое было - lloyd(14.05.2021 20:30)
- Насчет приема не понял. - Evgeny_CD(14.05.2021 20:33)
- Ну детектировать "тишину" на линии с DMA-контроллером. У TM4C1294 есть флаг прерывания RXIDLE, но с включенным DMA этот флаг не взводится. Поэтому или периодически долбить порт, или реализовать на прерываниях, или подцепить RX-линию на таймер, который после стоп-бита насчитает до нуля и скажет, что фрейм закончился - lloyd(14.05.2021 20:36)
- Насчет приема не понял. - Evgeny_CD(14.05.2021 20:33)
- Можно счетчик поставить и сбрасывать его, 1 в старшем разряде на вход прерывания. - Evgeny_CD(14.05.2021 20:29)