Forum: Mikrocontroller und Digitale Elektronik Interrupt-Programmierung


von Michael K. (Gast)


Lesenswert?

Hallo ihr Experten,

wie kann ich eine LED per interrupt ein/aus schalten?
Genauer gesagt, will ich z.B nach dem ablauf eines Timers, eine bereits
leuhtende LED per interrupt ausschalten lassen. Wenn der
interruptroutiene abgearbeitet ist soll die LED wieder leuchten, und das
ganze nochmal von vorne(also eigentlich einfach ein Blinkverhalten
erzeugen). kann mir vielleicht jemand ein entsprechendes Code-Beispiel
dazu zeigen, vielleicht mit einer kurzen Erklärung dazu? Es geht mir ja
nur darum das Interrupt-Programmierung an sich besser verstehen zu
können und vorallem zu wissen wie man Thumb2 Befehle nutzten kann.
Mein system ist übrigens: LPC1768. Ein Cortex-M3

Gruß und danke schonmal im voraus.

von Uwe (Gast)


Lesenswert?

Bei interupts geht es hauptsächlich darum dem Hauptprogramm möglichst 
VIEL Rechenzeit zu lassen oder für ganz WICHTIGE DINGE das Hauptprogram 
KURZ zu unterbrechen und SCHNELL zu erledigen.

Beispiel Pollen :
Du benutzt den Timer um 10 Sekunden zu warten
1. Alarmwert wird gesetzt
2. der Timer wird gestartet
3. du guckst op der Timer schon im Statusregister das Bit für den 
Alarmwert gesetzt hat wenn nicht mache weiter bei 3
4. Weiteres Program

Während dieser 10 Sekunden kannst die CPU nicht anderes machen nicht 
Rechnen nicht auf Taster reagieren (es sei denn deine Taster würden 
einen Interupt Request auslösen der das Hauptprogram unterbricht).

Beispiel Interupt :
Du benutzt den Timer um 10 Sekunden zu warten
1. Der Interupthandler wird geschrieben und an die Richtige Adressse im 
Speicher gepackt
2. Das Maskenregister des Interupts wird gesetzt
3. Der Alarmwert wird gesetzt
4. Interupts wwerden erlaubt
5. Der Timer wird gestartet
6. weiteres Program (z.B. Rechnen, Taster abfragen usw.)
7. Nach abgelaufener Zeit wird automatisch das Hauptprogramm 
unterbrochen
und der Code aus dem Interupthandler ausgeführt
8. Dort wo das Program unterbrochen wurde wird weitergemacht

Wenn du nun in deinem Interupthandler zu viel Zeit verbringst kann im 
Hauptprogram solange nicht gerechnet werden oder auf Taster reagiert.
Deshalb sollte der Interupthandler so kurz wie möglich sein.

Das Interuptsystem von ARM7 ist Herstellerspezifisch und nicht so 
standartisiert wie bei CortexM3. Jeder Hersteller hat dort seinen 
eigenen Interuptcontroller benutzt soweit ich weiß. Also Datasheets 
Appnotes und Referenzmanuals lesen.

von Michael .K (Gast)


Lesenswert?

Der sinn und zweck der Interrupts ist mir eigentlich schon bekannt. Ich 
wollte nur etwas Handfesteres zum ausprobieren haben. wie man halt 
prinzipiell vorgehen soll, wenn man eben Speziell für den LPC1768 eine 
Interrupt realisieren will.
Ich weis noch nicht mal wie ich die Interruptfunktion überhaupt 
definiren soll. Und was für eine Rolle die Thumb2 Befehlsatz darin 
spielt...Danke Dir aber für die ausführliche Antwort.

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.