Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прерывания в at90can128
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
J0hnNick
Не могу разобраться с прерываниями. Контроллер at90can128, компилятор WinAVR.
Подскажите, пожалуйста, что не так. Программка простейшаю-хочу зажечь светодиод по нажатию кнопки о потушить по отпусканию.
ps Делал аналогичную программу на STK200-все отлично в реале работает.

Код
#include <stdio.h>
#include <avr/interrupt.h>
#include <AVR/io.h>
#include <stdlib.h>
#include <AVR/iocanxx.h>
#include <avr/iocan128.h>
#include "global.h"        // include our global settings

ISR (INT0_vect)                        // обработчик прерывания INT0
{
    EIFR = 0x00;
    PORTB &= ~(1<<PORTB0);    
}

ISR (INT1_vect)                        // обработчик прерывания INT0
{
    EIFR = 0x00;
    PORTB &= (1<<PORTB0);    
}

int main(void)
{
DDRB=0xFF;             // порт B настроен на выходы
PORTB=0xFF;

DDRE=0x00;            // порт E настроен на вход
PORTE=0xFF;            // порт E подтянут к VCC

EICRB = 0b11100000;
EIMSK = 0b11000000;
SREG = 0b10000000;        //global interrupt en  


for(;;)
{
}
return 0;
}
Палыч
Нет под рукой DS на at90can128, но, по-моему, Вы настраиваете внешние прерывания INT6-INT7, а, обработчики прерываний INT1-INT0

PS. Нашел DS - так и есть: настраиваются одни прерывания, обрабатываются - другие. Кроме того, EIFR = 0x00 - бессмыслено. Флаги в EIFR сбрасываются аппаратно при выполнении обработчика, а, для программного сброса флагов (если это необходимо) нужно прописывать в него единицы(!) для разрядов, которые желаете сбросить.
J0hnNick
Цитата(Палыч @ Jun 9 2007, 10:07) *
Нет под рукой DS на at90can128, но, по-моему, Вы настраиваете внешние прерывания INT6-INT7, а, обработчики прерываний INT1-INT0

PS. Нашел DS - так и есть: настраиваются одни прерывания, обрабатываются - другие. Кроме того, EIFR = 0x00 - бессмыслено. Флаги в EIFR сбрасываются аппаратно при выполнении обработчика, а, для программного сброса флагов (если это необходимо) нужно прописывать в него единицы(!) для разрядов, которые желаете сбросить.

про обработку- это следу моих экспериментов с номерами прерываний. Изначально все совпадало, но все равно не работало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.