Path: Home => AVR-Überblick => Interrupt-Programmierung => Quellen
Interrupt

Interruptprogrammierung in AVR Assembler


Hier wird erläutert, von welchen Quellen aus Interrupts ausgelöst werden können.

Quellen von Interrupts

Generell gilt:

Arten Hardware-Interrupts

Bei den folgenden Tabellen bedeutet ein kleines n eine Ziffer, die Zählung beginnt immer mit 0. Die Benennung der Interrupts in den Handbüchern sind uneinheitlich, die Abkürzungen für die Benennung der Interrupts wurden für eine übersichtliche Darstellung gewählt und sind nicht offiziell.

Folgende hauptsächlichen Interrupts sind zu unterscheiden. Aufgelistet ist die Hardware, wann ein Interrupt erfolgt, Erläuterungen dazu, die Verfügbarkeit der Interruptart bei den AVR-Typen und der Name, unter dem der Interrupt in den folgenden Tabellen gefunden wird.
Gerät Interrupt bei ... Erläuterung Verfügbarkeit Name(n)
Externe Interrupts Pegelwechseln an einem bestimmten Portanschluss (INTn) Wählbar, ob jeder Pegelwechsel, nur solche von Low auf high oder nur solche von High auf Low einen Interrupt auslösen können (ISC-Bits). INT0 bei allen
viele haben INT1
wenige INT2
INTn
Port Interrupts Pegelwechsel an einem Port (PCIn) Wählbar mit Maske, welche Bits bei Pegelwechsel einen Interrupt auslösen bei vielen
tiny/mega
PCIn
Timer Interrupts Überlauf Timer überschreitet seinen Maximalwert und beginnt bei Null; bei 8-Bit-Timern 256, bei 16-Bit-Timern 65536, bei CTC auch der im Compare-Register A eingestellte Maximalwert bei allen Timern TCnO
Vergleichswert bei Timern mit nur einem Vergleichswert: Übereinstimmung mit COMP-Wert erreicht viele TCnC
Vergleichs-
werte A, B, C
bei Timern mit mehreren Vergleichswerten: Übereinstimmung mit COMP-Wert erreicht A,B: viele
C wenige
TCnA...
TCnC
Fangwert bei Timer im Zählmodus: Übereinstimmung der gezählten Impulse mit CAPT-Wert erreicht viele TCnP
UART Zeichen
empfangen
ein vollständiges Zeichen wurde empfangen und liegt im Eingangspuffer viele UnRX
Senderegister
frei
Zeichen in Sendepuffer übernommen, frei für nächstes Zeichen viele UnUD
Senden
beendet
letztes Zeichen fertig ausgesendet, Senden beendet viele UnTX
EEPROM EEPROM
ready
Schreibvorgang im EEPROM ist beendet, der nächste Schreibvorgang kann begonnen werden fast
alle
EERY
ADC Wandlung
komplett
eine Umwandlung der Eingangsspannung ist erfolgt, der Ergebniswert kann vom Datenregister abgeholt werden alle
mit ADC
ADC
Analog
Komparator
Wechsel
bei
Vergleich
je nach Einstellung der ACIS-Bits erfolgt ein Interrupt bei jedem Polaritätätswechsel oder nur bei positiven bzw. negativen Flanken alle ANA
ANAn
Weitere (diverse)
(weitere Interrupt-Arten sind den Handbüchern zu entnehmen) einige  
Jeder dieser Interrupts ist per Software ein- und ausschaltbar, auch während des Programmablaufs. Die Voreinstellung beim RESET ist, dass keiner dieser Interrupts ermöglicht ist.

To the top of that page

AVR-Typen mit Ein-Wort-Vektoren

Bedingt durch die unterschiedliche Ausstattung der AVR-Typen mit internem SRAM ist bei den AVR-Typen die Interrupt-Vektoren-Tabelle entweder auf Ein-Wort- (RJMP) oder Zwei-Wort-Instruktionen (JMP) ausgelegt. AVR-Typen mit wenig SRAM kommen mit einem relativen Sprung aus und benötigen daher ein Wort pro Vektor. Jedes Programmwort in der Tabelle entspricht genau einem Interrupt.

