de:avr:interrupts
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| de:avr:interrupts [2010/10/15 12:49] – Wember | de:avr:interrupts [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Interrupts ====== | ====== Interrupts ====== | ||
| - | Interrupts im AVR können | + | Interrupts |
| - | Jeder Interrupt | + | Jeder Interrupt |
| - | Ereignisse sind auch an die Interrupt-Masken | + | |
| - | Wenn das Interruptbit | + | |
| - | Nachdem das Interrupt-Programm ausgeführt wurde, fährt der Prozessor mit seinem pausierten Hauptprogramm fort. | + | |
| <box 100% round # | <box 100% round # | ||
| - | Um Interrupts mit der AVR LibC Bibliothek zu nutzen, ist es notwendig | + | Um Interrupts mit der AVR LibC Bibliothek zu nutzen, ist es notwendig interrupt.h einzubinden. Der Code der ausgeführt wird, wenn der Interrupt stattfindet, |
| <code c> | <code c> | ||
| Line 17: | Line 14: | ||
| ISR(XXX_vect) | ISR(XXX_vect) | ||
| { | { | ||
| - | // Do something | + | // Anweisungen |
| } | } | ||
| </ | </ | ||
| Line 23: | Line 20: | ||
| </ | </ | ||
| - | Das globale Erlauben aller Interrupts wird vom Control- und Statusregister SREG konfiguriert. | + | Die generelle Erlaubnis sämtlicher |
| - | Die Option | + | |
| - | Das generelle | + | |
| - | ~~PB~~ | + | < |
| <box 100% round # | <box 100% round # | ||
| - | Angenommen | + | Angenommen, in diesem Programm wird eine 16-Bit Variable |
| <code c> | <code c> | ||
| Line 47: | Line 42: | ||
| int main() | int main() | ||
| { | { | ||
| - | // Gibt x einen Wert | + | // x einen Wert geben |
| x = 0x1111; | x = 0x1111; | ||
| - | // Erlaubt | + | // Interrupts |
| sei(); | sei(); | ||
| - | // Gibt y den Wert von x | + | // y erhält |
| y = x; | y = x; | ||
| } | } | ||
| Line 59: | Line 54: | ||
| - | Das Programm ist sehr einfach - zuerst bekommt die Variable x den Wert 0x1111 und später wird der Wert an y weitergegeben. Wenn ein Interrupt zwischen beiden Operationen | + | Das Programm |
| - | Um den dritten und ungewollten Wert zu verhindern, sollten alle Interrupts temporär verboten werden wenn eine Operation mehr als ein Taktzyklus | + | |
| Im folgenden Beispiel wird eine sichere Methode benutzt um y den Wert von x zu geben: | Im folgenden Beispiel wird eine sichere Methode benutzt um y den Wert von x zu geben: | ||
| Line 66: | Line 60: | ||
| <code c> | <code c> | ||
| - | // Verbietet global alle Interrupts | + | // Interrupts |
| cli(); | cli(); | ||
| - | // Gibt y den Wert von x | + | // y erhält |
| y = x; | y = x; | ||
| - | // Erlaubt alle Interrupts wieder | + | // Sämtliche |
| sei(); | sei(); | ||
| </ | </ | ||
| </ | </ | ||
de/avr/interrupts.1287136164.txt.gz · Last modified: (external edit)
