AVR-GCC Namen der Interrupt-Vektoren für ISR(…)

by Dr. Stack van Hay | 13. April 2013 22:14

Die praktische kleine Datenbank am Ende dieser Seite zeigt die Namen aller für einen bestimmten Baustein unterstützten Interrupt-Vektoren für die avr-gcc Funktion ISR(…) an.

Eine tolle Seite für die Fuse-Bits ist übrigens http://www.engbedded.com/fusecalc

[notice]Das Tool ist am Ende dieser Seite![/notice]

Interrupts

Wenn Du auf einem Atmel Mikrocontroller mit Interrupts arbeiten möchtest, hast Du ein paar Dinge zu tun: Du musst den Interrupt selbst einschalten, Du musst Interrupts global einschalten und Du musst sehen, dass es auch eine Interrupt-Quelle gibt und – darum geht es hier – Du musst natürlich angeben, was bei einem Interrupt passieren soll.

In avr-gcc gibst Du an, was bei einem Interrupt passieren soll, in dem Du die Funktion ISR(Vektor) für den Interrupt Deiner Wahl definierst. Der Begriff „Vektor” kommt hier ins Spiel, weil in einer Tabelle im Mikrocontroller die Adresse Deiner Funktion eingetragen wird. Solche Zeiger nennt man auch „Vektoren”.

Das kann zum Beispiel so aussehen:

ISR (TIMER0_COMPA_vect)
{
time++;
}

Deine ISR Routine wird in diesem Fall jetzt immer dann aufgerufen, wenn der Timer 0 einen bestimmten Wert (deswegen Timer Compare) erreicht hat. In ISR wird in diesem Fall eine Variable „time” um 1 erhöht.

Es gibt da noch eine ganze Menge Details zu beachten, normalerweise kann ISR() nicht durch neue Interrupts unterbrochen werden, das kann man natürlich ändern, der Timer muss natürlich auch so konfiguriert werden, dass der Interrupt beizeiten auch ausgelöst wird, der Interrupt muss natürlich überhaupt eingeschaltet sein und Interrupts an sich müssen auch eingeschaltet sein, es stellt sich die Frage, ob es im Code Stellen gibt, die nicht von einem Interrupt unterbrochen werden dürfen und so fort.

Namen für die Interrupt-Vektoren

Ein Schritt der mich nervt ist nachzuschlagen, wie genau der Interrupt-Vektor eigentlich heisst, das steht im Datenblatt, aber kann manchmal auch etwas verwirrend sein. Beim Tiny 45 zum Beispiel gibt es einen Vektor PCINT0, aber es gibt auch einen Pin der PCINT0 heisst, und ein Vektor namens PCINT0 macht gar keinen Sinn, weil es nur einen einzigen PCINT gibt. Das ist nur ein Beispiel von vielen, für die kleinen Probleme, zumal der exakte Name, wie er bei ISR() eingetragen werden muss nicht im Datenblatt steht.

Um diese nervigen Sequenzen professionellen Ratens auszuschalten, habe ich diese kleine Datenbank programmiert, die sich automatisch aktualisiert (hoffentlich) und es Dir ermöglicht, blitzschnell alle Interrupt-Vektoren für einen bestimmten Baustein anzeigen zu lassen. Dann noch den richtigen auszuwählen ist dann nur noch ein No-Brainer.

Die Interrupt-Vektoren-mit-AVR-gcc-Datenbank

Die Datenbank wird automatisch aus den Informationen auf <avr/interrupt.h>: Interrupts bei nongnu.org
generiert.

  1. Familie auswählen.
  2. Baustein innerhalb der Familie auswählen.
  3. Die Namen aller unterstützten Vektoren werden im Format für die ISR(Vektor)-Routine angezeigt.

Familie

Baustein

Unterstützte Interrupt-Vektoren

Source URL: https://drsvanhay.de/avr-gcc-namen-der-interrupt-vektoren-fur-isr/