In der folgenden Tabelle sind die AVR-Typen mit ihren Interrupts aufgelistet. Die Adressen geben an, an welcher Stelle der Tabelle der Vektor liegt. Sie geben gleichzeitig die Priorität an: je niedriger die Adresse desto höher der Vorrang des Interrupts. Leere Kästen geben an, dass dieser Vektor nicht verfügbar ist.
Typ/Adr0000000100020003000400050006000700080009000A000B000C000D000E000F00100011001200130014
AT90S1200RESINT0TC0OANA                 
AT90S2313RESINT0INT1TC1PTC1CTC1OTC0OU0RXU0UDU0TXANA          
AT90S2323RESINT0TC0O                  
AT90S2343RESINT0TC0O                   
AT90S4433RESINT0INT1TC1PTC1CTC1OTC0OSPISU0RXU0UDU0TXADCEERYANA       
AT90S4434RESINT0INT1TC2CTC2OTC1PTC1ATC1BTC1OTC0OSPISU0RXU0UDU0TXADCEERYANA    
AT90S8515RESINT0INT1TC1PTC1ATC1BTC1OTC0OSPISU0RXU0UDU0TXANA        
AT90S8535RESINT0INT1TC2CTC2OTC1PTC1ATC1BTC1OTC0OSPISU0RXU0UDU0TXADCEERYANA    
ATmega8RESINT0INT1TC2CTC2OTC1PTC1ATC1BTC1OTC0OSPISU0RXU0UDU0TXADCEERYANATWISPMR  
ATmega8515RESINT0INT1TC1PTC1ATC1BTC1OTC0OSPISU0RXU0UDU0TXANAINT2TC0CEERYSPMR    
ATmega8535RESINT0INT1TC2CTC2OTC1PTC1ATC1BTC1OTC0OSPISU0RXU0UDU0TXADCEERYANATWIINT2TC0CSPMR
ATtiny11RESINT0PCI0                  
ATtiny12RESINT0PCI0                  
ATtiny13RESINT0PCI0TC0OEERYANATC0ATC0BWDTADC           
ATtiny15LRESINT0PCI0TC1ATC1OTC0OEERYANAADC            
ATtiny22RESINT0TC0O                  
ATtiny24RESINT0PCI0PCI1WDTTC1PTC1ATC1BTC1OTC0ATC0BTC0OANAADCEERYUSISUSIO    
ATtiny25RESINT0PCI0TC1ATC1OTC0OEERYANAADCTC1BTC0ATC0BWDTUSISUSIO      
ATtiny26RESINT0PCI0TC1ATC1BTC1OTC0OUSISUSIOEERYANAADC         
ATtiny28RESINT0INT1PCI0TC0OANA               
ATtiny44RESINT0PCI0PCI1WDTTC1PTC1ATC1BTC1OTC0ATC0BTC0OANAADCEERYUSISUSIO    
ATtiny45RESINT0PCI0TC1ATC1OTC0OEERYANAADCTC1BTC0ATC0BWDTUSISUSIO      
ATtiny84RESINT0PCI0PCI1WDTTC1PTC1ATC1BTC1OTC0ATC0BTC0OANAADCEERYUSISUSIO    
ATtiny85RESINT0PCI0TC1ATC1OTC0OEERYANAADCTC1BTC0ATC0BWDTUSISUSIO      
ATtiny261RESINT0PCI0TC1ATC1BTC1OTC0OUSISUSIOEERYANAADCWDTINT1TC0ATC0BTC0PTC1DFAUL  
ATtiny461RESINT0PCI0TC1ATC1BTC1OTC0OUSISUSIOEERYANAADCWDTINT1TC0ATC0BTC0PTC1DFAUL  
ATtiny861RESINT0PCI0TC1ATC1BTC1OTC0OUSISUSIOEERYANAADCWDTINT1TC0ATC0BTC0PTC1DFAUL  
ATtiny2313RESINT0INT1TC1PTC1ATC1OTC0OU0RXU0UDU0TXANAPCI0TC1BTC0ATC0BUSISUSIOEERYWDTO  
Man beachte, dass To the top of that page

AVR-Typen mit Zwei-Wort-Vektoren

Bei AVR-Typen mit größerem SRAM kann ein Teil des verfügbaren Programmraums mit relativen Sprungbefehlen wegen der begrenzten Sprungdistanz nicht mehr erreicht werden. Diese Typen verwenden daher pro Vektor zwei Speicherworte, so dass der absolute Sprungbefehl JMP verwendet werden kann, der zwei Worte einnimmt.

