This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
en:avr:external_interrupts [2010/02/08 12:56] – mikk.leini | en:avr:external_interrupts [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== External | + | ====== External |
- | Välised katkestused (inglise keeles //external interrupt// | + | External interrups are one of the most simple peripheral functions. Typically AVRs have 1 to 8 special pins, which are used to cause interrupts in the program when their logical value changes or they are at a certain state. Since this function is usually used to monitor external logical signals, these pins are called external interrupt pins. |
- | Välise katkestuse kasutamiseks tuleb viiku kasutada tavalises | + | To use an external interrupt, the pin has to be configured as a standard |
- | * Loogiline null (pinge on 0V) | + | * Logical zero (voltage of 0V) |
- | * Loogilise väärtuse muutus | + | * Change in the logical value |
- | * Langev | + | * Descending |
- | * Tõusev | + | * Rising |
- | Katkestuse tekitamiseks loogilise nulli valimisel tekitatakse katkestust järjest senikaua, kuni viigu väärtus on null, ja samal ajal põhiprogrammil töötada ei lasta. | ||
- | Väliseid katkestusi on tööpõhimõttelt kahte liiki: kontrolleri taktiga sünkroniseeritud ja asünkroonsed. Sünkroniseeritud katkestused toimivad sisendite väärtuse meelespidamise teel, st et loogilised muutused leitakse kahel erineval taktil saadud väärtuste võrdlemise teel. Kui välise signaali loogilised muutused toimuvad kiiremini, kui käib töötakt, siis katkestused ei teki õigesti või ei teki üldse. Asünkroonsed katkestused ei sõltu kontrolleri taktist ja võimaldavad natuke kiiremini muutuvat välist signaali - loogilist nivood peab signaal hoidma vähemalt 50 ns. ATmega128-l on 4 sünkroniseeritud ja 4 asünkroonset välist katkestust. | + | When the mode is set to logical zero, the interrupt will fire continuously as long as the pin has a value of zero. During this period the execution of the main program is stopped. |
- | ===== Näide ===== | + | Grouped by principle, there are two types of interrupts: synchronized to the controller' |
- | Vaja on panna ATmega128 | + | < |
+ | |||
+ | <box 100% round # | ||
+ | |||
+ | Task: Make ATmega128 | ||
<code c> | <code c> | ||
#include < | #include < | ||
- | // Välise katkestuse programm | + | // The code of the external interrupt |
ISR(INT7_vect) | ISR(INT7_vect) | ||
{ | { | ||
- | // Tee midagi | + | // Do something |
} | } | ||
int main() | int main() | ||
{ | { | ||
- | // Siini E viigu 7 muutmine sisendiks biti 7 nullimise teel | + | // Change pin 7 on bus E to an input by changing bit 7 to zero |
DDRE &= ~(1 << PIN7); | DDRE &= ~(1 << PIN7); | ||
- | // Siini E viigule 7 pull-up | + | // Defining a pull-up |
+ | // to prevent input floating | ||
PORTE |= (1 << PIN7); | PORTE |= (1 << PIN7); | ||
- | // Väliste katkestuste seaderegistris katkestuse | + | // Set the interrupt mode to logical change for interrupt |
- | // tekitajaks loogilise muutuse määramine | + | // in the external interrupt configuration register |
EICRB = (1 << ISC70); | EICRB = (1 << ISC70); | ||
- | // Välise katkestuse | + | // Allow external interrupt |
EIMSK |= (1 << INT7); | EIMSK |= (1 << INT7); | ||
- | // Globaalne katkestuste lubamine | + | // Allow global interrupts |
sei(); | sei(); | ||
- | // Lõputu programmitsükkel | + | // Endless loop |
while (1) continue; | while (1) continue; | ||
} | } | ||
</ | </ | ||
- | Lisaks üksikute viikude tekitatavatele katkestustele on suurematel | + | </ |
+ | |||
+ | In addition to interrupts fired by single pins, if the AVR has enough pins it is possible to use entire groups of pins to fire logical value change interrupts. These interrupts are simply called |