This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
et:avr:external_interrupts [2010/02/12 15:34] – mikk.leini | et:avr:external_interrupts [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 14: | Line 14: | ||
Lähtudes tööpõhimõttelt, | Lähtudes tööpõhimõttelt, | ||
- | ~~PB~~ | + | Atmeli xmega seeria kontrolleritel on välised katkestused realiseeritud natuke erinevalt võrreldes tavaliste 8-bitiste kontrolleritega. Atmeli xmega seerial on igale siinile omistatud kaks välist katkestust INT0 ja INT1, mis on võimalik kasutades biti maski ühendada suvalise siini viiguga (või mitmega korraga). |
<box 100% round # | <box 100% round # | ||
Vaja on panna ATmega128 viik number 9 ehk siini E viik 7 tekitama katkestust, kui selle väärtus muutub. Sellele viigule vastab väline katkestus INT7, mis on sünkroonne. | Vaja on panna ATmega128 viik number 9 ehk siini E viik 7 tekitama katkestust, kui selle väärtus muutub. Sellele viigule vastab väline katkestus INT7, mis on sünkroonne. | ||
- | |||
<code c> | <code c> | ||
#include < | #include < | ||
Line 29: | Line 29: | ||
} | } | ||
- | int main() | + | // Põhiprogramm |
+ | int main(void) | ||
{ | { | ||
// Siini E viigu 7 muutmine sisendiks biti 7 nullimise teel | // Siini E viigu 7 muutmine sisendiks biti 7 nullimise teel | ||
Line 49: | Line 50: | ||
// Lõputu programmitsükkel | // Lõputu programmitsükkel | ||
while (1) continue; | while (1) continue; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Xmega puhul otsime sisendi muutust viigul PORTE0: | ||
+ | |||
+ | <code c> | ||
+ | #include < | ||
+ | |||
+ | // Välise katkestuse programm | ||
+ | ISR(PORTE_INT0_vect) | ||
+ | { | ||
+ | // Tee midagi | ||
+ | } | ||
+ | |||
+ | // Põhiprogramm | ||
+ | int main(void) | ||
+ | { | ||
+ | // Siini E viigu 0 muutmine sisendiks biti 0 nullimise teel | ||
+ | PORTE.DIR &= ~(PIN0_bm); | ||
+ | |||
+ | // Siini E viigule 0 pull-up takisti määramine sisendi ujumise vastu | ||
+ | PORTE.PIN0CTRL = (PORT_OPC_PULLUP_gc); | ||
+ | |||
+ | // Siini E viigu 0 katkestuse töörežiimi määramine | ||
+ | PORTE.PIN0CTRL |= (PORT_ISC_BOTHEDGES_gc); | ||
+ | |||
+ | // Siini E INT0 katkestuse prioriteedi määramine | ||
+ | PORTE.INTCTRL |= (PORT_INT0LVL_MED_gc); | ||
+ | |||
+ | // Viigu määramine siini E INT0 sisendiks | ||
+ | PORTC.INT0MASK = (PIN0_bm); | ||
+ | |||
+ | // Keskmise prioriteediga katkestuste lubamine | ||
+ | PMIC.CTRL |= PMIC_MEDLVLEN_bm; | ||
+ | |||
+ | // Globaalne katkestuste lubamine | ||
+ | sei(); | ||
+ | |||
+ | // Lõputu programmitsükkel | ||
+ | while (1){}; | ||
} | } | ||
</ | </ |