Die folgenden Tabellen listen die bei diesen AVR-Typen verfügbaren Interrupts auf. Da die Anzahl an Vektoren sehr groß ist, ist die Tabelle in jeweils 16 Vektoren unterteilt.
AVR-Typ/Adr00000002000400060008000A000C000E00100012001400160018001A001C001E
AT90CAN32RESINT0INT1INT2INT3INT4INT5INT6INT7TC2CTC2OTC1PTC1ATC1BTC1CTC1O
AT90CAN64RESINT0INT1INT2INT3INT4INT5INT6INT7TC2CTC2OTC1PTC1ATC1BTC1CTC1O
AT90CAN128RESINT0INT1INT2INT3INT4INT5INT6INT7TC2CTC2OTC1PTC1ATC1BTC1CTC1O
ATmega16RESINT0INT1TC2CTC2OTC1PTC1ATC1BTC1OTC0OSPISU0RXU0UDU0TXADCEERY
ATmega32RESINT0INT1INT2TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega48RESINT0INT1PCI0PCI1PCI2WDTTC2ATC2BTC2OTC1PTC1ATC1BTC1OTC0ATC0B
ATmega64RESINT0INT1INT2INT3INT4INT5INT6INT7TC2CTC2OTC1PTC1ATC1BTC1OTC0C
ATmega88RESINT0INT1PCI0PCI1PCI2WDTTC2ATC2BTC2OTC1PTC1ATC1BTC1OTC0ATC0B
ATmega103RESINT0INT1INT2INT3INT4INT5INT6INT7TC2CTC2OTC1PTC1ATC1BTC1OTC0C
ATmega128RESINT0INT1INT2INT3INT4INT5INT6INT7TC2CTC2OTC1PTC1ATC1BTC1OTC0C
ATmega161RESINT0INT1INT2TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU1RXU0UD
ATmega162RESINT0INT1INT2PCI0PCI1TC3PTC3ATC3BTC3OTC2CTC2OTC1PTC1ATC1BTC1O
ATmega163RESINT0INT1TC2CTC2OTC1PTC1ATC1BTC1OTC0OSPISU0RXU0UDU0TXADCEERY
ATmega164RESINT0INT1INT2PCI0PCI1PCI2PCI3WDTTC2ATC2BTC2OTC1PTC1ATC1BTC1O
ATmega165RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega168RESINT0INT1PCI0PCI1PCI2WDTTC2ATC2BTC2OTC1PTC1ATC1BTC1OTC0ATC0B
ATmega169RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
AVR-Typ/Adr00000002000400060008000A000C000E00100012001400160018001A001C001E
ATmega323RESINT0INT1INT2TC2CTC20TC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega324RESINT0INT1INT2PCI0PCI1PCI2PCI3WDTTC2ATC2BTC2OTC1PTC1ATC1BTC1O
ATmega325RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega329RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega406RESBATIINT0INT1INT2INT3PCI0PCI1WDTWAKETC1CTC1OTC0ATC0BTC0OTWBU
ATmega640RESINT0INT1INT2INT3INT4INT5INT6INT7PCI0PCI1PCI2WDTTC2ATC2BTC2O
ATmega644RESINT0INT1INT2PCI0PCI1PCI2PCI3WDTTC2ATC2BTC2OTC1PTC1ATC1BTC1O
ATmega645RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega649RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega1280RESINT0INT1INT2INT3INT4INT5INT6INT7PCI0PCI1PCI2WDTTC2ATC2BTC2O
ATmega1281RESINT0INT1INT2INT3INT4INT5INT6INT7PCI0PCI1PCI2WDTTC2ATC2BTC2O
ATmega2560RESINT0INT1INT2INT3INT4INT5INT6INT7PCI0PCI1PCI2WDTTC2ATC2BTC2O
ATmega2561RESINT0INT1INT2INT3INT4INT5INT6INT7PCI0PCI1PCI2WDTTC2ATC2BTC2O
ATmega3250RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega3290RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega6450RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX
ATmega6490RESINT0PCI0PCI1TC2CTC2OTC1PTC1ATC1BTC1OTC0CTC0OSPISU0RXU0UDU0TX


To the top of that page

