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

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

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

RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

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

Сообщение RabidRabbit »

Редиски в чипыдэйле никак мне плату с ВГ7Т не отгрузят :) Может на этой неделе доедет всё же.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

RabidRabbit писал(а): 10 авг 2026, 10:35 Редиски в чипыдэйле никак мне плату с ВГ7Т не отгрузят :) Может на этой неделе доедет всё же.
8 штук деревянных! Ничего себе игрушечка...
С уважением, Виктор.
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

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

Сообщение RabidRabbit »

durimar_13 писал(а): 11 авг 2026, 07:06 8 штук деревянных! Ничего себе игрушечка...
Месяц без пива :)
ea
Администратор
Сообщения: 136
Зарегистрирован: 10 окт 2014, 09:08

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

Сообщение ea »

durimar_13 писал(а): 01 авг 2026, 05:53 RabidRabbit, Спасибо большое!
Вижу Ваши проекты на Gitflic, значит Вы точно сможете мне растолковать, что со мной не так.
Я взял пример из k1921vg1t_sdk который зовется adc_tmr_dma и немного переиначил его под
свои нужды:

1. Циклический режим с задержками
2. Программный запуск секвенсора 0
3. Передача результатов АЦП в буфер ОЗУ 2048 байт ч/з DMA. В примере было - 64 байта
4. Прерывания не использую, ловлю состояние флагов

Как не стараюсь, буфер заполняется только на то значение, которое я указываю как уровень заполнения FIFO.
В примере было 16 - заполняется 16 элементов в буфере ОЗУ, если поставить 1 - будет один элемент, если 32 - будет 32 заполнено.
Больше того, это происходит только в первой итерации главного цикла. В последующих - буфер ОЗУ не заполняется вовсе.
Что за....?

Не думаю, что мне нужна цепочка дескрипторов, но пробовал и ее, как Вы и написали.
Не получается у меня!

Если Вы возьметесь рассмотреть мой код и указать на ошибку, я выложу весь.
Помогите, пожалуйста!
ЗЫ: Про ВАЙБ-кодинг слышал, ИИ по имени Алиса помогает мне иногда, но не в этот раз. ;)

Добрый день.
По одному каналу DMA возможна пересылка данных более 1Кб при использовании цепочки дескрипторов DMA. При этом каждый дескриптор может переслать до 1023 байт.

Для этого необходимо указать, что это не последняя команда списка
DMA->CH[0].CONFIG = (0 << DMA_CH_CONFIG_CMD_LAST_Pos ) | // Сбрасываем флаг последней команды в списке
(1 << DMA_CH_CONFIG_CMD_SET_INT_Pos); // Разрешение прерывания, как только будет передан весь буфер

и записать адрес следующей команды в регистр DMA->CH[0].DST_PTR

Тип данных для структуры команд DMA (DMA_Channel_TypeDef) объявлен в файле "K1921VG1t.h"

Скорректируем пример "projects/NIIET-DEV-K1921VG1T/adc_tmr_dma" для передачи более 1Кб данных и обновим его в репозитории https://gitflic.ru/project/niiet/k1921vg1t_sdk.

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

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

Сообщение durimar_13 »

Добрый всем вечерочек!
Поработал с обновленным примером adc_tmr_dma. Здорово! Но не все.
В обновленном примере распечатывается только первые 16 результатов, как и было раньше.
А потому проблемы не видно.
Нам нужно 1000 и больше последовательных результатов.
Если в этом примере попытаться увидеть все 1000 замеров, то все равно правильными будут только 16,
только те, что хранились в FIFO при первом вызове DMA.
Есть какие соображения?
С уважением, Виктор.
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

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

Сообщение RabidRabbit »

durimar_13 писал(а): 13 авг 2026, 19:27 Есть какие соображения?
Соображений нет, но приехала плата с ВГ7Т, буду пробовать АЦП + ПДП.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

RabidRabbit писал(а): 13 авг 2026, 21:17
durimar_13 писал(а): 13 авг 2026, 19:27 Есть какие соображения?
Соображений нет, но приехала плата с ВГ7Т, буду пробовать АЦП + ПДП.
Доброе время суток!
Я рад за Вас! Ну, если что, решение опубликуйте, пожалуйста.
С уважением, Виктор.
Мерседес
Сообщения: 37
Зарегистрирован: 05 авг 2026, 12:53
Предприятие: Каскад

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

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

речь вот об этом примере? ............. Пример работы с АЦП последовательного приближения для K1921VG1T
* на плате NIIET-DEV-K1921VG1T
* Измерения внешних каналов АЦП с 0 по 15 с помощью секвенсора 0
* по запросу от TMR1
* Результаты АЦП пересылаются в массив adc_res с помощью цепочки
* дескрипторов DMA................Блоки в цепочке дескрипторов имеют размер 1022 байта (кроме последнего, который равен остатку — 4 байта........ если пример подходит под вашу реализацию аппаратной части, не могли бы вы его опробовать?
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Мерседес писал(а): 14 авг 2026, 00:16 речь вот об этом примере? ............. Пример работы с АЦП последовательного приближения для K1921VG1T
* на плате NIIET-DEV-K1921VG1T
* Измерения внешних каналов АЦП с 0 по 15 с помощью секвенсора 0
* по запросу от TMR1
* Результаты АЦП пересылаются в массив adc_res с помощью цепочки
* дескрипторов DMA................Блоки в цепочке дескрипторов имеют размер 1022 байта (кроме последнего, который равен остатку — 4 байта........ если пример подходит под вашу реализацию аппаратной части, не могли бы вы его опробовать?
Здравствуйте!
Пробовал уже.
Там в новом примере в коде остался рудимент - распечатка 16 результатов, а нам надо - полный массив.
Я поправил, но не получается у меня правильного результата. Письмо в поддержку написал вчера поздно вечером.
С уважением, Виктор.
RabidRabbit
Сообщения: 254
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

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

Сообщение RabidRabbit »

durimar_13 писал(а): 13 авг 2026, 22:41 Ну, если что, решение опубликуйте, пожалуйста.
Вот.

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

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

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

жамкаю кнопку - показания меняются :)
Ответить

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