Описание DMA в РП К1921ВГ1Т

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

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

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

Re: Описание DMA в РП К1921ВГ1Т

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

32-хразрядный таймер0 пинает АЦПэшный секвенсор0 100 раз в секунду.

секвенсор0 АЦП настроен на запуск от пинка таймера0, за один запуск восемь измерений одного канала (на плате подключен к пользовательской кнопке, подтянут к питанию, при нажатии замыкается на "землю"), запрос в сторону DMA после 32 измерений.

DMA настроен на "двойной буфер" (два дескриптора закольцованы, как я до этого предлагал), по прерыванию от канала DMA инкрементируется глобальная переменная, и по ней в основном цикле идёт вывод в UART.

жамкаю кнопку - показания меняются :)
судя по описанию - одно нажатие -32 измерения? второе нажатие - ещё 32? если так, это работает. или я не так понял?........... и да, извините если беспардонно залез в тему. у меня абсолютно та же "болячка"
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: Описание DMA в РП К1921ВГ1Т

Сообщение RabidRabbit »

Мерседес писал(а): 14 авг 2026, 14:47 судя по описанию - одно нажатие -32 измерения? второе нажатие - ещё 32? если так, это работает. или я не так понял?........... и да, извините если беспардонно залез в тему. у меня абсолютно та же "болячка"
Нет, показания валятся в консоль непрерывно, при нажатии кнопки видно, что они меняются. Кусок лога прилагаю.
Вложения
putty.log.txt.7z
(3 КБ) 112 скачиваний
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: Описание DMA в РП К1921ВГ1Т

Сообщение RabidRabbit »

Вход с кнопкой использован только потому, что на нём легко менять потенциал :)
Мерседес
Сообщения: 37
Зарегистрирован: 05 авг 2026, 12:53
Предприятие: Каскад

Re: Описание DMA в РП К1921ВГ1Т

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

но у вас ведь так - → Читает из регистра SFIFO
→ Пишет в текущий буфер (g_adc_buf0 или g_adc_buf1)
→ Когда буфер заполнен (32 значения) → ПРЕРЫВАНИЕ
→ Автоматически переключается на следующий дескриптор (другой буфер).
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: Описание DMA в РП К1921ВГ1Т

Сообщение RabidRabbit »

Мерседес писал(а): 14 авг 2026, 15:19 но у вас ведь так
Вопроса не понял :(
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: Описание DMA в РП К1921ВГ1Т

Сообщение RabidRabbit »

У меня другая непонятка.
Например, та же самая картина, из АЦП читаем, в память пишем.
По всему получается, что получив пинок от секвенсора АЦП, канал DMA производит чтение из FIFO АЦП ровно BUFFER_SIZE/RD_BURST_MAX раз, хотя в случае АЦП в FIFO данных будет только ADC_SEQ_SDMACTL_WMARK_Level.
Т.е. поставив передачу 48 байтов от АЦП в одном дескрипторе, например при ADC_SEQ_SDMACTL_WMARK_Level16 мы получим 16 значений от АЦП и 32 нуля плюс завершение работы дескриптора.

Или я чего-то не понимаю, или контроллер DMA как минимум в ВГ7Т практически бесполезен.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: Описание DMA в РП К1921ВГ1Т

Сообщение durimar_13 »

Мерседес писал(а): 14 авг 2026, 14:47 судя по описанию - одно нажатие -32 измерения? второе нажатие - ещё 32? если так, это работает. или я не так понял?........... и да, извините если беспардонно залез в тему. у меня абсолютно та же "болячка"
Дык! На плате у него есть кнопка, которая замыкает вход не землю. Если весь вывод посмотреть, там появляются нули при нажатии кнопки. Это признак того, что связка ADC - DMA правильно читает и передает канал.
С уважением, Виктор.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: Описание DMA в РП К1921ВГ1Т

Сообщение durimar_13 »

Меня вообще не устраивает 32 замера за одну итерацию. Мне надо хотя бы 1000 и подряд, без неуправляемых задержек между выборками. Больше того, я должен управлять количеством тактов от замера до замера. И в этом проблема. Максимально, что отрабатывает - это 32 замера правильных, это то, что можно разместить в FIFO секвенсора. Пока ничего не выходит. Варианты связки ADC-DMA с использованием: двойных секвенсоров, цепочек секвенсоров, запуски по событиям таймера, циклическая работа АЦП с задержками между запусками - результат один. Максимум, что хорошо выдает любое количество замеров подряд, это вариант двойного выходного буфера, каждый длиной 32 16-ти разрядных результатов и ADC в циклическом режиме с задержками. Но там есть такие неуправляемые задержки, что правильной картины замеров я не получаю все равно.
Тех поддержка работает над моим вопросом. (Есть поддержка тех, а есть - этих :D )
Последний раз редактировалось durimar_13 14 авг 2026, 21:17, всего редактировалось 2 раза.
С уважением, Виктор.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: Описание DMA в РП К1921ВГ1Т

Сообщение durimar_13 »

RabidRabbit писал(а): 14 авг 2026, 20:39 У меня другая непонятка.
У ВГ1Т такая же беда. Так что Вы были правы, когда сказали, что ADC в ВГ1Т и ВГ7Т одинаковые. Похоже, то же можно сказать и о DMA ;)
С уважением, Виктор.
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: Описание DMA в РП К1921ВГ1Т

Сообщение RabidRabbit »

durimar_13 писал(а): 14 авг 2026, 21:10 Меня вообще не устраивает 32 замера за одну итерацию. Мне надо хотя бы 1000 и подряд, без неуправляемых задержек между выборками.
Тут можно предложить следующее для 1024 отсчётов подряд:
берём 32 дескриптора (каждый на передачу 64 байтов, т.е. 32 отсчётов АЦП) и связываем их в цепочку; у последнего дескриптора в CHANNEL_CFG взведены два бита: LAST и INTEN; DST_PTR первого указывает на начало буфера в 1024 отсчёта, у следующего - указывает на 32-ой элемент буфера и так далее; у секвенсора настраиваем ADC_SEQ_SDMACTL_WMARK_Level32; запустив эту хламиду, получим прерывание от канала DMA после чтения всех 1024 отсчётов.
Да, мегакостыль :) Но должно сработать.
Ответить

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