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

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

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

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

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

Сообщение durimar_13 »

Здравствуйте, уважаемые!
Пытаюсь осилить описание работы контроллера DMA, плохо понимаю, и вижу, что явно чего то недостает.
Например.
Неоднократно упоминаются цепочки дескрипторов, расположенные в памяти.
Но мне не понятно, как их туда разместить.

С одиночным дескриптором тоже есть вопросы.
1. На странице 200 указанного РП упоминается регистр BURST_MAX_SIZE, но нигде нет его описания.
2. Приложение A.8.1 Регистры каналов DMA.
NDTL – регистр размера буфера. Считаю, что название регистра
подобрано неудачно. Можно подумать, что речь идет о внутреннем буфере DMA, размером 64 байта.
В действительности - это количество передач для первого дескриптора. Собственно, так и написано в графе
"Описание" этого регистра: "Количество передач. Значение указано в байтах и не имеет
ограничений по размеру" Хотя смысла второго предложения я так и не понял. Длина этого поля - 10 бит. Кто мне может объяснить, что это значит: "не имеет ограничений" и "значение указано в байтах".

Очень прошу улучшить описание DMA. Участники программы DEVBOARDS не имеют возможности долго ждать. На разработку остался месяц.
С уважением, Виктор.
RabidRabbit
Сообщения: 214
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

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

Сообщение RabidRabbit »

durimar_13 писал(а): 29 июл 2026, 23:38 Неоднократно упоминаются цепочки дескрипторов, расположенные в памяти.
Но мне не понятно, как их туда разместить.

Код: Выделить всё

__attribute__((aligned(0x10))) DMA_Channel_TypeDef descs[42];
На счёт выравнивания в РП единого мнения нет :) Так что на всякий случай пусть будет 16.
durimar_13
Сообщения: 76
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

RabidRabbit писал(а): 30 июл 2026, 09:54
durimar_13 писал(а): 29 июл 2026, 23:38 Неоднократно упоминаются цепочки дескрипторов, расположенные в памяти.
Но мне не понятно, как их туда разместить.

Код: Выделить всё

__attribute__((aligned(0x10))) DMA_Channel_TypeDef descs[42];
На счёт выравнивания в РП единого мнения нет :) Так что на всякий случай пусть будет 16.
Эээ... . Спасибо, конечно.
Вот только программист я никакой, я конструктор - любитель.
Хорошо, сделаю я такое объявление массива. Потом, видимо, как в РП написано:
" В регистре CH[n].CONFIG установите CMD_SET_INT = 0, CMD_LAST = 0 и NEXT_ADDR = адресу первого дескриптора в памяти.",
нужно в поле NEXT_ADDR занести значение адреса элемента descs[0].
Я правильно понял?
С уважением, Виктор.
RabidRabbit
Сообщения: 214
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

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

Сообщение RabidRabbit »

durimar_13 писал(а): 30 июл 2026, 15:48 Потом, видимо, как в РП написано:
1. Можно поступить как написано в РП, а именно
12.3 Цепочки дескрипторов DMA писал(а): Последовательность настройки:
1) Запишите цепочку дескрипторов в память;
2) В регистре CH[n].NDTL установите BUFFER_SIZE = 0;
3) В регистре CH[n].CONFIG установите CMD_SET_INT = 0, CMD_LAST = 0 и NEXT_ADDR = адресу первого дескриптора в памяти.
и действительно NEXT_ADDR = &descs[0]

2. Для "никаких" программистов вроде как существует "вэйп-кодинг" (если не ошибаюсь). Обращаетесь к ЫЫ, и оно Вам всё сразу напишет.
durimar_13
Сообщения: 76
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

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

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

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

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

Если Вы возьметесь рассмотреть мой код и указать на ошибку, я выложу весь.
Помогите, пожалуйста!
ЗЫ: Про ВАЙБ-кодинг слышал, ИИ по имени Алиса помогает мне иногда, но не в этот раз. ;)
С уважением, Виктор.
durimar_13
Сообщения: 76
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Я поставил задачу Алисе Яндексовне и она (о чудо!) расписала мне, в чем я могу ошибаться, и даже наваяла код.
Счас буду в это влезать.
С уважением, Виктор.
durimar_13
Сообщения: 76
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Ну Алиса сказала, где искать, даже предложила мне новый код.
Только не помогло. Зато я видел, что NDTL_bit.BUFFER_SIZE вместо того, чтобы уменьшаться, как сказала Алиса, увеличился. Был 127, стал 275, очень странное значение ;)
А...
С уважением, Виктор.
RabidRabbit
Сообщения: 214
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

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

Сообщение RabidRabbit »

durimar_13 писал(а): 01 авг 2026, 05:53 Если Вы возьметесь рассмотреть мой код и указать на ошибку, я выложу весь.
Выкладывайте, по возможности упакованным 7-zip. Посмотрю, но ничего обещать не могу :) Плата с ВГ7Т мне скоро приедет, там такой же контроллер DMA.
durimar_13
Сообщения: 76
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

RabidRabbit писал(а): 01 авг 2026, 14:19
durimar_13 писал(а): 01 авг 2026, 05:53 Если Вы возьметесь рассмотреть мой код и указать на ошибку, я выложу весь.
Выкладывайте, по возможности упакованным 7-zip. Посмотрю, но ничего обещать не могу :) Плата с ВГ7Т мне скоро приедет, там такой же контроллер DMA.
Спасибо большое!
Подготовлю и выложу, в 7-zip
С уважением, Виктор.
durimar_13
Сообщения: 76
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Вот как и обещал. Проект целиком и скрин инструмента.
raml1t.7z
(1.04 МБ) 36 скачиваний
Если, что, я не в обиде.
Спасибо!
С уважением, Виктор.
Ответить

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