работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для ми

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

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

Мерседес
Сообщения: 37
Зарегистрирован: 05 авг 2026, 12:53
Предприятие: Каскад

работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для ми

Сообщение Мерседес »

Добрый день. вот такой незамысловатый алгоритм. алгоритм системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для микроконтроллера K1921VG1T. программа небольшая, текст прилагается. все вроде правильно. но буфер заполняется измеренными значениями только до 32 ячейки. дальше заполняется нулями. встречал в соседней теме подобное, но решения пока нет.
Вложения
main.c
(10.72 КБ) 114 скачиваний
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение durimar_13 »

Мерседес писал(а): 06 авг 2026, 10:00 Добрый день. вот такой незамысловатый алгоритм. алгоритм системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для микроконтроллера K1921VG1T. программа небольшая, текст прилагается. все вроде правильно. но буфер заполняется измеренными значениями только до 32 ячейки. дальше заполняется нулями. встречал в соседней теме подобное, но решения пока нет.
День добрый!
Бегло глянул в код. Но я неважный программист, я конструктор - любитель. Код похож на то что было у меня в теме, мне его Алиса Яндексовна предложила. Код выложен в теме "Описание работы DMA...". Там ограничений на количество измерений нет. Но... тормоза страшенные и виснет. Приходится кнопку резет использовать.
Делал вместо распечатки вывод в буфер ОЗУ, а уже потом распечатка. Быстрее чем 50 киловыборок за секунду не получается, меня совсем не устраивает.
Может посмотрите, да и свой симбиоз сделаете.
В той теме еще есть предложение использовать два дескриптора DMA. Я не пробовал.
С уважением, Виктор.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение durimar_13 »

Ограничение в 32 выборки связно, я думаю, с тем, что прерывание "завершение работы" DMA вырабатывает после того, как вычитает буфер FIFO ADC. А должно быть по завершению нужного нам количества передач. Но это уже вопрос к поддержке ;)
С уважением, Виктор.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение durimar_13 »

durimar_13 писал(а): 11 авг 2026, 07:25
Мерседес писал(а): 06 авг 2026, 10:00 Добрый день. вот такой незамысловатый алгоритм. алгоритм системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для микроконтроллера K1921VG1T. программа небольшая, текст прилагается. все вроде правильно. но буфер заполняется измеренными значениями только до 32 ячейки. дальше заполняется нулями. встречал в соседней теме подобное, но решения пока нет.
День добрый!
Бегло глянул в код. Но я неважный программист, я конструктор - любитель. Код похож на то что было у меня в теме, мне его Алиса Яндексовна предложила. Код выложен в теме "Описание работы DMA...". Там ограничений на количество измерений нет. Но... тормоза страшенные и виснет. Приходится кнопку резет использовать.
Делал вместо распечатки вывод в буфер ОЗУ, а уже потом распечатка. Быстрее чем 50 киловыборок за секунду не получается, меня совсем не устраивает.
Может посмотрите, да и свой симбиоз сделаете.
В той теме еще есть предложение использовать два дескриптора DMA. Я не пробовал.
Ах да, правильно тема называется "Описание DMA в РП К1921ВГ1Т".
С уважением, Виктор.
Мерседес
Сообщения: 37
Зарегистрирован: 05 авг 2026, 12:53
Предприятие: Каскад

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение Мерседес »

durimar_13 писал(а): 11 авг 2026, 07:31 Ограничение в 32 выборки связно, я думаю, с тем, что прерывание "завершение работы" DMA вырабатывает после того, как вычитает буфер FIFO ADC. А должно быть по завершению нужного нам количества передач. Но это уже вопрос к поддержке ;)
нет, прерывание от дма приходит по завершению. это проверено. буфер, который я заранее заполняю константой потом заполняется первые 32 значения измеренные, а далее - нулями.мто есть буфер заполнен полностью. а поддержке - это кого спросить?
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение durimar_13 »

С уважением, Виктор.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение durimar_13 »

Мерседес писал(а): 11 авг 2026, 07:53 нет, прерывание от дма приходит по завершению. это проверено. буфер, который я заранее заполняю константой потом заполняется первые 32 значения измеренные, а далее - нулями.мто есть буфер заполнен полностью. а поддержке - это кого спросить?
А вот это уже интересно. Я заполняю буфер изначально нулями, потом вижу 32 заполненных другими значениями и думаю, что это просто DMA остановился....
С уважением, Виктор.
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение RabidRabbit »

durimar_13 писал(а): 11 авг 2026, 15:47 Я заполняю буфер изначально нулями, потом вижу 32 заполненных другими значениями и думаю, что это просто DMA остановился....
Потому частенько заполняют буфер не нулями, а, скажем определённым значением, например 0xABBA или 0xBEEF :)
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение durimar_13 »

Если тема еще актуальна.
В теме Описание DMA в РП К1921ВГ1Т есть ответ от техподдержки и мой комментарий к нему.
С уважением, Виктор.
Мерседес
Сообщения: 37
Зарегистрирован: 05 авг 2026, 12:53
Предприятие: Каскад

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение Мерседес »

durimar_13 писал(а): 13 авг 2026, 19:32 Если тема еще актуальна.
В теме Описание DMA в РП К1921ВГ1Т есть ответ от техподдержки и мой комментарий к нему.
.............. посмотрел тот пример, если конечно правильно смотрел. повторить не могу, у меня другая аппаратная часть. но цепочку дескрипторов пробовал. порциями по 32 значения цепочка работает, справляется хорошо. но задать больший размер не получилось.///// неплохо бы пример без усложнений. не 16 каналов а только один. а так...... логика там
dma_flg изначально = 0

TMR1 запускает АЦП каждую секунду

DMA передает данные в adc_res

При завершении передачи DMA генерирует прерывание

В обработчике устанавливается dma_flg = 1

Главный цикл видит флаг и выводит данные в UART............. ну все вроде красиво и правильно.
Ответить

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