0 / 0 / 0
Регистрация: 31.03.2016
Сообщений: 30
|
|
1 | |
ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет?29.04.2019, 19:18. Показов 2083. Ответов 3
Метки нет (Все метки)
Добрый день.
Столкнулся с необходимостью писать большой объём данных АЦП с высокой скоростью. Каналов 8. Частота АЦП максимальная. АЦП работает, NAND пишется, microSD тоже. Но на данный момент реализовано следующим образом: Есть буфер на 8192 байт (или 4096 16-ти битных регистров), так удобнее писать постранично в NAND. По внешнему стробу запускается конвертация АЦП. По заполнению и прерыванию от DMA в обработчике выключаю АЦП и копирую данные из DMA во временный буфер. Затем снова запускаю АЦП. За время следующей конвертации каналов записываю страницу в NAND из временного буфера. Время полного сбора данных примерно 10 секунд. В конце сбора данных из NAND всё копируется и упаковывается в требуемом формате на microSD. Есть ли путь чтобы без обработки прерывания из буфера DMA автоматом сливались данные в FSMC (NAND)? Можно ли как-то настроить DMA и FSMC, чтобы сканирование каналов происходило без разрывов (пусть и маленьких)?
0
|
29.04.2019, 19:18 | |
Ответы с готовыми решениями:
3
STM32F4Discovery - ADC DMA и FSMC DMA Нет прерывания от DMA в режиме ADC DMA ADC+DMA+TIM Cube HAL или-или stm32f407+ADC+DMA. Проблема с DMA Чтение SD карты через SDIO с DMA |
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
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
Сообщений: 30
|
|
29.04.2019, 20:37 [ТС] | 3 |
Действительно, я и забыл, про прерывание на половине. В обработчике флаг сбросил и отправил в NAND пока вторая половина сканируется.
Благодарю за идею, думаю это самый оптимальный вариант снятия данных без остановки. Добавлено через 9 минут NAND к сожалению 8 битная. Это несколько неудобно, учитывая, что регистры АЦП 16 бит. FSMC действительно через память контроллера работает. И вот этот момент как вариант прорабатывался. По идее в NAND пишутся данные постранично. То есть в любом случае нужно дождаться заполнения буфера (объёмом страницы), а затем передать управление FSMC. Но это опять-таки внесёт задержку пока буфер будет передан в NAND? И только потом АЦП сможет снова начать конвертацию?
0
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
29.04.2019, 23:23 | 4 |
Владислав_Минск, Ну смотрите, так как размер данных не совпадает, значит прямо из АЦП в NAND мы явно писать напрямую не можем. Тогда мы берем один канал DMA и таскаем по 16 бит из периферии в память RAM контроллера. Скажем в буфер размером в 2 страницы NAND. Настраиваем прерывание на середине и конце.
По прерыванию в середине мы стартуем второй канал DMA по 8 бит данных в режиме mem to mem. Скорость DMA явно выше чем АЦП поэтому DMA точно успеет утащить первую половину пока вторая оцифровывается. Таким образом записываем первую страницу. По прерыванию конца оцифровки утаскиваем вторую страницу. Даже наверное после записи одной страницы останется время проверить следующую страницу на наличие косяков. В итоге у нас ядро вообще свободно получается, некий конвеер из АЦП в NAND. Вот только одна беда, как я уже и говорил, пока DMA дергает FSMC, то из основного цикла нам данные трогать лучше не стоит. То есть нам никак с ними не поработать, если только складировать то выглядит нормально
0
|
29.04.2019, 23:23 | |
29.04.2019, 23:23 | |
Помогаю со студенческими работами здесь
4
STM32F407 ADC DMA 2 входа без TIM и NVIC Работа ADC на два канала STM32F411 через DMA STM32F4 ADC + DMA при передачи 1 байта входит в прерывания через 1 бит stm32f4discovery + fsmc + dma FSMC + DMA + LCD + F103 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как обучить нейросеть создания картинок на Python
bytestream 24.01.2025
В эпоху цифровых технологий искусственный интеллект становится неотъемлемой частью творческого процесса. Особое место в этой области занимает разработка и обучение нейронных сетей для создания. . .
|
Как обучить нейросеть генерации текста на Python
bytestream 24.01.2025
В современном мире искусственный интеллект и машинное обучение становятся неотъемлемой частью многих технологических решений. Одной из наиболее интересных и востребованных задач в этой области. . .
|
Машинное обучение на Python
bytestream 24.01.2025
Введение в машинное обучение на Python
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, которая позволяет компьютерным системам. . .
|
Как удалить вирус-майнер с компьютера
hw_wired 24.01.2025
Вирусы-майнеры стали одной из наиболее серьезных угроз для пользователей компьютеров. Эти вредоносные программы тайно используют вычислительные ресурсы зараженного устройства для добычи криптовалюты. . .
|
Что такое веб-сервер, для чего он нужен и как работает
bytestream 24.01.2025
В современную эпоху цифровых технологий веб-сервер является фундаментальным компонентом интернет-инфраструктуры, обеспечивающим функционирование множества онлайн-сервисов и веб-сайтов. Этот. . .
|
Как в цикле for перебрать все элементы в словаре в Python
bytestream 24.01.2025
Словари в Python представляют собой мощные структуры данных, которые позволяют хранить информацию в формате ключ-значение. Эта особенность делает их незаменимыми при работе с данными, где требуется. . .
|
Как отменить rebase в Git
hw_wired 24.01.2025
Git rebase представляет собой мощный инструмент для управления историей коммитов в системе контроля версий Git. Этот механизм позволяет разработчикам изменять последовательность, комбинировать или. . .
|
Как поменять цвет input placeholder с помощью CSS
bytestream 24.01.2025
В веб-разработке оформление элементов пользовательского интерфейса играет ключевую роль в создании привлекательного и интуитивно понятного дизайна. Особое внимание уделяется формам ввода данных, где. . .
|
Как перебрать все значения в перечислении (enum) в C#
bytestream 24.01.2025
Перечисление (enum) в языке программирования C# представляет собой специальный тип данных, который позволяет определить набор именованных констант. Этот мощный инструмент особенно полезен, когда. . .
|
Как обойтись без проверки на null, чтобы избежать NullPointerException в Java
bytestream 24.01.2025
NullPointerException (NPE) является одним из самых распространенных исключений в Java, создающих серьезные проблемы при разработке программного обеспечения. Данное исключение возникает при попытке. . .
|
Что лучше использовать в href ссылок в JavaScript: "#" или "javascript:void(0)"
bytestream 24.01.2025
При разработке веб-приложений важную роль играет правильное использование HTML-ссылок в сочетании с JavaScript. Одним из ключевых аспектов является выбор корректного значения атрибута href для. . .
|
Как узнать индекс элемента списка по его значению в Python
hw_wired 24.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только манипулировать элементами списка, но и определять их точное местоположение. Индекс элемента представляет собой. . .
|