externe Interrupts Mega128

Gast #1143706
Lesenswert?

Hallo,

leider habe ich hier ein Problem mit einem externen Interrupt eines 
Mega128.

Ersteres Problem ist was für Register ich setzten muss damit überhaupt 
was passiert wenn ich auf eine fallende Flanke an INT0 (PD0) triggern 
will.

Ich mache bisher:

  EICRA |= (1<<PD0);
  EIMSK |= (1<<INT0);

Gelegentlich kommt es auch zu einem Interrupt aber scheinbar nicht jedes 
mal. Global habe ich interrupts aktiviert, externe Pull-Up Widerstände 
sind vorhanden.

Das zweite Problem ist eher ein kosmetisches. Ich verwende im Moment 
SIGNAL(SIG_INTERRUPT0) weil ich nicht herausfinden konnte welche die 
entsprechende ISR(???) anweisung dafür ist.

Vielen Dank
Thomas
Gast #1143734
Lesenswert?

#include <mega128.h>

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here

}

// Declare your global variables here

void main(void)
{

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x02;
EICRB=0x00;
EIMSK=0x01;
EIFR=0x01;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;

// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      };
}
Gast #1143769
Lesenswert?

Danke Dir!

Leider habe ich jetzt das Problem dass das Programm gelegentlich in den 
Interrupt springt (wenn eine Flanke kommt, also in Ordnung), manchmal 
führt der Controller aber stattdessen einen Reset aus! Kann das ein 
Softwareproblem sein oder meint ihr es liegt an der Hardware?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren