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

 
 
> Работа с прерываниями, xmega, повторно отрабатывает прерывание
MrKot
сообщение Oct 28 2009, 13:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 23-07-08
Пользователь №: 39 158



Есть кнопка, которая при включеном положении замыкает контакт на землю. Соответствующую ногу я назначил входом, подтянул логическую единицу, и назначил прерывание при падении уровня на этой ноге

Код
PORT_ConfigurePins( &PORTB, PIN2_bm, false, false, PORT_OPC_PULLUP_gc, PORT_ISC_FALLING_gc );                        
PORT_SetPinsAsInput( &PORTB, PIN2_bm );
PORT_ConfigureInterrupt0( &PORTB, PORT_INT0LVL_MED_gc, PIN2_bm );


добавил функцию обработки прерывания
Код
ISR(PORTB_INT0_vect){      
    istimer = true;
    timer=0;    
    PORTD.OUTCLR = PIN1_bm;
    sendchar('S');  
    delay_ms(100);
}


Но обработчик прерывания отрабатывает два раза.
Если убрать задержку в прерывании, то обработка прерывания происходит большее количество раз, что возникает скорее всего из-за дребезга контакта, который в устройстве ничем не отфильтровывается. Собственно вопрос, почему происходит повторная обработка прерывания и как с этим бороться (желательно программно)?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Duhas
сообщение Oct 29 2009, 06:10
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018



я так понимаю, что во время начала отработки прерывания поступает второй запрос на это же прерывание... т.к. прерывание обрабатывается достаточно быстро для клавиатуры, второе - явно лишнее, следовательно, пожалуй даже при выходе из обработчика, неплохо было бы очистить флаг запроса..
Go to the top of the page
 
+Quote Post
V_G
сообщение Oct 29 2009, 08:28
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(Duhas @ Oct 29 2009, 16:10) *
я так понимаю, что во время начала отработки прерывания поступает второй запрос на это же прерывание... т.к. прерывание обрабатывается достаточно быстро для клавиатуры, второе - явно лишнее, следовательно, пожалуй даже при выходе из обработчика, неплохо было бы очистить флаг запроса..

Это малопродуктивно, т.к.
1. Дребезговых импульсов может быть гораздо больше двух
2. Прерывание обрабатывается не просто быстро, а очень быстро, и второй запрос при дребезге скорее всего придет после выхода из прерывания. Так что запретить его лучше... А вот перед повторным разрешением по таймеру - да, запросы надо сбросить!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MrKot   Работа с прерываниями   Oct 28 2009, 13:49
- - Dog Pawlowa   Цитата(MrKot @ Oct 28 2009, 16:49) Собств...   Oct 28 2009, 14:06
- - Duhas   при входе в прерывание чистить свой флаг не вариан...   Oct 28 2009, 15:37
|- - V_G   Цитата(Duhas @ Oct 29 2009, 01:37) при вх...   Oct 28 2009, 23:49
|- - MDD   Цитата(V_G @ Oct 29 2009, 01:49) Смотря к...   Nov 2 2009, 16:26
- - SasaVitebsk   Клавиатура - медленное устройство с точки зрения М...   Oct 28 2009, 18:16
- - chief_olimp   у вас таймеры используются? Можно в прерывании очи...   Oct 29 2009, 07:40
- - Duhas   афтор привел код, в котором по окончанию отработки...   Oct 29 2009, 12:46
- - V_G   Задержка внутри прерывания - сверхдурной тон, заче...   Oct 29 2009, 16:05
- - Прохожий   Цитата(MrKot @ Oct 28 2009, 16:49) Собств...   Oct 29 2009, 18:01
- - MrKot   Всем спасибо за ответы. Прохожий - полезная ссылка...   Oct 29 2009, 19:52
- - V_G   Нет, в pinchange на xmege я запроса не сбрасываю, ...   Nov 3 2009, 00:24
- - MDD   Да, похоже Ваша правда - в соотвествующей аппноте ...   Nov 3 2009, 05:23


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

 


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


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