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

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

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

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

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

Сообщение RabidRabbit »

Самое первое, за что цепляется глаз: Вы не ставите флаг CMD_LAST, так что по завершении передачи по установленным параметрам контроллер DMA пытается подгрузить следующий дескриптор с адреса 0x0 (что в поле CONFIG.NEXT_ADDR).
durimar_13
Сообщения: 70
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

За инфу спасибо!
Это мне ИИ по имени Алиса Яндексовна посоветовала. Поначалу у меня было не так.
Счас вернусь и посмотрю, что будет.
С уважением, Виктор.
durimar_13
Сообщения: 70
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Вернул в предыдущее состояние. Такое уже было. И это не то, что я хочу.
Скрин изменений в прицепе.
Скрин инструмента 26-08-02.7z
(67.68 КБ) 23 скачивания
С уважением, Виктор.
durimar_13
Сообщения: 70
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Вот еще прицепил
CONFIG`s.7z
(89.1 КБ) 22 скачивания
состояния регистра CONFIG DMA канала 0
С уважением, Виктор.
durimar_13
Сообщения: 70
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Вот еще скрин в прицепе, где видно, что перед второй итерацией флаги активного состояния канала не установились.
Тем не менее DMA отработал и заполнил 32 элемента в буфере ОЗУ. Я не понимаю, что происходит.
С уважением, Виктор.
durimar_13
Сообщения: 70
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Чтобы не сомневаться, я подал на вход канала 0 напряжение 3,3 вольта. Значения, похожие на правду.
Подано напряжение 3.3 вольта.bmp.7z
(4.82 КБ) 25 скачиваний
С уважением, Виктор.
RabidRabbit
Сообщения: 213
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

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

Сообщение RabidRabbit »

Я немного уже запутался :) Не затруднит ли Вас озвучить, скажем так, "ТЗ"? Т.е. что должно работать и как?
Например: с одного входа АЦП непрерывно получать отсчёты с периодом таким-то, складывать в ОЗУ по N штук, использовать два буфера по N отсчётов и циклически переключаться между ними.
durimar_13
Сообщения: 70
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Добрый день!
Значит, ТЗ - Так Задумано.
Одна из функций этого проекта - по запросу извне делать непрерывный множественный опрос (захват) аналоговых каналов со скоростью выборки АЦП, значение которой задается извне до начала захвата. Это основа для осциллографа. Результаты передаются в буфер ОЗУ с использованием DMA. Затем эти данные передаются в дальнейшую обработку. Важное требование - выборки должны идти непрерывно, без пропусков.
Один из простых способов регулировать скорость выборки - это использовать циклический режим АЦП с задержками между запусками. Эти задержку очень просто изменять, даже на лету, т.е. не останавливая опрос каналов. Можно, конечно, использовать запуск АЦП по таймеру, но это хуже для меня.
Подобный алгоритм работает уже в двух моих проектах: для ВГ015 и Baikal-U

Как должна работать эта программа.

В вечном main цикле функция fill_UBUFF() ожидает строку от UART0.
После получения строки должен делаться ее разбор (parser) на элементы настройки. Сейчас это выключено.
Сейчас любая вводимая через UART0 строка понимается как число - количество тактов ACLK - задержка между запусками.
Функция scope() - главная в осциллографе, делает ОДИН захват, количество измерений в захвате определяется длиной CAPBUFF_SIZE буфера CAPBUFF. Это количество можно программно менять. Но пока, чтобы не использовать цепочки дескрипторов, ограничимся максимально возможным количеством передач, которое можно записать в 10-битное поле BUFFER_SIZE регистра NDTL - регистра количества передач. Хотя в РП он называется "Регистр размера буфера", что не совсем верно.

Теперь запускаем DMA. DMA ждет запроса от АЦП, так настроено в ADC_init.
Запускаем АЦП.
Считывание результатов из FIFO сексенсора DMA начинает, когда в буфере будет не менее настроенного количества элементов (сейчас 16). Дальше DMA должен "смотреть" есть ли в буфере данные и считывать их. Потом эти данные DMA записывает в очередной элемент массива CAPBUFF. Когда все количество элементов, указанное в поле BUFFER_SIZE регистра NDTL будет передано, DMA должен остановиться. Но не раньше. Признаком завершения всех передач являются нулевые значения в полях состояния DMA ((DMA->CH[0].CH_STATUS_bit.CH_RD_ACTIVE и DMA->CH[0].CH_STATUS_bit.CH_WR_ACTIVE).
Дальше просто вывод результатов захвата.
Есть вопросы - задавайте!
С уважением, Виктор.
RabidRabbit
Сообщения: 213
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

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

Сообщение RabidRabbit »

К сожалению, в документации по DMA не нашёл, как устанавливается разрядность данных для записи/чтения. Пока мне не понятно, как это сделать, а значит и ничего предложить не сумею.
durimar_13
Сообщения: 70
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

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

Сообщение durimar_13 »

Ну, ничего страшного.
Отрицательный результат - тоже результат.
Большое Вам спасибо, хотя бы за попытку!
С уважением, Виктор.
Ответить

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