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

 
 
> Работа с прерываниями, 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
Ответов
MDD
сообщение Nov 3 2009, 05:23
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 7-05-06
Пользователь №: 16 862



Да, похоже Ваша правда - в соотвествующей аппноте 1313 в прерывании флаги тоже вручную никто не сбрасывает. Меня смутило, что в даташите они не заострили на этом внимания. Как, например, для того же SPI:
Цитата
The IF is cleared by hardware when executing the corresponding interrupt
handling vector. Alternatively, the SPIF bit can be cleared by first reading the STATUS register
with IF set, and then access the DATA register.


Впрочем, все это не смертельно и легко выясняется эксперементально. Хотя для новичков трудностей добавляет...
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
- - Duhas   я так понимаю, что во время начала отработки преры...   Oct 29 2009, 06:10
|- - V_G   Цитата(Duhas @ Oct 29 2009, 16:10) я так ...   Oct 29 2009, 08:28
- - 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


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

 


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


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