Eigenen Interrupt

Gast #149826
Lesenswert?

Hallo,

ich brauche bei einem Atmel-Controller-Programm einen eigenen
Interrupt, den ich aufrufen kann, der dann so funktioniert, wie z.B die
Timer- oder SPI-Interrupts oder so. Ich müsste also per Hand irgendwie
ein Flag setzen, so dass eine Interruptroutine darauf reagiert. Diese
Routine müsste dann auch mit eine Priorität versehen werden! Wie macht
man das am besten?

mfg
Wredo
Gast #149828
Lesenswert?

schreibe eine normale funktion, die von einem anderen interrupt nicht
unterbrochen werden kann...

bsp:

void deineFunktion(parameter)
    cli();    //global interrupts ausschalten
    ....dein code
    sei();    //global interrupts einschalten
}
Gast #149829
Lesenswert?

interrupts ausstellen geht leider nicht, da zwei andere Interrupts noch
wichtiger sind. Ich muss irgendwie eine Funktion selber aufrufen, die
höher priorisiert ist, als andere Interrupts, aber die beiden anderen
nicht beeinflusst.
Gast #149831
Lesenswert?

hallo.

wenn wir mal unterstellen, daß es sich um einen avr handelt, dürftest
du schwierigkeiten mit der prioritätenvergabe haben. die ist da ja
fest.
je nachdem, wie hoch deine höherprioren interrupts angesiedelt sind,
müßtest du eben den "benutzerdefinierten" interrupt unterhalb davon
generieren, z.b. mit einer ad-wandlung, oder starte einen timer, der im
nächsten zyklus überläuft...
die antwortzeit vom "auslösewunsch" bis zum sprung in die
interruptroutine erhöht sich natürlich entsprechend.

gruß

michael
Gast #149832
Lesenswert?

Bei einem AVR läßt sich ein Software-Interrupt generieren, indem man
einen ext. Interrupt definiert und dann den PIN als Ausgang deklariert.
Wenn dann dieser Ausgang einen Logikpegel wechselt (z. B. von High auf
Low, wenn so deklariert), dann wird eine Int-Routine angesprungen.
MW

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