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

 
 
> stm32f4, Input Compare, Сгенерировать прерывание по определенному значению входного пульса
BlackOps
сообщение Sep 7 2012, 04:24
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



Сейчас я например могу измерять ширину входного пульса и его период. Ну и по мере активности входного пульса срабатывается прерывание, и я внутри прерывания могу видеть значения периода и ширины пульса.

Но теперь мне нужно чтобы прерывание срабатывало только тогда когда скажем ширина пульса имеет определенное значение (или выше/ниже определенного значения).


Пытаюсь разобратся, смотрю на сХему, на стр. 375 мануала, я не могу пока понять мне значение для сравнения нужно в CCR1 класть? или иначе как это можно достичь? т.е. мне нужно чтобы это произошло без участия программного кода, скажем код какой то исполняется, и вдруг ширина входного пульса на какой то ноге превысила какое то значение и сработало прерывание, а не так чтобы я постоянно должен был в прерывании проверять ширину пульса.

мне кажется нужно использовать Мастер/Слейв режим, но не могу понять как это связать пока.

мне кажется сравнение с регистром CCR1 в основном в Output Compare режиме, но я не знаю работает ли это каким то образом в Input Compare?

Кто нибудь может подсказать или показать код если есть?


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Sep 10 2012, 08:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(BlackOps @ Sep 7 2012, 07:24) *
Сейчас я например могу измерять ширину входного пульса и его период. Ну и по мере активности входного пульса срабатывается прерывание, и я внутри прерывания могу видеть значения периода и ширины пульса.

Но теперь мне нужно чтобы прерывание срабатывало только тогда когда скажем ширина пульса имеет определенное значение (или выше/ниже определенного значения).


Период импульса не важен?
Если нужна аппаратная реализация с генерацией прерывания при поступлении импулься широной от T1 до T2 без участия CPU, то самое простое что мне видится:
- нстроить таймер на запуск по фронту с входа;
- настроить первый канал на время T1 с генерацией DMA-запроса;
- настроить второй канал на время T2 с генерацией DMA-запроса;
- DMA-запрос от первого канала настроить на запись управляющего слова в регистр РАЗРЕШЕНИЯ прерывания от внешнего входа по спаду импульса;
- DMA-запрос от второго канала настроить на запись управляющего слова в регистр ЗАПРЕЩЕНИЯ прерывания от внешнего входа по спаду импульса;
- иметь ввиду, что DMA имеет "приличное" время отклика на событие (порядка 12 тактов), поэтому очень короткие импульсы (с точность 100нс) отловить не получится.

Читать TIMER, DMA, EXTI.
Надеюсь, ясно описал)

PS. Кстати, может и не получится(
Чисто аппаратная реализация (без участия CPU) не всегда возможна.
Почему нельзя использовать прерывания?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:31
Рейтинг@Mail.ru


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