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){}; | ||
| } | } | ||
| </ | </ | ||