работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для ми
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для ми
Добрый день. вот такой незамысловатый алгоритм. алгоритм системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для микроконтроллера K1921VG1T. программа небольшая, текст прилагается. все вроде правильно. но буфер заполняется измеренными значениями только до 32 ячейки. дальше заполняется нулями. встречал в соседней теме подобное, но решения пока нет.
- Вложения
-
- main.c
- (10.72 КБ) 114 скачиваний
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
День добрый!Мерседес писал(а): ↑06 авг 2026, 10:00 Добрый день. вот такой незамысловатый алгоритм. алгоритм системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для микроконтроллера K1921VG1T. программа небольшая, текст прилагается. все вроде правильно. но буфер заполняется измеренными значениями только до 32 ячейки. дальше заполняется нулями. встречал в соседней теме подобное, но решения пока нет.
Бегло глянул в код. Но я неважный программист, я конструктор - любитель. Код похож на то что было у меня в теме, мне его Алиса Яндексовна предложила. Код выложен в теме "Описание работы DMA...". Там ограничений на количество измерений нет. Но... тормоза страшенные и виснет. Приходится кнопку резет использовать.
Делал вместо распечатки вывод в буфер ОЗУ, а уже потом распечатка. Быстрее чем 50 киловыборок за секунду не получается, меня совсем не устраивает.
Может посмотрите, да и свой симбиоз сделаете.
В той теме еще есть предложение использовать два дескриптора DMA. Я не пробовал.
С уважением, Виктор.
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
Ограничение в 32 выборки связно, я думаю, с тем, что прерывание "завершение работы" DMA вырабатывает после того, как вычитает буфер FIFO ADC. А должно быть по завершению нужного нам количества передач. Но это уже вопрос к поддержке 
С уважением, Виктор.
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
Ах да, правильно тема называется "Описание DMA в РП К1921ВГ1Т".durimar_13 писал(а): ↑11 авг 2026, 07:25День добрый!Мерседес писал(а): ↑06 авг 2026, 10:00 Добрый день. вот такой незамысловатый алгоритм. алгоритм системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для микроконтроллера K1921VG1T. программа небольшая, текст прилагается. все вроде правильно. но буфер заполняется измеренными значениями только до 32 ячейки. дальше заполняется нулями. встречал в соседней теме подобное, но решения пока нет.
Бегло глянул в код. Но я неважный программист, я конструктор - любитель. Код похож на то что было у меня в теме, мне его Алиса Яндексовна предложила. Код выложен в теме "Описание работы DMA...". Там ограничений на количество измерений нет. Но... тормоза страшенные и виснет. Приходится кнопку резет использовать.
Делал вместо распечатки вывод в буфер ОЗУ, а уже потом распечатка. Быстрее чем 50 киловыборок за секунду не получается, меня совсем не устраивает.
Может посмотрите, да и свой симбиоз сделаете.
В той теме еще есть предложение использовать два дескриптора DMA. Я не пробовал.
С уважением, Виктор.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
нет, прерывание от дма приходит по завершению. это проверено. буфер, который я заранее заполняю константой потом заполняется первые 32 значения измеренные, а далее - нулями.мто есть буфер заполнен полностью. а поддержке - это кого спросить?durimar_13 писал(а): ↑11 авг 2026, 07:31 Ограничение в 32 выборки связно, я думаю, с тем, что прерывание "завершение работы" DMA вырабатывает после того, как вычитает буфер FIFO ADC. А должно быть по завершению нужного нам количества передач. Но это уже вопрос к поддержке![]()
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
А вот это уже интересно. Я заполняю буфер изначально нулями, потом вижу 32 заполненных другими значениями и думаю, что это просто DMA остановился....
С уважением, Виктор.
-
RabidRabbit
- Сообщения: 254
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
Потому частенько заполняют буфер не нулями, а, скажем определённым значением, например 0xABBA или 0xBEEFdurimar_13 писал(а): ↑11 авг 2026, 15:47 Я заполняю буфер изначально нулями, потом вижу 32 заполненных другими значениями и думаю, что это просто DMA остановился....
-
durimar_13
- Сообщения: 111
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
Если тема еще актуальна.
В теме Описание DMA в РП К1921ВГ1Т есть ответ от техподдержки и мой комментарий к нему.
В теме Описание DMA в РП К1921ВГ1Т есть ответ от техподдержки и мой комментарий к нему.
С уважением, Виктор.
Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл
.............. посмотрел тот пример, если конечно правильно смотрел. повторить не могу, у меня другая аппаратная часть. но цепочку дескрипторов пробовал. порциями по 32 значения цепочка работает, справляется хорошо. но задать больший размер не получилось.///// неплохо бы пример без усложнений. не 16 каналов а только один. а так...... логика тамdurimar_13 писал(а): ↑13 авг 2026, 19:32 Если тема еще актуальна.
В теме Описание DMA в РП К1921ВГ1Т есть ответ от техподдержки и мой комментарий к нему.
dma_flg изначально = 0
TMR1 запускает АЦП каждую секунду
DMA передает данные в adc_res
При завершении передачи DMA генерирует прерывание
В обработчике устанавливается dma_flg = 1
Главный цикл видит флаг и выводит данные в UART............. ну все вроде красиво и правильно.
