реклама на сайте
подробности

 
 
> stm32 захват таймера 16 бит
SasaVitebsk
сообщение Apr 3 2014, 11:09
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Доброго времени суток. Есть вопрос.
Немного не учёл особенности однокристалки stm32f407.
Короче мне надо использовать захват таймера. Но плата разведена на таймер 8. Он 16-ти битный. Мне для расчётов нужен 32-ух битный.
Я сделал расширение таймера за счёт 4-го таймера. При захвате вызываю прерывание где читаю регистр захвата TIM8 и регистр CNT таймера расширения TIM4.
Вижу потенциальные грабли в том, что пока вызывается прерывание, можно нарваться на "ненужное" переполнение. То есть фактически тот же неатомарный доступ только для таймеров.
Кто-нибудь разруливал данную ситуацию? Я могу как-то захватить оба таймера?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Apr 4 2014, 02:26
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Всем спасибо. )) Не ожидал такого числа ответов.
Идея с DMA мне в голову не приходила. Похоже она прокатывает, но переделывать много. Не очень хочется. Всё равно спасибо.
Идею demiurg_spb, стыдно признаться - не понял.
А Golikov A. подсказал мысль толковую. Можно текущий счётчик таймера сравнивать с регистром захвата.
Попробую.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Apr 4 2014, 03:45
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(sKWO @ Apr 4 2014, 07:36) *
Я прав, она?
Да. Похоже она.

Цитата(SasaVitebsk @ Apr 4 2014, 06:26) *
Идею demiurg_spb, стыдно признаться - не понял.
compare_isr() инкрементирует старшее слово (программное), а из ICR читается младшее слово.
Таким образом получается 32 разряда.
А условие ((icr<0x8000) && (TIFR & (1<<OCF))) проверяет, что переполнение случилось недавно.
Давность можно регулировать, задав вместо 0x8000 другое значение.

На STM32 таких проблем как с AVR быть не должно, т.к. можно конфигурировать NVIC и разруливать приоритеты по собственному желанию.



--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th August 2025 - 18:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016