PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt löst Reset aus



max!
18.09.2010, 20:47
Hallo Forum!
Habe ein Problem mit dem INT0 Interrupt meines Atmega16. Wenn der Interrupt ausgelöst wird startet der Mikrocontroller von neu. INT1 arbeitet korrekt.



#include <avr/io.h>
#include <avr/interrupt.h>

ISR(INTO_vect)
{
PORTA=0xff;
}
ISR(INT1_vect)
{
PORTA=0xff;
}

int main(void)
{
DDRA=0xff;
DDRD=0x00;
PORTA=0x00;


//Interrupt einschalten
MCUCR = (1<<ISC00)|(1<<ISC01)|(1<<ISC10)|(1<<ISC11); //Flankenerkennung
GICR |= (1<<INT0)|(1<<INT1); //INT1 und INT0 aktiviert
sei();


while(1)
{}

return 0;
}


Hoffe jemand kann helfen.

Gruß Max

markusj
18.09.2010, 21:13
Hallo Max,

du hast statt INT0_vect INTO_vect ("O" statt "Null") geschrieben - that's it.

mfG
Markus

Jaecko
18.09.2010, 21:13
Bist du sicher, dass da INT0 steht und nicht INTO?
Ein Reset statt nem Interrupt wird dann ausgeführt, wenns den jeweiligen Vektor nicht gibt. Dann nimmt er den Alternativvektor 0x0000 = Reset.

Edit: 2 Leute gleichzeitig *g*.

Nachtrag: Du kannst auch nen eigenen Standard-Vektor definieren:

SIGNAL (__vector_default)
{
...
}

max!
19.09.2010, 09:56
Oh ja, Danke! Jetzt klappts auch.
Dumm das sowas dem Compiler nicht affällt.

Grüße
Max

021aet04
19.09.2010, 10:19
Ich habe das Programm 1:1 ins AVR Studio kopiert. Es wird zwar kein Fehler gemeldet, aber eine Warnung.

Die Warnung lautet

../d.c:4: warning: 'INTO_vect' appears to be a misspelled signal handler

MfG Hannes

max!
19.09.2010, 18:03
Dann sollte ich in Zukunft auch mal die Warnungen durchlesen. :-#

Gruß Max

BurningWave
19.09.2010, 18:30
Dann sollte ich in Zukunft auch mal die Warnungen durchlesen.

Warnungen sollte man generell immer ernst nehmen, da sie auf schwer zu findende Fehler hindeuten können.