работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для ми

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

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

ea
Администратор
Сообщения: 136
Зарегистрирован: 10 окт 2014, 09:08

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение ea »

Мерседес писал(а): 06 авг 2026, 10:00 Добрый день. вот такой незамысловатый алгоритм. алгоритм системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) для микроконтроллера K1921VG1T. программа небольшая, текст прилагается. все вроде правильно. но буфер заполняется измеренными значениями только до 32 ячейки. дальше заполняется нулями. встречал в соседней теме подобное, но решения пока нет.
Добрый день.

В данной ситуации рекомендуем использовать цепочку дескрипторов DMA размером с порог заполнения буфера секвенсора в байтах.
Так для ADC->SEQ[0].SDMACTL_bit.WMARK = ADC_SEQ_SDMACTL_WMARK_Level16 необходимо использовать размер 32 байта.

Данная реализация представлена в обновленном примере projects/NIIET-DEV-K1921VG1T/adc_tmr_dma из репозитория https://gitflic.ru/project/niiet/k1921vg1t_sdk
Мерседес
Сообщения: 37
Зарегистрирован: 05 авг 2026, 12:53
Предприятие: Каскад

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

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

Добрый день.

В данной ситуации рекомендуем использовать цепочку дескрипторов DMA размером с порог заполнения буфера секвенсора в байтах.
//////////////это понятно. такая реализация опробована мной, она работает. для заполнения буфера размером 256 значений реализована цепочка из 8 дескрипторов. но все же - описанное мной поведение - особенность аппаратной части которую невозможно изменить, или иное?
Мерседес
Сообщения: 37
Зарегистрирован: 05 авг 2026, 12:53
Предприятие: Каскад

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

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

фрагмент кода примера: // Задаем размер передаваемых данных
DMA->CH[0].STATIC0_bit.RD_BURST_MAX = 2; // Чтение 32-разрядных значений
DMA->CH[0].STATIC0_bit.RD_INCR = 0; // Не инкрементируем, поскольку DMA будет читать данные из регистра
DMA->CH[0].STATIC1_bit.WR_BURST_MAX = 2; // Запись 16-разрядных значений
................. если я верно понял, - согласно документа, RD_BURST_MAX это максимальное количество байт в пакете чтения. то есть 2 - это два байта. для АЦП достаточно. Чтение для 32-разрядных значений в данном случае опечатка?
RabidRabbit
Сообщения: 259
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение RabidRabbit »

Представьте себе, как офигеет DMA, если поставить RD_BURST_MAX != WR_BURST_MAX - на какое количество уменьшать NDTL ;)
Мерседес
Сообщения: 37
Зарегистрирован: 05 авг 2026, 12:53
Предприятие: Каскад

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

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

Мерседес писал(а): 20 авг 2026, 12:40 Добрый день.

В данной ситуации рекомендуем использовать цепочку дескрипторов DMA размером с порог заполнения буфера секвенсора в байтах.
////////////// из этого следует, что исходя из разрядности поля BUFFER_SIZE в регистре NDTL 10 бит максимальный размер буфера ограничен значением 1024 байта.
RabidRabbit
Сообщения: 259
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение RabidRabbit »

Мерседес писал(а): 20 авг 2026, 17:44 из этого следует, что исходя из разрядности поля BUFFER_SIZE в регистре NDTL 10 бит максимальный размер буфера ограничен значением 1024 байта.
Угу, но только при перегонке память-память. И не 1024, а 1023.
При работе память-оборудование "размер буфера" ограничен ёмкостью буфера FIFO того самого оборудования, о чём, впрочем, Вам недвусмысленно уже написали.
RabidRabbit
Сообщения: 259
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение RabidRabbit »

С моей колокольни это выглядит так: либо взяли IP-блок для DMA не глядя на гитхабе, либо "творчески переработали"; в любом случае блок DMA во всей серии ВГ{1,3,5,7}T - это сплошное недоразумение. Достаточно, кстати, заглянуть в Errata.
RabidRabbit
Сообщения: 259
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение RabidRabbit »

Вот смотрю я на SPI и думаю, что похоже на каждые 8 байтов передачи по SPI мне потребуется ровно 1 дескриптор (16 байтов) в ОЗУ. Т.е. если передавать даже по 32 бита, то 32 КиБ ОЗУ обеспечат передачу 64 КиБ данных через SPI. Т.е. о заполнении экрана 320х240 (запустил и забыл) можно не рассчитывать, тупо не хватит оперативки на дескрипторы.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

Сообщение durimar_13 »

RabidRabbit писал(а): 20 авг 2026, 20:03 Угу, но только при перегонке память-память. И не 1024, а 1023.
При работе память-оборудование "размер буфера" ограничен ёмкостью буфера FIFO того самого оборудования, о чём, впрочем, Вам недвусмысленно уже написали.
Вот, вот! У АЦП этот буфер 32 по 12 бит. Вот и приехали.
Там у этого DMA, похоже, еще полно косяков.
Я столько времени убил, пытаясь заставить его работать, как мне надо. Но сих пор - ничего хорошего.
И только RabidRabbit быстро его раскусил, честь ему и уважуха!
С уважением, Виктор.
Мерседес
Сообщения: 37
Зарегистрирован: 05 авг 2026, 12:53
Предприятие: Каскад

Re: работа алгоритма системы сбора данных с АЦП с использованием двойной буферизации и прямого доступа к памяти (DMA) дл

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

так уж совсем однозначно я бы ругать не стал. при размере буфера 256 - 512 отсчетов с цепочкой дескрипторов все вполне работает, и скорость преобразования вполне приличная. что касается работы дма с другим оборудованием, - скоро попробую цап.
Ответить

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