This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:avr:interrupts [2010/02/11 14:47] – mikk.leini | et:avr:interrupts [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 25: | Line 25: | ||
Oletame, et programmis on kasutusel 16-bitine muutuja, mille väärtust muudab nii põhiprogramm kui ka katkestuse programmilõik, | Oletame, et programmis on kasutusel 16-bitine muutuja, mille väärtust muudab nii põhiprogramm kui ka katkestuse programmilõik, | ||
- | |||
<code c> | <code c> | ||
#include < | #include < | ||
Line 38: | Line 37: | ||
} | } | ||
- | int main() | + | // Põhiprogramm |
+ | int main(void) | ||
{ | { | ||
// Muutujale x väärtuse omistamine | // Muutujale x väärtuse omistamine | ||
x = 0x1111; | x = 0x1111; | ||
- | // Mingi katkestuse tööle seadistamine | + | // Globaalne katkestuste lubamine |
- | + | ||
- | // Globaalne katkestuste lubamine | + | |
- | // | + | |
sei(); | sei(); | ||
Line 70: | Line 67: | ||
</ | </ | ||
+ | |||
+ | Atmeli xmega seeria kontrolleritel on katkestused jaotatud kolme prioriteedi klassi: | ||
+ | - Madala prioriteediga katkestused | ||
+ | - Keskmise prioriteediga katkestused | ||
+ | - Kõrge prioriteediga katkestused | ||
+ | See tähendab, et kõrgema prioriteediga katkestus võib katkestada madalama prioriteediga katkestuse koodi. Seoses sellega tuleb katkestusi kasutades vastava prioriteediga katkestused ka kõigepealt lubada. | ||
+ | |||
+ | <code c> | ||
+ | //Luba madala prioriteediga katkestused | ||
+ | PMIC.CTRL |= PMIC_LOLVLEN_bm; | ||
+ | //Luba keskmise prioriteediga katkestused | ||
+ | PMIC.CTRL |= PMIC_MEDLVLEN_bm; | ||
+ | //Luba kõrge prioriteediga katkestused | ||
+ | PMIC.CTRL |= PMIC_HILVLEN_bm; | ||
+ | |||
+ | // Globaalne katkestuste lubamine | ||
+ | sei(); | ||
+ | </ | ||
+ | |||
+ | Illustratsioonilt on näha, kuidas kõrgema tasemega katkestus peatab madalama tasemega katkestuse ning madalama tasemega katkestuse programm jätkab tööd pärast kõrgema tasemega katkestuse töö lõppu. | ||
+ | [{{: | ||
+ | |||
+ | ~~CL~~ | ||
+ | |||
+ | Kui järjest tuleb mitu samatasemelist katkestust, siis oodatakse eelneva katkestuse töö lõppu ning alles siis alustab samatasemeline katkestus tööd. Juhul, kui vahepeal tuleb mõni kõrgema tasemega katkestus lükkub edasi mõlema katkestuse programmi töö. | ||
+ | [{{: |