К1921ВГ1Т UART + DMA

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

Ответить
Аватара пользователя
Kisa900
Сообщения: 2
Зарегистрирован: 24 апр 2026, 09:54
Предприятие: АО «Нефтеавтоматика»

К1921ВГ1Т UART + DMA

Сообщение Kisa900 »

Приветствую уважаемые участники сие ресурса!

Вопрос: Правильно ли я понимаю что прием пакета неизвестной длины по UART + RX IDLE + DMA - провальная концепция?

Проясню: Настраиваем UART на 115200, включаем прерывание по IDLE, за уши притягиваем DMA с парочкой настроенных дескрипторов, посылаем байтики и вроде бы все ОК, но DMA как и полагается все вычитывает из FIFO буффера, а прерывание по RX IDLE срабатывает только при наличии "тишины" в 4 байта на линии и НАЛИЧИЮ байтов данных в приемном буффере...

Итог: Посылка закончилась, DMA молодец ( частично ), IDLE не сработал.

Пупупу, поправьте меня конечно если я что-то где то упустил, но решения из ситуации пока не нашел, да и может "глаз замылился" с этим ВГ1Т.
P.S. Решил обыграть через WDT на канал DMA, аля если нет данных в течении N тиков, то срабатывает прерывание и мы там уже можем какую то хитрую логику покрутить зная бэкграунд, но при 115200 этот таймаут слишком велик и WDT срабатывает раньше чем фактический конец посылки.
durimar_13
Сообщения: 114
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: К1921ВГ1Т UART + DMA

Сообщение durimar_13 »

Привет!
Я обычно не использую прерывание и прото ловлю признак конца посылки. Например \n или EOF, или еще что-то в этом роде.
Еще можно такой прием, как в Паскале: В первом байте (двух, четырех ...) передаете число - количество байт. Сначала побайтно выбираете это число, потом уже на его основе выбираете нужное количество байт.
Если у Вас чисто двоичный поток неизвестной длины и неизвестной кодировки - придется ловить прерывание по тайм ауту.
У простого UART есть только RX и TX сигналы. У модемного варианта - есть специальные сигналы готовности, можно их использовать. Но обычно на другой стороне канала связи такой возможности нет.
Хотя.. программист я так себе. :D
С уважением, Виктор.
durimar_13
Сообщения: 114
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: К1921ВГ1Т UART + DMA

Сообщение durimar_13 »

Помню, что для К1921ВГ015 в SDK есть пример работы UART-DMA в связке. Периферия у этих двух МК похожа, можно там подсмотреть.
Но я сразу отказался и от DMA для UART и от прерываний для UART. ;)
С уважением, Виктор.
Ответить

Вернуться в «32-разрядные микроконтроллеры»