Interrupt im Interrupt konfigurieren :-)

Gast #2520005
Lesenswert?

Hallo zusammen, brauche mal kurz eine schnelle Hilfe.

Ich möchte eine Flankenerkennung mit einem ext. Interrupt realisieren.

Bei der Poitiven flanke soll er das erste mal auslösen und dann im 
interrupt auf eine negative erkennung umstellen.

Klappt noch nicht!!!!!

Hat jemand ne idee?


..hier mal angedeutet was ich will

SIGNAL (SIG_INTERRUPT3)
{
if(dummy==0)
{   uart_puts("positive Flanke");
    EICRA|= (1<<ISC31)|(0<<ISC30);//config für fallende flanke
    dummy=1;
}
else
{    uart_puts("negative Flanke");
     EICRA|= (1<<ISC31)|(1<<ISC30);//config für steigende flanke
     dummy=1;


}

Hauptprogramm:
...INIT...

sei();
EIMSK|=(1<<INT3);
EICRA|= (1<<ISC31)|(1<<ISC30);//für positive Flanken

EIFR=0xFF;

for(;;);
#2520012
Lesenswert?

@  Jens Lampe (Gast)

>Klappt noch nicht!!!!!

>Hat jemand ne idee?

Dazu muss man die entsprechenden Bits KOMPLETT überschreiben, nicht nur 
neu setzen. Ausserdem sollte man sich über Bitmanipulation 
informieren und feststellen, dass man sinnvoll keine Null schieben kann.

>if(dummy==0)
>{   uart_puts("positive Flanke");
>    EICRA|= (1<<ISC31)|(0<<ISC30);//config für fallende flanke

Eher so

     EICRA &= ~((1<<ISC31)|(0<<ISC30));
     EICRA |= (1<<ISC31);

>     EICRA|= (1<<ISC31)|(1<<ISC30);//config für steigende flanke

Dito.

     EICRA &= ~((1<<ISC31)|(0<<ISC30));
     EICRA |= (1<<ISC31)|(1<<ISC30);

Ausserdem kann es nötig sein, direkt nach der Flankenumstellung einen 
parasitär erzeugten Interrupt zu löschen, der eben durch die Umstellung 
generiert wurde. Durch Schreiben einer 1 auf das passende Flag.

MfG
Falk

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