Forum: Mikrocontroller und Digitale Elektronik Interrupt Steuerung - ATmega2560


von Markus N. (maki535)


Lesenswert?

Hallo Leute,
mich interessiert die Interrupt-Steuerung des ATmega2560 besonders, da 
ich dabei bin ihn mit meinem Freund zu programmieren. Leider gehör ich 
noch eher zu den Anfängern und finde daher in Google kein passendes 
Ergebnis, dass ich auch verstehe. Daher würde ich euch bitten, mir ein 
wenig über die Interrupt-Steuerung zu erzählen.

danke und lg

von STK500-Besitzer (Gast)


Lesenswert?

Guck dir die Tutorien und das Datenblatt an.
Da ist alles beschrieben.

http://www.mikrocontroller.net/articles/AVR-Tutorial
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Die Tutorien beziehen sich zwar auf einen anderen AVR-Controller, sind 
aber auf Deutsch und gelten allgemein.
Im Datenblatt zum Mega2560 stehen dann controllerspezifische Angaben - 
allerdings in Englisch...

von Markus N. (maki535)


Lesenswert?

Danke, das hat mir schon etwas geholfen. Nur was ich noch nicht ganz 
verstehe:
*) wie sieht ein Interrupt Hardwaremäßig aus?
*) Gibt es verschiedene Arten (z.B. schnell, langsam, billig, teuer, 
etc.)
*) Aufbau (hardwaremäßig)

lg

von Karl H. (kbuchegg)


Lesenswert?

Markus Neubauer schrieb:
> Danke, das hat mir schon etwas geholfen. Nur was ich noch nicht ganz
> verstehe:
> *) wie sieht ein Interrupt Hardwaremäßig aus?

Kommt drauf an, welcher es ist.
WEnn es ein externer Interrupt ist:

Da sein Pin, welcher INterrupt auslösen kann
Pin werden freigeschaltet, so dass Interrupt können aulösen
Wenn Flanke kommt (oder Pegel anliegt), µC geht in ISR Routine

fertig


Im Ernst: was daran ist dir unklar?
Ein Interrupt ist einfach nur eine UNterbrechungt des normalen 
Programmflusses. Wenn der INterrupt ausgelöst wird, lässt der µC alles 
stehen und liegen und springt an eine ganz bestimmte (und festgelegte) 
Speicherzelle mit der Programmausführung.

That's it - im großen und ganzen.

Mehr passiert da nicht.
Ein Interrupt kann verschieden ausgelöst werden, allen gemeinsam ist 
aber, dass der Auslösemechanismus in einem Register ein Bit auf 1 setzt.
Nach JEDEM Assembler-Befehl sieht sich der µC alle diese Bits an, und 
wenn eines davon auf 1 ist, dann macht er einen Unterprogrammaufruf zu 
der zugehgörigen Funktion.

Da ist nichts magisches drann.

Wie schon gesagt: studier die Tutorials. Und wenn dann noch Fragen sind 
- gerne. Aber bitte nicht vom Kaliber 'Bitte erklärt mir die Welt'. 
Konkrete Fragen zu konkreten spezifischen Problemen.

von Günther_1966 (Gast)


Lesenswert?

Hallo

HTL....
Das hört sich stark nach Hausübung oder Referat an, dafür sind wir bitte 
nicht da. Sie dir mal das Datenblatt oder die Tutorials im Forum an, da 
wirst du sicher fündig ;-)
Oder frag mal deinen Lehrer, für das sind die ja schließlich und endlich 
da...

Grüße aus dem schönen Vorarlberg :-)

von Falk B. (falk)


Lesenswert?

Siehe Interrupt.

von Markus N. (maki535)


Lesenswert?

Hallo, ja teilweise stimmt es ja auch. Aber im Internet finde ich echt 
keine Beiträge die nicht kompliziert sind. Und im Datenblatt ist es auch 
nicht einfacher. Daher wollte ich nochmals fragen, ob ihr etwas über den 
Interrupt-Controller wisst, wenn ja teilt mir dies bitte mit.

von Karl H. (kbuchegg)


Lesenswert?

Markus Neubauer schrieb:
> Daher wollte ich nochmals fragen, ob ihr etwas über den
> Interrupt-Controller wisst, wenn ja teilt mir dies bitte mit.

Das ist leicht.
Im ATmega2560 gibt es schlicht und ergreifend keinen.

du gibst die Interrupts frei, schreibst eine ISR, machst einen sei() und 
wenn das interruptwürdige Ereignis eintritt wird die ISR aufgerufen.

Liegen gleichzeitig mehrere Interrupt Anforderungen vor, dann werden sie 
in der Reihenfolge bearbeitet, in der die Interrupts in der Tabelle 14.2 
im Datenblatt aufgeführt sind.

Fertig. Mehr gibt es dazu im Grunde nicht zu sagen.
(Natürlich gibt es dazu noch viel zu erzählen. Aber fürs erste reicht 
das, um mit Interrupts loslegen zu können)

von Markus N. (maki535)


Lesenswert?

Hallo, ich hätte noch eine Frage:
Wie wird ein Interrupt ausgelöst?
Ich weiß zwar, dass es Interrupt-Quellen gibt, aber wie funktioniert das 
intern.

von Karl H. (kbuchegg)


Lesenswert?

Markus Neubauer schrieb:
> Hallo, ich hätte noch eine Frage:
> Wie wird ein Interrupt ausgelöst?

Je nach Interrupt verschieden.
Es gibt Interrupts, die werden durch einen externen Pin ausgelöst. Es 
gibt aber auch Interrupts die werden durch spezielle Ereignisse bzw. 
Konstellationen im µC ausgelöst (zb Timer Overflow)

> Ich weiß zwar, dass es Interrupt-Quellen gibt, aber wie funktioniert das
> intern.

Du stellst dir das alles viel zu kompliziert vor.
Im µC existieren ein paar Bits in Hardware. Nach jedem Assembler-Befehl 
klappert die CPU diese Bits ab und sieht nach, ob und wenn ja welches 
davon gesetzt ist. Ist eines davon gesetzt (und der globale Interrupt 
freigegeben), dann wird der entsprechende Interrupt Vektor angesprungen 
(mit einem CALL), der globale Interrupt gesperrt und das entsprechenden 
Bit gelöscht. Fertig. Mehr passiert da nicht.

Und dann gibt es eben noch Mechanismen, die diese besagten Bits auf 1 
setzt. Zb. die Eingangsüberwachung der Pins, zb der Overflow-'Carry' vom 
Timer. Je nach Interrupt-Typ gibt es eine andere Ansprechhardware. Aber 
alles läuft dort zusammen, wo diese besagten Bits auf 1 gesetzt werden, 
die die CPU nach jedem Assembler-Befehl bei global freigegebenen 
Interrupts untersucht.
Hat der Timer einen Overflow, dann detektiert das die Timer Hardware und 
setzt das zugehörige Bit auf 1. Damit ist sein Job zur Interrupt 
Erkennung erledigt.

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.