Jump to content
Олег Вялкин

DMA прерывание по маркерному байту

Recommended Posts

Всем доброго здравия! Имеется линк UART по которому передаются данные в режиме COBS. Сейчас определение маркерных разделителей происходит в прерывании RXNEIE, что видится мне не самым удачным решением по части скорости. Хотелось бы полностью уйти от прерываний UART и пересесть на DMA. Но с ним возникает проблема. Ввиду заранее неизвестного объема данных, мне нужна возможность остановить копировщик по факту столкновения с маркерным байтом. Исследование рефов и гугла результатов не дело. Из всех возможных источников прерываний DMA нет ни одного который бы позволил хоть как-то подойти к решению проблемы. Какие есть варианты реализовать подобное поведение копировщика?

Share this post


Link to post
Share on other sites

DMA просто пересылает данные без всякого анализа. Возможно вам подойдет вариант с двойным буфером. В этом режиме два прерывания DMA по половинному и полному буферу. В обработчике ищите маркер и делаете, что надо. Необходимо еще прерывание от USART если передача закончилась до заполнения буфера.

Share this post


Link to post
Share on other sites
2 hours ago, Олег Вялкин said:

столкновения с маркерным байтом

DMA направляет поток в регистр счётчика какого-нибудь таймера, а в регистре сравнения лежит маркерный байт. При совпадении таймер генерирует прерывание.

Share this post


Link to post
Share on other sites

Как сделать ИП с ультрашироким диапазоном?

Ключевыми особенностями высоковольтных SiC MOSFET Wolfspeed являются малое сопротивление канала в открытом состоянии и минимальное значение паразитных емкостей, что позволяет максимально снизить статические и динамические потери, и, соответственно, увеличить рабочую частоту преобразователей.

Подробнее

А что за МК?

У некотрых STM USART умеет определять заданный символ в потоке. И вызывать прерывание по этому событию. Вот в прерывании и можно DMA остановить.

Share this post


Link to post
Share on other sites

Вебинар «Практика разработки IoT-устройств с BlueNRG-LP – волшебной палочкой разработчика» (23/03/2021)

Приглашаем 23 февраля на бесплатный практический вебинар по BlueNRG-LP - новой SoC STMicroelectronics. Будут рассмотрены новые возможности создания прототипов IoT-устройств на BlueNRG-LP с использованием экосистемы и отладочных средств ST, а также практические примеры по использованию BlueNRG-GUI v.4.0.0, настройке и работе в сети BLE-MESH, пример управления умным домом с помощью BlueNRG-LP и другие.

Подробнее

3 часа назад, Олег Вялкин сказал:

Из всех возможных источников прерываний DMA нет ни одного который бы позволил хоть как-то подойти к решению проблемы.

В DMA такого быть и не может. НО, есть серии МК, где сам UART умеет анализировать поток на лету и дергать прерывание по совпадению символа. Та же 303 серия на такое способна.

Share this post


Link to post
Share on other sites

Материалы вебинара Практическое использование TrustZone в STM32L5

Материалы вебинара, посвященного экосистеме безопасности и возможностях, которые дает новая технология TrustZone в МК STM32L5, содержат две подробные практические работы: создание простого приложения с изоляцией в TrustZone, и пример отладки и тестирования TFM-SBSFU. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

да простой буфер из двух байт и прерывание по полубуферу решит вопрос в любом камне. UART настолько тормоз, что по ходу приема можно все проанализировать софтом и еще джигу успеть станцевать

Цепляем уарт на дма, дма направляем в двухбайтовый буфер, по каждому прерыванию дма (буфер/полубуфер) делаем анализ. Все. От длины пакета не зависит, проц не тормозит

Но если камень поддерживает анализ на лету прямо самим уартом, то лучше конечно эту тему раскурить. Иначе нахрена весь этот тюнинг будет бестолку простаивать

Edited by mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Share this post


Link to post
Share on other sites
14 часов назад, mail_robot сказал:

дма направляем в двухбайтовый буфер

Нах тогда вообще ДМА? Выигрыша никакого. Ровно точно так же можно делать проверку в прерывании от UART.

 

14 часов назад, mail_robot сказал:

по каждому прерыванию дма (буфер/полубуфер) делаем анализ.

И точно так же, как и в случае прерывания от UART прыгаем в прерывание по приему каждого байта. Нифига не оптимально.

Share this post


Link to post
Share on other sites

я вообще на самом деле чет плохо понимаю смысл всей этой вошкотни


Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • тогда разбирать, смотреть и "поминать" его проц .... разве что еще порты на предмет ЗАЛИТИЯ и "проводимости паразитной" ....
    • Итак, всё началось с того, что повышающий преобразователь, после сборки у меня начал работать, мягко говоря, странно. Ток потребления на холостых 350 мА и при этом дроссель в первые минуты работы нагревается так, что рука еле терпит. Какие варианты ? Входит в насыщение ? Нет! Слишком маленькая индуктивность и как следствие, слишком большие токовые пульсации ? Тоже нет. В общем, решил я намотать дроссель тремя жилами. А чтоб больше витков вошло, решил намотать сначала двумя жилами, чтоб с внутренней стороны лежало вплотную, а потом поверх намотать третьей жилой так, чтоб она располагалась между первой и второй, при этом с внутренней стороны, она будет лежать какбы сверху. Думаю, какой я у мамы инженер  И естественно, в каком-то месте просчитался с витками и намотал на один больше   В общем, не делайте так никогда
    • Зачем так грубо.? Это более чем хороший "был" инструмент, для начинающего музыканта. Так я бы с радостью, токо нет по близу мастерских, которые такое ремонтируют. По Украине перевозчиком с радостью отправлю на ремонт, кто бы взялся.
    • А я не обсуждаю свой проект, я спросил, как у вас. Если было непонятно из моих слов - свой проект - всмысле проект, который я делаю сам для себя, во многом руководствуясь вашим проектом. В моём всплыла вот такая проблема, поэтому и спросил, как у вас.
    • Тогда на помойку. Ремонт не целесообразен.
    • Вряд ли причина в резинках, ведь после включения каждая клавиша отыгривает один раз, но не выключается. Стоит вынуть с розетки вставить и снова можно один раз отыграть. И именно вынув шнур с розетки, если выключить кнопкой, то играть не будут.
×
×
  • Create New...