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

 
 
> ATMega8L и External int0,1, Не работает по спаду....
pr0m
сообщение Sep 29 2006, 10:20
Сообщение #1


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

Группа: Участник
Сообщений: 183
Регистрация: 22-06-05
Из: Таганрог
Пользователь №: 6 233



То есть работает, но как по низкому уровню - не выходит из обработчика, пока на ноге висит 0....

Инициализация:

void CKeys::Init()
{
// Срабатывание по спаду
MCUCR |= ((1<<ISC01) | (1<<ISC11));
// Очищаем прерывания на всякий случай
GIFR |= ((1<<INTF0)|(1<<INTF1));
// Разрешение прерываний INT0, INT1
GICR |= ((1<<INT0)|(1<<INT1));
}

Обработчик:
#pragma vector=INT0_vect
__interrupt void KeyUpInterruptHandler()
{
//GIFR |= (1<<INTF0);
DoSomething();
}

#pragma vector=INT1_vect
__interrupt void KeyDownInterruptHandler()
{
//GIFR |= (1<<INTF1);
DoSomething();
}

То ли лыжи не едут...?
Есть ли мнения у обчественности? huh.gif


--------------------
Правильно поставленный вопрос - половина ответа...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Sep 29 2006, 10:40
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



А где глобальное разрешение прерываний? (SEI)
у вас не хватает одного из трех:
- enable_interrupts();
- SREG |= 0x80;
- asm("SEI");
Go to the top of the page
 
+Quote Post
pr0m
сообщение Sep 29 2006, 10:44
Сообщение #3


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

Группа: Участник
Сообщений: 183
Регистрация: 22-06-05
Из: Таганрог
Пользователь №: 6 233



Цитата(defunct @ Sep 29 2006, 14:40) *
А где глобальное разрешение прерываний? (SEI)
у вас не хватает одного из трех:
- enable_interrupts();
- SREG |= 0x80;
- asm("SEI");


Есть, конечно... в main(). Иначе совсем не работало бы..


--------------------
Правильно поставленный вопрос - половина ответа...
Go to the top of the page
 
+Quote Post
pr0m
сообщение Sep 29 2006, 11:03
Сообщение #4


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

Группа: Участник
Сообщений: 183
Регистрация: 22-06-05
Из: Таганрог
Пользователь №: 6 233



Цитата(pr0m @ Sep 29 2006, 14:44) *
Цитата(defunct @ Sep 29 2006, 14:40) *

А где глобальное разрешение прерываний? (SEI)
у вас не хватает одного из трех:
- enable_interrupts();
- SREG |= 0x80;
- asm("SEI");


Есть, конечно... в main(). Иначе совсем не работало бы..


Вопрос снят smile.gif Сам ступил - в main() рулю разными режимами сохранения енергии, то бишь тем же регистром, где и биты выбора режима работы внешних прерываний, там они и затирались в 0, что соответствует прерыванию по низкому уровню....


--------------------
Правильно поставленный вопрос - половина ответа...
Go to the top of the page
 
+Quote Post



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

 


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


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