Interrupts: Quellen
Interrupt-Quellen haben alle ein eigenes Maskenregister, ein eigenes Anzeigeregister und einen eigenen Einsprungpunkt (in dieser Speicheradresse ist der Bedinn der ISR gespeichert) im Programm ab Adresse 0x0000.
Eine Adresse einer Quelle ist immer vier Byte lang.
Eine Aufstellung der Interruptquellen ist im Datenblatt zu finden.
In diesem Kurs wird zunächst nur auf die externen Interrupts INT0 und INT1 eingegangen
Interrupt-Quellen-Verzeichnis
Vektor-nummer |
Programm-adresse |
Quelle |
Definition |
1 |
0x0000 |
RESET |
External Pin, Power-on Reset, Brown-out Reset and Watchdog System Reset |
2
|
0x0002
|
INT0
|
External Interrupt Request 0
|
3
|
0x0004
|
INT1
|
External Interrupt Request 1
|
4 |
0x0006 |
PCINT0 |
Pin Change Interrupt Request 0 |
5 |
0x0008 |
PCINT1 |
Pin Change Interrupt Request 1 |
6 |
0x000A |
PCINT2 |
Pin Change Interrupt Request 2 |
7 |
0x000C |
WDT |
Watchdog Time-out Interrupt |
8 |
0x000E |
TIMER2_COMPA |
Timer/Counter2 Compare Match A |
9 |
0x0010 |
TIMER2_COMPB |
Timer/Counter2 Compare Match B |
10 |
0x0012 |
TIMER2_OVF |
Timer/Counter2 Overflow |
11 |
0x0014 |
TIMER1_CAPT |
Timer/Counter1 Capture Event |
12 |
0x0016 |
TIMER1_COMPA |
Timer/Counter1 Match A |
13 |
0x0018 |
TIMER1_COMPB |
Timer/Counter1 Match B |
14 |
0x001A |
TIMER1_OVF |
Timer/Counter1 Overflow |
15 |
0x001C |
TIMER0_COMPA |
Timer/Counter0 Match A |
16 |
0x001E |
TIMER0_COMPB |
Timer/Counter0 Match B |
17 |
0x0020 |
TIMER0_OVF |
Timer/Counter0 Overflow |
18 |
0x0022 |
SPI STC |
SPI Serial Transfer Complete |
19 |
0x0024 |
USART_RX |
USART RX Complete |
20 |
0x0026 |
USART_UDRE |
USART Data Register Empty |
21 |
0x0028 |
USART_TX |
USART TX Complete |
22 |
0x002A |
ADC |
ADC Conversion Complete |
23 |
0x002C |
EE READY |
EEPROM Ready |
24 |
0x002E |
ANALOG COMP |
Analog Comparator |
25 |
0x0030 |
TWI |
2-wire Serial Interface |
26 |
0x0032 |
SPM READY |
Store Program Memory Ready |
Die einzelnen Interrupts haben Prioritäten bzgl. ihres Aufrufes. Die Priorität nimmt mit steigender Vektornummer (siehe Tabelle) ab. Sind beispielsweise INT 0 und INT1 gesetzt (jeweiligen IRB ist 1), so wird INT0 zuerst bearbeitet.
Wenn die Interrupts nicht benötigt werden, kann der dafür vorgesehene Speicherbereich für Programmcode genutzt werden.Standardinterrupts sind zum Beispiel:
Timerinterrupt
Ein Timerinterrupt wird verwendet, wenn sich eine bestimmte Funktion periodisch wiederholen soll.
UART Empfangsinterrupt
Ein UART Empfangsinterrupt wird, wie der Name bereits sagt, zum Empfangen von Daten verwendet. Hier wird ein kontinuierliches Empfangen von Daten realisiert. Dazu wird programmtechnisch periodisch ein Interrupt angefordert. Der Interrupt veranlasst das Einlesen des empfangenen Bytes. Das empfangene Datenbyte wird meist (je nach Controller) in einen Puffer kopiert. Anschließend wird das neue Datenbyte bitweise empfangen und in das Empfangsschieberegister des UART geschrieben. Hierbei muss darauf geachtet werden, dass das Byte von der CPU schnell genug ausgelesen wird, da es sonst überschrieben wird. Dieser Fehler nennt sich Überlauf und wird durch das Statusregister im UART signalisiert.