Описание DMA в РП К1921ВГ1Т
Модераторы: ea, dav, bkolbov, Alis, pip, _sva_
-
durimar_13
- Сообщения: 76
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Описание DMA в РП К1921ВГ1Т
Здравствуйте, уважаемые!
Пытаюсь осилить описание работы контроллера DMA, плохо понимаю, и вижу, что явно чего то недостает.
Например.
Неоднократно упоминаются цепочки дескрипторов, расположенные в памяти.
Но мне не понятно, как их туда разместить.
С одиночным дескриптором тоже есть вопросы.
1. На странице 200 указанного РП упоминается регистр BURST_MAX_SIZE, но нигде нет его описания.
2. Приложение A.8.1 Регистры каналов DMA.
NDTL – регистр размера буфера. Считаю, что название регистра
подобрано неудачно. Можно подумать, что речь идет о внутреннем буфере DMA, размером 64 байта.
В действительности - это количество передач для первого дескриптора. Собственно, так и написано в графе
"Описание" этого регистра: "Количество передач. Значение указано в байтах и не имеет
ограничений по размеру" Хотя смысла второго предложения я так и не понял. Длина этого поля - 10 бит. Кто мне может объяснить, что это значит: "не имеет ограничений" и "значение указано в байтах".
Очень прошу улучшить описание DMA. Участники программы DEVBOARDS не имеют возможности долго ждать. На разработку остался месяц.
Пытаюсь осилить описание работы контроллера 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Т
durimar_13 писал(а): ↑29 июл 2026, 23:38 Неоднократно упоминаются цепочки дескрипторов, расположенные в памяти.
Но мне не понятно, как их туда разместить.
Код: Выделить всё
__attribute__((aligned(0x10))) DMA_Channel_TypeDef descs[42];
-
durimar_13
- Сообщения: 76
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: Описание DMA в РП К1921ВГ1Т
Эээ... . Спасибо, конечно.RabidRabbit писал(а): ↑30 июл 2026, 09:54durimar_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Т
1. Можно поступить как написано в РП, а именно
и действительно NEXT_ADDR = &descs[0]12.3 Цепочки дескрипторов DMA писал(а): Последовательность настройки:
1) Запишите цепочку дескрипторов в память;
2) В регистре CH[n].NDTL установите BUFFER_SIZE = 0;
3) В регистре CH[n].CONFIG установите CMD_SET_INT = 0, CMD_LAST = 0 и NEXT_ADDR = адресу первого дескриптора в памяти.
2. Для "никаких" программистов вроде как существует "вэйп-кодинг" (если не ошибаюсь). Обращаетесь к ЫЫ, и оно Вам всё сразу напишет.
-
durimar_13
- Сообщения: 76
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: Описание DMA в РП К1921ВГ1Т
RabidRabbit, Спасибо большое!
Вижу Ваши проекты на Gitflic, значит Вы точно сможете мне растолковать, что со мной не так.
Я взял пример из k1921vg1t_sdk который зовется adc_tmr_dma и немного переиначил его под
свои нужды:
1. Циклический режим с задержками
2. Программный запуск секвенсора 0
3. Передача результатов АЦП в буфер ОЗУ 2048 байт ч/з DMA. В примере было - 64 байта
4. Прерывания не использую, ловлю состояние флагов
Как не стараюсь, буфер заполняется только на то значение, которое я указываю как уровень заполнения FIFO.
В примере было 16 - заполняется 16 элементов в буфере ОЗУ, если поставить 1 - будет один элемент, если 32 - будет 32 заполнено.
Больше того, это происходит только в первой итерации главного цикла. В последующих - буфер ОЗУ не заполняется вовсе.
Что за....?
Не думаю, что мне нужна цепочка дескрипторов, но пробовал и ее, как Вы и написали.
Не получается у меня!
Если Вы возьметесь рассмотреть мой код и указать на ошибку, я выложу весь.
Помогите, пожалуйста!
ЗЫ: Про ВАЙБ-кодинг слышал, ИИ по имени Алиса помогает мне иногда, но не в этот раз.
Вижу Ваши проекты на 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
- Сообщения: 76
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: Описание DMA в РП К1921ВГ1Т
Ну Алиса сказала, где искать, даже предложила мне новый код.
Только не помогло. Зато я видел, что NDTL_bit.BUFFER_SIZE вместо того, чтобы уменьшаться, как сказала Алиса, увеличился. Был 127, стал 275, очень странное значение
А...
Только не помогло. Зато я видел, что NDTL_bit.BUFFER_SIZE вместо того, чтобы уменьшаться, как сказала Алиса, увеличился. Был 127, стал 275, очень странное значение
А...
С уважением, Виктор.
-
RabidRabbit
- Сообщения: 214
- Зарегистрирован: 10 июн 2025, 12:11
- Предприятие: HomeWork
Re: Описание DMA в РП К1921ВГ1Т
Выкладывайте, по возможности упакованным 7-zip. Посмотрю, но ничего обещать не могуdurimar_13 писал(а): ↑01 авг 2026, 05:53 Если Вы возьметесь рассмотреть мой код и указать на ошибку, я выложу весь.
-
durimar_13
- Сообщения: 76
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: Описание DMA в РП К1921ВГ1Т
Спасибо большое!RabidRabbit писал(а): ↑01 авг 2026, 14:19Выкладывайте, по возможности упакованным 7-zip. Посмотрю, но ничего обещать не могуdurimar_13 писал(а): ↑01 авг 2026, 05:53 Если Вы возьметесь рассмотреть мой код и указать на ошибку, я выложу весь.Плата с ВГ7Т мне скоро приедет, там такой же контроллер DMA.
Подготовлю и выложу, в 7-zip
С уважением, Виктор.
-
durimar_13
- Сообщения: 76
- Зарегистрирован: 26 фев 2025, 13:06
- Предприятие: Radioamateur
- Откуда: Свердловская обл.
Re: Описание DMA в РП К1921ВГ1Т
Вот как и обещал. Проект целиком и скрин инструмента.
Если, что, я не в обиде.
Спасибо!
Спасибо!
С уважением, Виктор.
