Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Przerwania zewnętrzne są wyzwalane przez końcówki INT0 i INT1 oraz przez
dowolną z końcówek PCINT23...0. Zauważ, iż po uaktywnieniu przerwania
te będą wyzwalane nawet, gdy końcówki INT0, INT1 i PCINT23...0
skonfigurowano jako wyjścia. Własność ta udostępnia pewien sposób generacji
przerwań programowych. Przerwanie od zmiany stanu końcówki PCI2 zostanie
wyzwolone, jeśli dowolna z uaktywnionych końcówek
Przerwania zewnętrzne INT mogą być wyzwalane przez opadające lub narastające zbocze albo przez niski poziom sygnału. Ustawiane to jest zgodnie ze wskazówkami podanymi w opisie rejestrów sterujących przerwaniami zewnętrznymi (ang. External Interrupt Control Registers – EICRA, INT1:0). Gdy zostanie uaktywnione przerwanie zewnętrzne i skonfigurowane do wyzwalania poziomem, to będzie ono wyzwalane tak długo, jak jego końcówka utrzymywana jest w stanie niskim. Przerwania od niskiego poziomu na końcówkach INT1:0 są wykrywane asynchronicznie. Zatem można je wykorzystać do wybudzenia mikrokontrolera również z trybów uśpienia innych od trybu bezczynności (ang. Idle mode). Zegar we/wy jest zatrzymywany we wszystkich trybach uśpienia poza trybem bezczynności.
Nota: Zauważ, iż jeśli do wybudzania mikrokontrolera z trybu wyłączenia zasilania zostanie użyte przerwanie wyzwalane poziomem, to pożądany poziom wyzwalania musi być utrzymywany wystarczająco długo, aby mikrokontroler zakończył wybudzenie i wyzwolił przerwanie od poziomu. Jeśli ten poziom zaniknie przed końcem czasu uruchamiania, to mikrokontroler wciąż się wybudzi, lecz nie zostanie wygenerowane żadne przerwanie. Czas uruchamiania definiują bity bezpiecznikowe SUT i CKSEL, jak opisano w rozdziale "Zegar systemowy i opcje zegarowe".
Przykład synchronizacji w czasie przerwania od zmiany stanu końcówki pokazuje poniższy rysunek:
Rejestr ten zawiera bity sterujące sposobem wykrywania przerwań.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
(0x69) | – | – | – | – | ISC11 | ISC10 | ISC01 | ISC00 | EICRA |
Zapis/Odczyt | O | O | O | O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze dają odczyt zero.
Przerwanie zewnętrzne 1 jest aktywowane przez zewnętrzną końcówkę INT1, jeśli są ustawione znacznik I w rejestrze SREG oraz odpowiadająca jej maska przerwań. Poniższa tabelka definiuje zbocza i poziom na zewnętrznej końcówce INT1, które aktywują to przerwanie. Wartość na końcówce INT1 jest próbkowana przed wykrywaniem zboczy. Jeśli zostało wybrane przerwanie od zbocza lub od zmiany stanu na przeciwny, to impulsy trwające dłużej od jednego okresu zegara wygenerują przerwanie. Krótsze impulsy nie gwarantują wygenerowania przerwania. Jeśli wybrano przerwanie od poziomu niskiego, to poziom niski musi być utrzymywany do zakończenia bieżąco wykonywanej instrukcji, aby wygenerować przerwanie.
ISC11 | ISC10 | Opis |
0 | 0 | Niski poziom sygnału na końcówce INT1 wygeneruje żądanie przerwania. |
0 | 1 | Każda zmiana logiczna na końcówce INT1 wygeneruje żądanie przerwania. |
1 | 0 | Opadające zbocze sygnału na końcówce INT1 wygeneruje żądanie przerwania. |
1 | 1 | Narastające zbocze sygnału na końcówce INT1 wygeneruje żądanie przerwania. |
Przerwanie zewnętrzne 0 jest aktywowane przez zewnętrzną końcówkę INT0, jeśli są ustawione znacznik I w rejestrze SREG oraz odpowiadająca jej maska przerwań. Poniższa tabelka definiuje zbocza i poziom na zewnętrznej końcówce INT0, które aktywują to przerwanie. Wartość na końcówce INT0 jest próbkowana przed wykrywaniem zboczy. Jeśli zostało wybrane przerwanie od zbocza lub od zmiany stanu na przeciwny, to impulsy trwające dłużej od jednego okresu zegara wygenerują przerwanie. Krótsze impulsy nie gwarantują wygenerowania przerwania. Jeśli wybrano przerwanie od poziomu niskiego, to poziom niski musi być utrzymywany do zakończenia bieżąco wykonywanej instrukcji, aby wygenerować przerwanie.
ISC01 | ISC00 | Opis |
0 | 0 | Niski poziom sygnału na końcówce INT0 wygeneruje żądanie przerwania. |
0 | 1 | Każda zmiana logiczna na końcówce INT0 wygeneruje żądanie przerwania. |
1 | 0 | Opadające zbocze sygnału na końcówce INT0 wygeneruje żądanie przerwania. |
1 | 1 | Narastające zbocze sygnału na końcówce INT0 wygeneruje żądanie przerwania. |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1D (0x3D) | – | – | – | – | – | – | INT1 | INT0 | EIMSK |
Zapis/Odczyt | O | O | O | O | O | O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze dają odczyt zero.
Gdy bit INT1 jest ustawiony na 1 oraz bit I w rejestrze SREG jest również ustawiony, to zostaje uaktywnione żądanie przerwań z końcówki zewnętrznej. Bity 1 i 0 sposobu wykrywania przerwań (ISC11 i ISC10) w rejestrze A kontroli przerwań zewnętrznych (EICRA) określają, czy przerwanie zewnętrzne zostanie aktywowane przy narastającym/opadającym zboczu sygnału na końcówce INT1 lub po wykryciu poziomu. Aktywność na tej końcówce spowodują żądanie przerwania, nawet jeśli INT1 skonfigurowano jako wyjcie. Odpowiadające przerwanie żądania przerwania zewnętrznego 1 zostanie wykonane poprzez wektor przerwania INT1.
Gdy bit INT0 jest ustawiony na 1 oraz bit I w rejestrze SREG jest również ustawiony, to zostaje uaktywnione żądanie przerwań z końcówki zewnętrznej. Bity 1 i 0 sposobu wykrywania przerwań (ISC01 i ISC00) w rejestrze A kontroli przerwań zewnętrznych (EICRA) określają, czy przerwanie zewnętrzne zostanie aktywowane przy narastającym/opadającym zboczu sygnału na końcówce INT0 lub po wykryciu poziomu. Aktywność na tej końcówce spowodują żądanie przerwania, nawet jeśli INT0 skonfigurowano jako wyjcie. Odpowiadające przerwanie żądania przerwania zewnętrznego 1 zostanie wykonane poprzez wektor przerwania INT0.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1C (0x3C) | – | – | – | – | – | – | INTF1 | INTF0 | EIFR |
Zapis/Odczyt | O | O | O | O | O | O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze dają odczyt zero.
Gdy zbocze lub zmiana logiczna na końcówce INT1 wyzwala żądanie przerwania, znacznik INTF1 przyjmuje stan jeden. Jeśli są ustawione na 1 bit I w rejestrze SREG oraz bit INT1 w rejestrze EIMSK, mikrokontroler wykona skok do odpowiedniego wektora przerwań. Znacznik jest zerowany, gdy zostanie wykonana procedura przerwania. Alternatywnie można go wyzerować zapisując do niego logiczną jedynkę. Znacznik jest zawsze wyzerowany, gdy INT1 jest skonfigurowane jako przerwanie od poziomu.
Gdy zbocze lub zmiana logiczna na końcówce INT0 wyzwala żądanie przerwania, znacznik INTF0 przyjmuje stan jeden. Jeśli są ustawione na 1 bit I w rejestrze SREG oraz bit INT0 w rejestrze EIMSK, mikrokontroler wykona skok do odpowiedniego wektora przerwań. Znacznik jest zerowany, gdy zostanie wykonana procedura przerwania. Alternatywnie można go wyzerować zapisując do niego logiczną jedynkę. Znacznik jest zawsze wyzerowany, gdy INT0 jest skonfigurowane jako przerwanie od poziomu.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
(0x68) | – | – | – | – | – | PCIE2 | PCIE1 | PCIE0 | PCICR |
Zapis/Odczyt | O | O | O | O | O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze dają odczyt zero.
Gdy są ustawione na 1 bit PCIE2 oraz bit I w rejestrze SREG, zostaje uaktywnione przerwanie 2 od zmiany stanu końcówki. Każda zmiana logiczna na dowolnej z uaktywnionych końcówek PCINT[23:16] wywoła przerwanie. Zostanie ono wykonane poprzez wektor przerwań PCI2. Końcówki PCINT[23:16] są uaktywniane indywidualnie w rejestrze PCMSK2.
Gdy są ustawione na 1 bit PCIE1 oraz bit I w rejestrze SREG, zostaje uaktywnione przerwanie 1 od zmiany stanu końcówki. Każda zmiana logiczna na dowolnej z uaktywnionych końcówek PCINT[14:8] wywoła przerwanie. Zostanie ono wykonane poprzez wektor przerwań PCI1. Końcówki PCINT[14:8] są uaktywniane indywidualnie w rejestrze PCMSK1.
Gdy są ustawione na 1 bit PCIE0 oraz bit I w rejestrze SREG, zostaje uaktywnione przerwanie 1 od zmiany stanu końcówki. Każda zmiana logiczna na dowolnej z uaktywnionych końcówek PCINT[7:0] wywoła przerwanie. Zostanie ono wykonane poprzez wektor przerwań PCI0. Końcówki PCINT[7:0] są uaktywniane indywidualnie w rejestrze PCMSK0.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1B (0x3B) | – | – | – | – | – | PCIF2 | PCIF1 | PCIF0 | PCIFR |
Zapis/Odczyt | O | O | O | O | O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze dają odczyt zero.
Gdy zmiana poziomu logicznego na dowolnej z końcówek PCINT[23:16] wyzwoli żądanie przerwania, zostaje ustawiony na jeden bit PCIF2. Jeśli są ustawione bit I w rejestrze SREG oraz bit PCIE2 w PCICR, to mikrokontroler skoczy do odpowiadającego im wektora przerwań. Znacznik ten jest zerowany, gdy zostaje wykonana procedura przerwania. Alternatywnie można go wyzerować zapisując do niego logiczną jedynkę.
Gdy zmiana poziomu logicznego na dowolnej z końcówek PCINT[14:8] wyzwoli żądanie przerwania, zostaje ustawiony na jeden bit PCIF1. Jeśli są ustawione bit I w rejestrze SREG oraz bit PCIE1 w PCICR, to mikrokontroler skoczy do odpowiadającego im wektora przerwań. Znacznik ten jest zerowany, gdy zostaje wykonana procedura przerwania. Alternatywnie można go wyzerować zapisując do niego logiczną jedynkę.
Gdy zmiana poziomu logicznego na dowolnej z końcówek PCINT[7:0] wyzwoli żądanie przerwania, zostaje ustawiony na jeden bit PCIF0. Jeśli są ustawione bit I w rejestrze SREG oraz bit PCIE0 w PCICR, to mikrokontroler skoczy do odpowiadającego im wektora przerwań. Znacznik ten jest zerowany, gdy zostaje wykonana procedura przerwania. Alternatywnie można go wyzerować zapisując do niego logiczną jedynkę.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
(0x6D) | PCINT23 | PCINT22 | PCINT21 | PCINT20 | PCINT19 | PCINT18 | PCINT17 | PCINT16 | PCMSK2 |
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Każdy z bitów PCINT[23:16] uaktywnia przerwanie od zmiany stanu logicznego na odpowiadającej mu końcówce we/wy. Jeśli bit jest ustawiony, to przerwanie jest aktywne. Jeśli bit jest wyzerowany, to przerwanie jest wyłączone.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
(0x6C) | – | PCINT14 | PCINT13 | PCINT12 | PCINT11 | PCINT10 | PCINT9 | PCINT8 | PCMSK1 |
Zapis/Odczyt | O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Ten bit jest zarezerwowany w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze daje odczyt zero.
Każdy z bitów PCINT[14:8] uaktywnia przerwanie od zmiany stanu logicznego na odpowiadającej mu końcówce we/wy. Jeśli bit jest ustawiony, to przerwanie jest aktywne. Jeśli bit jest wyzerowany, to przerwanie jest wyłączone.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
(0x6B) | PCINT7 | PCINT6 | PCINT5 | PCINT4 | PCINT3 | PCINT2 | PCINT1 | PCINT0 | PCMSK0 |
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Każdy z bitów PCINT[7:0] uaktywnia przerwanie od zmiany stanu logicznego na odpowiadającej mu końcówce we/wy. Jeśli bit jest ustawiony, to przerwanie jest aktywne. Jeśli bit jest wyzerowany, to przerwanie jest wyłączone.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.