Interrupts mit den Vektoren von 0020 bis 003E:
AVR-Typ/Adr00200022002400260028002A002C002E00300032003400360038003A003C003E
AT90CAN32TC0CTC0OCANIOVRISPISU0RXU0UDU0TXANACADCEERYTC3PTC3ATC3BTC3CTC3O
AT90CAN64TC0CTC0OCANIOVRISPISU0RXU0UDU0TXANACADCEERYTC3PTC3ATC3BTC3CTC3O
AT90CAN128TC0CTC0OCANIOVRISPISU0RXU0UDU0TXANACADCEERYTC3PTC3ATC3BTC3CTC3O
ATmega16ANATWIINT2TC0CSPMR           
ATmega32ADCEERYANATWISPMR           
ATmega48TC0OSPISU0RXU0UDU0TXADCEERYANATWISPMR      
ATmega64TC0OSPISU0RXU0UDU0TXADCEERYANATC1CTC3PTC3ATC3BTC3CTC3OU1RXU1UD
ATmega88TC0OSPISU0RXU0UDU0TXADCEERYANATWISPMR      
ATmega103TC0OSPISU0RXU0UDU0TXADCEERYANA        
ATmega128TC0OSPISU0TXU0UDU0TXADCEERYANATC1CTC3PTC3ATC3BTC3CTC3OU1RXU1UD
ATmega161U1UDU0TXU1TXEERYANA           
ATmega162TC0CTC0OSPISU0RXU1RXU0UDU1UDU0TXU1TXEERYANASPMR    
ATmega163ANATWI              
ATmega164TC0ATC0BTC0OSPISU0RXU0UDU0TXANAADCEERYTWI     
ATmega165USISUSIOANAADCEERYSPMR          
ATmega168TC0OSPISU0RXU0UDU0TXADCEERYANATWISPMR      
ATmega169USISUSIOANAADCEERYSPMRLCD         
AVR-Typ/Adr00200022002400260028002A002C002E00300032003400360038003A003C003E
ATmega323ADCEERYANATWSI            
ATmega324TC0ATC0BTC0OSPISU0RXU0UDU0TXANAADCEERYTWI     
ATmega325USISUSIOANAADCEERYSPMR          
ATmega329USISUSIOANAADCEERYSPMRLCD         
ATmega406TWIVADCCADCCADREERYSPMR          
ATmega640TC1PTC1ATC1BTC1CTC1OTC0ATC0BTC0OSPISU0RXU0UDU0TXANAADCEERYTC3P
ATmega644TC0ATC0BTC0OSPISU0RXU0UDU0TXANAADCEERYTWI     
ATmega645USISUSIOANAADCEERYSPMR          
ATmega649USISUSIOANAADCEERYSPMRLCD         
ATmega1280TC1PTC1ATC1BTC1CTC1OTC0ATC0BTC0OSPISU0RXU0UDU0TXANAADCEERYTC3P
ATmega1281TC1PTC1ATC1BTC1CTC1OTC0ATC0BTC0OSPISU0TXU0UDU0TXANAADCEERYTC3P
ATmega2560TC1PTC1ATC1BTC1CTC1OTC0ATC0BTC0OSPISU0RXU0UDU0TXANAADCEERYTC3P
ATmega2561TC1PTC1ATC1BTC1CTC1OTC0ATC0BTC0OSPISU0TXU0UDU0TXANAADCEERYTC3P
ATmega3250USISUSIOANAADCEERYSPMR PCI2PCI3       
ATmega3290USISUSIOANAADCEERYSPMRLCDPCI2PCI3       
ATmega6450USISUSIOANAADCEERYSPMR PCI2PCI3       
ATmega6490USISUSIOANAADCEERYSPMRLCDPCI2PCI2        


To the top of that page

Vektoren mit Adressen 0040 bis 005F:
AVR-Typ/Adr00400042004400460048004A004C004E00500052005400560058005A005C005E
AT90CAN32U1RXU1UDU1TXTWISPMR           
AT90CAN64U1RXU1UDU1TXTWISPMR           
AT90CAN128U1RXU1UDU1TXTWISPMR           
ATmega64U1TXTWISPMR             
ATmega128U1TXTWISPMR             
ATmega1280TC3ATC3BTC3CTC3OU1RXU1UDU1TXTWISPMRTC4PTC4ATC4BTC4CTC4OTC5PTC5A
ATmega1281TC3ATC3BTC3CTC3OU1RXU1UDU1TXTWISPMRTC4PTC4ATC4BTC4CTC4OTC5PTC5A
ATmega2560TC3ATC3BTC3CTC3OU1RXU1UDU1TXTWISPMRTC4PTC4ATC4BTC4CTC4OTC5PTC5A
ATmega2561TC3ATC3BTC3CTC3OU1RXU1UDU1TXTWISPMRTC4PTC4ATC4BTC4CTC4OTC5PTC5A


Vektoren mit Adressen 0060 bis 0070:
AVR-Typ/Adr00600062006400660068006A006C006E0070
ATmega1280TC5BTC5CTC5OU2RXU2UDU2TXU3RXU3UDU3TX
ATmega1281TC5BTC5CTC5O      
ATmega2560TC5BTC5CTC5OU2RXU2UDU2TXU3RXU3UDU3TX
ATmega2561TC5BTC5CTC5O      


To the top of that page

2009 by http://www.avr-asm-tutorial.net