Forum: Mikrocontroller und Digitale Elektronik brauche hilfe: 2 interrupts auf einem xmega


von Huck F. (debil)


Lesenswert?

hi,

ich möchte auf einem xmega-board zwei interrupt auf einem port auslösen.
ein rechtecksignal wird auf pin0 und pin1 angelegt.
bei einer HIGH-flanke soll interrupt0 ausgelöst werden und alle pins des 
port_c auf HIGH setzten. bei einer LOW-flanke soll interrupt1 ausgelöst 
werden und alle pins des port_c auf LOW setzen.

leider wird scheinbar nur ein interrupt ausgelöst, denn port_c bleibt 
durchgehend auf HIGH. Auf die fallende flanke am eingang wird scheinbar 
nicht reagiert.

hier die wichtigsten befehle aus meinem code:

//steigende Flanke
ISR(PORTF_INT0_vect)
{
  PORTC.OUTSET = 0xff;  //Alle Pin des PortC werden HIGH
}

//fallende Flanke
ISR(PORTF_INT1_vect)
{
  PORTC.OUTSET = 0x00;  //Alle Pin des PortC werden LOW
}

int main (void)
{
     PORTF.DIR = 0x00;  //PORTF Eingang
     PORTC.DIR = 0xFF;       //PORTC Ausgang

     sei();
     PMIC.CTRL = PMIC_MEDLVLEN_bm;

// Pullup einschalten | auf steigende Flanke reagieren
     PORTF.PIN0CTRL = PORT_OPC_PULLUP_gc | 1;
// Pullup einschalten | auf fallende Flanke reagieren
     PORTF.PIN1CTRL = PORT_OPC_PULLUP_gc | 2;
// PIN0 des PortF als Quelle für Interrupt0
     PORTF.INT0MASK = 0x01;
// PIN3 des PortF als Quelle für Interrupt1
     PORTF.INT1MASK = 0x02;
PORTF_INTCTRL  = PORT_INT0LVL_MED_gc | PORT_INT1LVL_MED_gc;


return 0;
}


ich sitz da schon ne ganze weile dran aber kann den fehler nicht 
beseitigen. wäre sehr nett, wenn da jemand einen blick drauf werfen 
könnte.

danke

von Huck F. (debil)


Lesenswert?

hat sich erledigt, hab den fehler in der interrupt1-routine gefunden.

danke trotzdem, falls sich jemand trotzdem die mühe gemacht hat :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.