Forum: Mikrocontroller und Digitale Elektronik Grundlagenfrage: Erster Befehl im Interrupt - disablen?


von Grundlagenfrage (Gast)


Lesenswert?

Hi,

mal wieder eine Frage:

muss der erste Befehl in einer ISR die Abschaltung des entsprechenden 
Interrupts sein, oder genügt es, das auslösende Interruptflag zu 
löschen?
...oder empiehlt sich ggf. sogar, beides auszuführen?

Ich bin mir nicht sicher, da in einigen Datenblättern steht, dass das 
Interruptflag bei Bearbeitung der entsprechenden ISR automatisch 
gelöscht würde, dort allerdings nicht klar hervorgeht, ob dies bereits 
am Anfang, oder erst am Ende der ISR geschieht...

DANKE!

von Oliver J. (skriptkiddy)


Lesenswert?

Welcher Mikrocontroller?

Gruß Oliver

von Karl H. (kbuchegg)


Lesenswert?

Welcher µC?

von asdf (Gast)


Lesenswert?

Welcher Mikrocontroller?

von Sascha W. (sascha-w)


Lesenswert?

du solltest erst mal den Controller nennen um den's geht.

Bei AVR's brauchst du nichts derartiges zu tun. Mit Auslösen des INT 
werden weitere INT's gesperrt, bis am Ende der ISR mit den Befehl RETI 
der ursprüngliche Interruptzustand wiederhergestellt wird.

Sascha

von Karl H. (kbuchegg)


Lesenswert?

Man kann auch mal logisch überlegen.
An welcher Stelle 'weiß' die CPU am einfachsten, um welchen Interrupt es 
sich handelt?

  An der Stelle an der sie in die ISR verzweigt oder an
  der Stelle an der sie mit einem RETI wieder aus der ISR rauskommt?

Wo hat man daher weniger Arbeit, das entsprechende Flag zurückzusetzen 
und wie will man eigentlich den Fall handhaben, wenn während einer ISR 
dieselbe Interruptbedingung schon wieder eintritt?

von Grundlagenfrage (Gast)


Lesenswert?

wäre ein MSP430-Controller.

von W.S. (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Man kann auch mal logisch überlegen.

Ja, kann man. Aber besser ist es allemal, die Doku gründlich zu lesen. 
Manche Interrupts bei manchen uC sind statisch, werden also sofort 
wieder ausgelöst, wenn die Ursache nicht in der ISR beseitigt wird und 
andere sind flankengesteuert und werden nur einmal ausgelöst, nämlich 
mit der Flanke, mit der die Bedingung wahr wird.

Dazu kommt noch ein generell unterschiedliches Verhalten der diversen uC 
bei Interrupts. Manche werden per Spezialbefehl beendet (RETI und so), 
andere nicht...

Also: Buch lesen, das hilft am ehesten.

W.S.

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.