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

 
 
> AVR-IAR и внешнее прерывание, обработка INT0
mr_ia
сообщение Feb 12 2009, 10:31
Сообщение #1


Участник
*

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



Добрый день уважаемые.
Имею очень простой вопрос, как в IAR обработать внешнее прерывание.
До этого програмил в CVAVR, но вот решил мигрировать.
Опишу задачу. Нужно обработать внешнее прерывание INT0, по нижнему уровню.
Посмотрел примеры, вопросы ответы, нашел более менее подходящий кусок по обработке прерывания при перемолнении таймера счетчика, кусок работает. Написал для обработки INT0- Не работает...

Привожу код.
CODE
#include <iom128.h>
#include <inavr.h>
#include <ina90.h>


//volatile char flag;

//Обработка прерывания INT0***
#pragma vector = 0x04
//#pragma type_attribute=__interrupt
//void my_handler(void)
__interrupt void INT0_ISR(void)
{
__disable_interrupt(); //отключаем глобальные прерывания
//flag=flag++;
PORTD_Bit6 = 0; //смотрим по состоянию ножки выполнилось ли прерывание
}

int main( void )
{
DDRD_Bit7 = 1; //конфигурируем биты
DDRD_Bit6 = 1;
PORTD_Bit6 = 1;

DDRE=0xFF; //конфигурируем порты
DDRF=0xFF;
DDRB=0xFF;


EIMSK|= 1<<0; //Разрешаем INT0
EICRA &= ~(1<<0); // по нижнему уровню
__enable_interrupt(); //разрешаем глобальные прерывания

while (1)
{
__delay_cycles(1000000);
PORTD_Bit7 = 1; //смотрим не виснет ли
__delay_cycles(1000000);
PORTD_Bit7 = 0;

PORTE=EIMSK; //смотрим текущее состояние
PORTF=SREG;
PORTB=EIFR;
}
}



Если закоментировать обработку прерывания, то:
Код
EIMSK=0x01;
SREG=0x82;
EIFR=0xF0;

P.S. Компилируется без ошибок. Моделирую в Proteuse, за неимением железа под рукой... Мб глюк протеуса, но врядли ибо аналогичное в CVAVR работает без проблем.
В чем я ошибся?
Причина редактирования: Уменьшение видимого размера цитаты исходника.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mr_ia   AVR-IAR и внешнее прерывание   Feb 12 2009, 10:31
- - clpe   Цитата(mr_ia @ Feb 12 2009, 13:31) __inte...   Feb 12 2009, 10:45
- - aspID   Как минимум, в том, что прерывание отработает толь...   Feb 12 2009, 10:48
- - mr_ia   если добавить __enable_interrupt(); в обработку п...   Feb 12 2009, 10:59
- - MrYuran   А ногу, на которой INT0, не забываете подёргать? М...   Feb 12 2009, 11:08
- - clpe   Цитата(mr_ia @ Feb 12 2009, 13:31) while ...   Feb 12 2009, 11:09
- - Палыч   Цитата(mr_ia @ Feb 12 2009, 13:31) Модели...   Feb 12 2009, 11:33
|- - mr_ia   Цитата(Палыч @ Feb 12 2009, 15:33) В AVRS...   Feb 12 2009, 12:05
|- - Палыч   Цитата(mr_ia @ Feb 12 2009, 15:05) Спасиб...   Feb 12 2009, 12:53
- - mr_ia   Ногу дергаю кнопкой(в протеусе). изначально INT0 о...   Feb 12 2009, 11:34
- - clpe   DDRE=0xFF; //конфигурируем порты DDRF=0xFF; DDRB =...   Feb 12 2009, 11:56
- - clpe   Нет всетаки виноват протеус... У меня работает: Pr...   Feb 12 2009, 12:17
- - zltigo   Цитата(mr_ia @ Feb 12 2009, 13:31) нашел ...   Feb 12 2009, 13:29
|- - Палыч   Цитата(zltigo @ Feb 12 2009, 16:29) А кто...   Feb 12 2009, 13:53
|- - zltigo   Цитата(Палыч @ Feb 12 2009, 16:53) Имхо, ...   Feb 12 2009, 14:02
- - Atashi   глянул на схему и чет задумался о дребезгах всяких...   Feb 12 2009, 23:10
|- - clpe   Цитата(Atashi @ Feb 13 2009, 02:10) гляну...   Feb 13 2009, 12:20
- - SysRq   Цитата(mr_ia @ Feb 12 2009, 13:31) Код#pr...   Feb 13 2009, 00:02
- - Палыч   Цитата(SysRq @ Feb 13 2009, 03:02) 0x04 -...   Feb 13 2009, 13:13


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

 


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


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