0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
1 | |
Чтение регистров таймера через DMA, stm32F103C8.13.10.2015, 09:36. Показов 5544. Ответов 15
Метки нет (Все метки)
Здравствуйте.
Решил попробовать организовать чтение регистров таймера в режиме энкодера, через DMA. Как ни странно но чтение заработало причём просто в лоб, без использования спец регистров таймера. Но работает это очень медленно, не удалось даже близко приблизиться к частоте опроса таймера в килогерц. Почему так медленно работает DMA, возможно что массив куда копируются значения регистров не правильно выровнен в памяти, или такой способ есть багофича процессора и надо таки пользоваться спец регистрами таймера для работы с DMA?
0
|
13.10.2015, 09:36 | |
Ответы с готовыми решениями:
15
Проблема с захватом сигнала от таймера через DMA микроконтроллер STM32F042G6U Stm32f103c8 spl spi dma max31855 Чтение SD карты через SDIO с DMA Никак не хочет запускаться DMA по событию таймера TIM3 |
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
|
|
13.10.2015, 09:46 | 2 |
DMA и таймер правильно настроены? События таймера разрешены?
0
|
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
13.10.2015, 09:49 | 3 |
А, забыл указать, tim2 подключен энкодер, а tim4 дергает DMA по переполнению с частотой килогерц.
0
|
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
13.10.2015, 09:59 | 4 |
Сообщение от Iddy_Im
0
|
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
|
|
13.10.2015, 10:15 | 5 |
А как определяется скорость опроса? Если все настроено правильно, то и должен быть 1кГц.
0
|
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
13.10.2015, 10:45 | 6 |
Определяется так, в прерывании флаг не просто ставим в 1, а инкрементируем. Когда в основном цикле проверяем флаг, то условие если флаг >=1, и смотрим значение флага. Если всегда единица значит опрос происходит с частотой в килогерц (таймер переполняется 1000 раз в секунду и инкрементирует флаг), а вот если флаг бывает больше 1 значит процедура длится дольше чем 1/1000 секунды.
0
|
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
|
|
13.10.2015, 10:50 | 7 |
Ничего не понял. Флаг инкрементируется на каждое переполнение tim4 и сбрасывается в основном цикле? Тогда наоборот получается: значение флага является количеством срабатываний DMA за время между опросами в основном цикле. Если это число больше 1, то в main еще что-то длительное выполняется, в результате длительность одной итерации цикла превышает миллисекунду.
Так?
0
|
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
13.10.2015, 10:56 | 8 |
Не совсем так, таймер запускает передачу дма по переполнению и уходит в прерывание инкрементирую флаг. В основном цикле по флагу начинается работа процедуры, сначала ожидается окончание передачи дма, и потом обработка полученных данных. Пока я не поставил ожидание окончания передачи дма были странные глюки в процедуре, а как установил ожидание то глюки пропали но частота опроса упала.
На самом деле изначально было не совсем так, вся процедура была в обработчике прерывания tim4, и когда я вставил ожидание завершения передачи дма, то процессор из прерывания уже не вылезал, к моменту выхода, таймер успевал переполниться. Тогда я в обработчике сделал флаг, а процедуру перенес в основной цикл.
0
|
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
13.10.2015, 11:11 | 9 |
Сообщение от Iddy_Im
0
|
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,400
|
|
13.10.2015, 11:15 | 10 |
Вообще ничего не понимаю.
Зачем тогда использовать DMA, если вы ожидаете его завершения? Бессмысленно же! Читайте просто напрямую регистры TIM2, да пользуйтесь! Заведите себе systysk на 1мс, да каждый новый тик считывайте данные. Можно будет и скорость вращения примерно оценить. Либо забульбенить таймер на 1МГц и отсчитывать по 1000 отсчетов, тогда вычисление скорости вращения энкодера точней будет. У вас DMA пинается 1 раз в миллисекунду! Уж чего тут не успевать-то?
0
|
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
13.10.2015, 11:24 | 11 |
Ну я рассуждал так, энкодер вращается не с постоянной скоростью да ещё и направление меняет. Чтобы считать его состояние нужны значения 3х регистров, CNT, cr1, sr тоесть три последовательных операции чтения. Пока читаешь, состояние счетчика меняется или например переполнение может случиться. А дма это быстро и без участия процессора, пнул дма и вот тебе мгновенное состояние таймера. Но что то пошло не так.
0
|
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 408
|
|
13.10.2015, 11:47 | 12 |
Сообщение от Bmox77
0
|
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
13.10.2015, 11:49 | 13 |
Сообщение от wirty
Хотелось бы глубже понимать работу дма, дабы не плутать по граблям.
0
|
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 408
|
|
13.10.2015, 11:59 | 14 |
Время реакции на любое воздействие не является нулевым. Почитайте апноту по ДМА вашего МК. Там есть такое понятие как латентность ДМА и расписано взамодействие ДМА и ядра.
0
|
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
13.10.2015, 12:18 | 15 |
Я понимаю что время не нулевое, это я утрированно написал. Поищу апнот, почитаю.
0
|
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
|
|
13.10.2015, 18:09 | 16 |
В общем ДМА надо настраивать в режим mem2mem, пашет отлично. Ни каких затыков.
Так что пилим дальше.
0
|
13.10.2015, 18:09 | |
13.10.2015, 18:09 | |
Помогаю со студенческими работами здесь
16
ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет? Чтение регистров на HAL по I2C Конфигурация регистров для использования внешнего clock для таймера STM32: Чтение из USART с использованием DMA Чтение регистров АЦП в одну переменную? Чтение множественных регистров (Fc 0x03) по ModBus RTU Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
|
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее:
На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
|
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|