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
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...
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
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.
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 :-)
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.
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)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.