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

 
 
> не могу мегу 8 загнать во внешнее прерывание int0
Метценгерштейн
сообщение Sep 4 2013, 15:04
Сообщение #1


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Код
char __low_level_init (void) {  
...
        MCUCR = (1<<ISC01)|(0<<ISC00); // разрешил внешнее прерывание INT0 по падению фронта
        GICR = (1<<INT0); // разрешил глобальное прерывание по INT0
...
        PORTD = (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);            
        DDRD =(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(0<<2)|(1<<1)|(1<<0);      // PD2 (int0) вход          
        
        return 1;                                
}


вот в main () разрешаю глобальные прерывания
Код
void main (void) {
__enable_interrupt();
...


а вот уже в др. файле обработчик прерывания
Код
#pragma vector = INT0_vect
__interrupt void INT0_interrupt (void)
{
  putString ("прерывание");
  putString ("\r\n");
...

на осцилле при старте единица. Подаю ноль, в обработчик не вваливается.

Чего не вижу?

Сообщение отредактировал Метценгерштейн - Sep 4 2013, 15:04
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Sep 4 2013, 16:42
Сообщение #2


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

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



да должна вроде выполняться, т.к. описал проект на С++ (указал в ИАРе), так он точно ее тогда выкинул. И получились завалы фронтов по всем ногам. Так что вызывается она. Но я попробую.
А то, что обработчик прерывания описан в др. подключенном файле- нормально?
сам обработчик- без ошибок же?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 4 2013, 16:55
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Метценгерштейн @ Sep 4 2013, 20:42) *
да должна вроде выполняться, т.к. описал проект на С++ (указал в ИАРе), так он точно ее тогда выкинул. И получились завалы фронтов по всем ногам. Так что вызывается она. Но я попробую.
А то, что обработчик прерывания описан в др. подключенном файле- нормально?
сам обработчик- без ошибок же?


На вид все правильно. У меня тоже на Меге8 прерывание от кнопочки (землит INT0):

Код
// Сконфигурируем порты
  PORTD = 0;
  DDRD = 0;

// Port interrupts
  MCUCR = (1<<ISC01);  // falling edge
  GIFR = (1<<INTF0);
  GICR = (1<<INT0);    // INT0 enable

...

#pragma vector=INT0_vect
__interrupt void INT0_interrupt()
{
  Flag ^= Flag_Protocol;
}


Может быть у вас снова стека не хватает sm.gif, чтобы вызвать putString из прерывания?
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 4 2013, 17:00
Сообщение #4


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата
да должна вроде выполняться, т.к. описал проект на С++ (указал в ИАРе), так он точно ее тогда выкинул. И получились завалы фронтов по всем ногам. Так что вызывается она. Но я попробую.

extern C для обработчика указано? На эту тему на форуме масса постов.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post



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

 


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


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