Napisałem krótki i prosty program do tego aby podczas debbugowania krokowego sprawdzić jak zachowuje się uC. Przerwanie pochodzi z zewnątrz (INT0). I teraz jest tak : przerwanie jest wykryte, ale zamiast skoczyć do funkcji obsługującej to przerwanie program skacze na początek funkcji main (). Co jest nie tak ?? Próbowałem już przy pomocy SIGNAL(), INTERRUPT(), z róznymi wektorami i nic :/
Ponizej umieszczam kod :
// pliki nagłówkowe
#include <avr/io.h>
#include <avr/interrupt.h>
int start(void)
{
// Port B jako wyjście
DDRB = 0xFF; // wyświetlacz
PORTB = 0xFF;
// Port D jako wejście
DDRD = 0x00; //konfiguracja portu D
PORTD = 0x00;
MCUCR = 0x01; // INT0 - każda zmiana wywołuje przerwanie
GIMSK = 0x40; // odblokowanie przerwań od INT0
return 0;
}
ISR(INT0_vect)
{
PORTB != PORTB;
return 0;
}
int main(void)
{
// konfiguracja
start();
sei(); // pozwolenie na przerwania
PORTB = 0x00;
PORTD = 0x00;
while(1)
asm("nop");
return 0;
}
Ponizej umieszczam kod :
// pliki nagłówkowe
#include <avr/io.h>
#include <avr/interrupt.h>
int start(void)
{
// Port B jako wyjście
DDRB = 0xFF; // wyświetlacz
PORTB = 0xFF;
// Port D jako wejście
DDRD = 0x00; //konfiguracja portu D
PORTD = 0x00;
MCUCR = 0x01; // INT0 - każda zmiana wywołuje przerwanie
GIMSK = 0x40; // odblokowanie przerwań od INT0
return 0;
}
ISR(INT0_vect)
{
PORTB != PORTB;
return 0;
}
int main(void)
{
// konfiguracja
start();
sei(); // pozwolenie na przerwania
PORTB = 0x00;
PORTD = 0x00;
while(1)
asm("nop");
return 0;
}