Forum: Mikrocontroller und Digitale Elektronik Eigenen Interrupt


von Wredo (Gast)


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

von Simon Küppers (Gast)


Lesenswert?

Wodurch soll der Interrupt ausgelöst werden?

von Sven Bohner (Gast)


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
}

von Wredo (Gast)


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.

von Joachim (Gast)


Lesenswert?

Was für ein Atmel-Controller ist das denn?

8051, AVR, ARM?

von Michael (Gast)


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

von Michael Wilhelm (Gast)


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

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.