С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/27: Рейтинг темы: голосов - 27, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 06.04.2014
Сообщений: 215
1

Чтение регистров таймера через DMA, stm32F103C8.

13.10.2015, 09:36. Показов 5544. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Решил попробовать организовать чтение регистров таймера в режиме энкодера, через DMA. Как ни странно но чтение заработало причём просто в лоб, без использования спец регистров таймера. Но работает это очень медленно, не удалось даже близко приблизиться к частоте опроса таймера в килогерц.
Почему так медленно работает DMA, возможно что массив куда копируются значения регистров не правильно выровнен в памяти, или такой способ есть багофича процессора и надо таки пользоваться спец регистрами таймера для работы с DMA?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.10.2015, 09:36
Ответы с готовыми решениями:

Проблема с захватом сигнала от таймера через DMA микроконтроллер STM32F042G6U
Ребята, прошу помощи, не получается запустить захват сигнала чтобы измерить период, уже третий день...

Stm32f103c8 spl spi dma max31855
Третий день пытаюсь завести аппаратный spi, я навичек, прошу помощи ( даташит на MAX31855 Сделал...

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

Никак не хочет запускаться DMA по событию таймера TIM3
void TIMER_TREE(int PRED_DELIT_TIM_3) {...

15
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
DMA и таймер правильно настроены? События таймера разрешены?
Ну если все работает как и задумывалось то значит настроено правильно, работает почему то медленно.
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
Ничего не понял. Флаг инкрементируется на каждое переполнение tim4 и сбрасывается в основном цикле? Тогда наоборот получается: значение флага является количеством срабатываний DMA за время между опросами в основном цикле. Если это число больше 1, то в main еще что-то длительное выполняется, в результате длительность одной итерации цикла превышает миллисекунду.
Так?
Не уверен что есть жёсткая связь между переполненим таймера и запуском дма, допустим заставим таймер вертеться 100500 раз в секунду и запускать дма, но заранее будет известно, что дма с такой частотой не успевает перекачивать данные. И когда таймер вновь переполнится, а дма ещё не завершил предыдущий цикл передачи, что будет? Думаю дма, спокойненько продолжит работу не смотря на то, что его попытались снова запустить. И запустится от какого-то следующего переполнения.
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
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2015, 18:09
Помогаю со студенческими работами здесь

ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет?
Добрый день. Столкнулся с необходимостью писать большой объём данных АЦП с высокой скоростью....

Чтение регистров на HAL по I2C
Приветствую всех! Подскажите, пожалуйста, так правильно читать регистры другой мс, подключенной...

Конфигурация регистров для использования внешнего clock для таймера
Добрый день. N-ое количество дней уже не могу правильно сконфигурировать схему с подсчетом...

STM32: Чтение из USART с использованием DMA
Здравствуйте. Использую китайскую плату на STM32-F103C8T6: Картинка <Изображение удалено> Не...

Чтение регистров АЦП в одну переменную?
Добрый день!Пишу на Atmega 2561. 1024 разрядный АЦП. Мах значение на АЦП 0x03FF: ADCH 0000.0011...

Чтение множественных регистров (Fc 0x03) по ModBus RTU
Добрый день! Пытаюсь считывать данные с ПИД-регулятора (ТРМ210) по ModBus RTU. Как сделать так...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
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-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru