Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 23
1

ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет?

29.04.2019, 19:18. Просмотров 702. Ответов 3
Метки нет (Все метки)

Добрый день.

Столкнулся с необходимостью писать большой объём данных АЦП с высокой скоростью. Каналов 8. Частота АЦП максимальная.
АЦП работает, NAND пишется, microSD тоже.
Но на данный момент реализовано следующим образом:
Есть буфер на 8192 байт (или 4096 16-ти битных регистров), так удобнее писать постранично в NAND.
По внешнему стробу запускается конвертация АЦП.
По заполнению и прерыванию от DMA в обработчике выключаю АЦП и копирую данные из DMA во временный буфер.
Затем снова запускаю АЦП. За время следующей конвертации каналов записываю страницу в NAND из временного буфера.
Время полного сбора данных примерно 10 секунд.
В конце сбора данных из NAND всё копируется и упаковывается в требуемом формате на microSD.
Есть ли путь чтобы без обработки прерывания из буфера DMA автоматом сливались данные в FSMC (NAND)?
Можно ли как-то настроить DMA и FSMC, чтобы сканирование каналов происходило без разрывов (пусть и маленьких)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2019, 19:18
Ответы с готовыми решениями:

STM32F4Discovery - ADC DMA и FSMC DMA
Привет всем. Вынужден опять обратиться за Вашей помощью :) Ситуация такая. 1. Дисплей...

Чтение SD карты через SDIO с DMA
Доброго времени суток. Есть STM32f103 с подключенной по SDIO карточкой. Сейчас читается в обычном...

stm32f4discovery + fsmc + dma
Добрый день! Коллеги, подскажите пожалуйста. Делаю связку stm32f4discovery + ssd1963 с завязкой...

FSMC + DMA + LCD + F103
Доброго времени суток. Есть МК STM32F103VCT6, к нему подключен TFT дисплей 320х240. Подключен...

3
823 / 501 / 164
Регистрация: 30.07.2015
Сообщений: 1,655
29.04.2019, 20:21 2
Владислав_Минск, у DMA есть прерывание на середине передачи. Набираете половину отсчетов, по прерыванию начинаете первую половину обрабатывать, в это время заполняется вторая половина массива. Дальше прерывание на завершение передачи, обрабатываете вторую половину, пока заполняется первая.

Добавлено через 1 минуту
Можно буфер побольше сделать если времени на обработку не будет хватать. У 407 вроде RAM достаточно много

Добавлено через 23 минуты
Владислав_Минск, вообще, если я не ошибаюсь, доступ к внешней памяти через FSMC идет как к обычной внутренней памяти, так что думаю, что при желании можно попробовать писать сразу из АЦП в NAND через DMA, правда если в NAND можно по 16 бит за раз писать.

Добавлено через 1 минуту
Главное чтобы доступ обеспечивался одним мастером в одно время, то есть пока DMA пишет в область памяти, то нельзя в это время пытаться данные читать писать в NAND. Если это будет на постоянной основе, то придется все равно когда то останавливать оцифровку, чтобы поработать с данными.
1
0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 23
29.04.2019, 20:37  [ТС] 3
Действительно, я и забыл, про прерывание на половине. В обработчике флаг сбросил и отправил в NAND пока вторая половина сканируется.
Благодарю за идею, думаю это самый оптимальный вариант снятия данных без остановки.

Добавлено через 9 минут
NAND к сожалению 8 битная. Это несколько неудобно, учитывая, что регистры АЦП 16 бит.
FSMC действительно через память контроллера работает.
И вот этот момент как вариант прорабатывался.
По идее в NAND пишутся данные постранично. То есть в любом случае нужно дождаться заполнения буфера (объёмом страницы), а затем передать управление FSMC.
Но это опять-таки внесёт задержку пока буфер будет передан в NAND? И только потом АЦП сможет снова начать конвертацию?
0
823 / 501 / 164
Регистрация: 30.07.2015
Сообщений: 1,655
29.04.2019, 23:23 4
Владислав_Минск, Ну смотрите, так как размер данных не совпадает, значит прямо из АЦП в NAND мы явно писать напрямую не можем. Тогда мы берем один канал DMA и таскаем по 16 бит из периферии в память RAM контроллера. Скажем в буфер размером в 2 страницы NAND. Настраиваем прерывание на середине и конце.
По прерыванию в середине мы стартуем второй канал DMA по 8 бит данных в режиме mem to mem. Скорость DMA явно выше чем АЦП поэтому DMA точно успеет утащить первую половину пока вторая оцифровывается. Таким образом записываем первую страницу. По прерыванию конца оцифровки утаскиваем вторую страницу.
Даже наверное после записи одной страницы останется время проверить следующую страницу на наличие косяков.
В итоге у нас ядро вообще свободно получается, некий конвеер из АЦП в NAND. Вот только одна беда, как я уже и говорил, пока DMA дергает FSMC, то из основного цикла нам данные трогать лучше не стоит. То есть нам никак с ними не поработать, если только складировать то выглядит нормально
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2019, 23:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

STM32L151 + SDIO + DMA
Имеется девайс на STM32T151RD и SD карта. Посколько у этого процессора есть SDIO, решил подключить...

Dallas DS1820 - STM32F407VG [Stm32 + 1-wire + DMA]
Здравствуйте. Пишу свой быдлокод с игрищами и блудницами по данным статьям (первая | вторая) с...

Глюки SD карточки - STM32F407 + SDIO-DMA
Всем привет! Возникла проблема в виде периодических подвисаний SD карты во время записи...

ADC +DMA
может кому то понадобится буфер приема данных необходимо выравнивать по 32х битному типу


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.