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 INT7:0. Zauważ, iż po uaktywnieniu, przerwania te będą wyzwalane nawet, jeśli końcówki INT7:0 zostały skonfigurowane jako wyjścia. Własność ta dostarcza sposobu generowania przerwań programowych.
Przerwanie PCI2 od zmiany stanu końcówki (ang. pin change interrupt) zostanie wyzwolone, jeśli dowolna z uaktywnionych końcówek PCINT23:16 zmienia swój stan na przeciwny, przerwanie PCI1 jest wyzwalane w ten sam sposób przez uaktywnione końcówki PCINT15:8 i przerwanie PCI0 jest wyzwalane przez aktywne końcówki PCINT7:0. Rejestry PCMSK2, PCMSK1 i PCMSK0 określają, które końcówki przyczyniają się do przerwań PCI. Przerwania od zmiany stanu końcówek PCINT23:0 są wykrywane asynchronicznie. Wynika z tego, iż można ich używać do wybudzania mikrokontrolera z trybów uśpienia innych niż bezczynny.
Przerwania zewnętrzne mogą być wyzwalane zboczem opadającym lub narastającym albo niskim poziomem. Określane jest to zgodnie ze specyfikacjami rejestrów sterujących przerwaniami zewnętrznymi – EICRA (INT3:0) i EICRB (INT7:4). Gdy przerwanie zewnętrzne zostanie uaktywnione i skonfigurowane jako wyzwalane poziomem, to przerwanie będzie generowane tak długo, jak jego końcówka utrzymywana jest w stanie niskim. Przerwania od niskiego poziomu oraz przerwanie od zbocza na końcówkach INT3:0 są wykrywane asynchronicznie, zatem również mogą być użyte do wybudzania z trybów uśpienia innych niż bezczynny. Zegar we/wy jest zatrzymywany we wszystkich trybach uśpienia poza trybem bezczynnym.
Zauważ, iż w przypadku przerwania wyzwalanego poziomem i wykorzystywanego do wybudzania z trybu wyłączenia zasilania (ang. Power-down mode), zmieniony poziom musi być utrzymywany przez wystarczający czas, aby mikrokontroler zakończył proces wybudzenia i wygenerował przerwanie od poziomu. Jeśli ten poziom zniknie przed zakończeniem wybudzania, to mikrokontroler wciąż się wybudzi, lecz nie wygeneruje żadnego przerwania. Czas wybudzania jest zdefiniowany bitami bezpiecznikowymi SUT i CKSEL , co opisano w rozdziale "Zegar systemu i opcje zegarowe".
Przykład synchronizacji w czasie przerwania od zmiany stanu końcówki pokazuje poniższy rysunek:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
(0x69) | ISC31 | ISC30 | ISC21 | ISC20 | ISC11 | ISC10 | ISC01 | ISC00 | EICRA |
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 |
Przerwania zewnętrzne 3 - 0 są aktywowane przez zewnętrzne końcówki INT3:0, jeśli bit I rejestru stanu SREG oraz odpowiedni bit maski przerwań w rejestrze EIMSK są ustawione. Poziom i zbocza na końcówkach zewnętrznych wyzwalające przerwania są zdefiniowane w poniższej tabelce:
ISCn1 | ISCn0 | Opis |
0 | 0 | Niski poziom na końcówce INTn wyzwoli żądanie przerwania |
0 | 1 | Dowolne zbocze na końcówce INTn generuje asynchronicznie żądanie przerwania |
1 | 0 | Opadające zbocze na końcówce INTn wyzwala asynchronicznie żądanie przerwania |
1 | 1 | Narastające zbocze na końcówce INTn wyzwala asynchronicznie żądanie przerwania |
Uwaga: | 1. | n = 3, 2, 1 lub 0. Przy zmianie bitów ISCn1/ISCn0 należy wyłączyć powiązane z nimi przerwanie poprzez wyzerowanie jego bitu w rejestrze EIMSK. W przeciwnym razie zmiana bitów może wyzwolić przerwanie. |
Zbocza sygnałów na końcówkach INT3:0 są rejestrowane asynchronicznie. Impulsy na końcówkach INT3:0 szersze od minimalnej szerokości impulsu podanej w poniższej tabelce wygenerują przerwanie. Impulsy krótsze nie dają takiej gwarancji.
Symbol | Parametr | Warunki | Min | Typ | Max | Jednostki |
tINT | Minimalna szerokość impulsu dla asynchronicznego przerwania zewnętrznego | 50 | ns |
Jeśli zostanie wybrane przerwanie od poziomu niskiego, to poziom niski musi być utrzymywany do zakończenia bieżąco wykonywanej instrukcji, aby wygenerować przerwanie. Po uaktywnieniu przerwanie wyzwalane poziomem będzie generować żądanie przerwania tak długo, jak długo jego końcówka utrzymywana jest w stanie niskim. Przy zmianie bitu ISCn może wystąpić przerwanie. Dlatego zaleca się najpierw wyłączyć przerwanie INTn przez wyzerowanie jego bitu włączającego w rejestrze EIMSK. Następnie można zmienić bit ISCn. Na koniec należy wyzerować znacznik przerwania INTn przez zapis logicznej jedynki do jego bitu znacznika przerwania (INTFn) w rejestrze EIFR przed ponownym uaktywnieniem tego przerwania.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
(0x6A) | ISC71 | ISC70 | ISC61 | ISC60 | ISC51 | ISC50 | ISC41 | ISC40 | EICRB |
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 |
Przerwania zewnętrzne 7 - 4 są aktywowane przez końcówki zewnętrzne INT7:4, jeśli bit I rejestru stanu SREG oraz odpowiedni bit maski przerwań w rejestrze EIMSK są ustawione. Poziom i zbocza na końcówkach zewnętrznych wyzwalające przerwania są zdefiniowane w poniższej tabelce:
ISCn1 | ISCn0 | Opis |
0 | 0 | Niski poziom na końcówce INTn wyzwoli żądanie przerwania |
0 | 1 | Zmiana poziomu logicznego na końcówce wyzwala żądanie przerwania |
1 | 0 | Opadające zbocze na końcówce INTn wyzwala żądanie przerwania |
1 | 1 | Narastające zbocze na końcówce INTn wyzwala żądanie przerwania |
Uwaga: | 1. | n = 7, 6, 5 lub 4. Przy zmianie bitów ISCn1/ISCn0 należy wyłączyć powiązane z nimi przerwanie poprzez wyzerowanie jego bitu w rejestrze EIMSK. W przeciwnym razie zmiana bitów może wyzwolić przerwanie. |
Wartość na końcówkach INT7:4 jest próbkowana przed wykrywaniem zboczy. Jeśli wybrano przerwanie od zbocza lub od zmiany poziomu logicznego na przeciwny, to impulsy trwające dłużej od jednego okresu zegara wygenerują przerwanie. Krótsze impulsy nie gwarantują wygenerowania przerwania. Zauważ, iż częstotliwość zegarowa mikroprocesora może być niższa od częstotliwości XTAL, jeśli jest aktywny dzielnik XTAL. Jeśli wybrano przerwanie od niskiego poziomu, to niski poziom na końcówce musi być utrzymywany do zakończenia bieżąco wykonywanej instrukcji, aby wygenerować przerwanie. Jeśli przerwanie od poziomu zostanie uaktywnione, to będzie ono generować żądanie przerwania tak długo, jak jego końcówka jest utrzymywana w stanie niskim.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1D (0x3D) | INT7 | INT6 | INT5 | INT4 | INT3 | INT2 | INT1 | INT0 | EIMSK |
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 |
Gdy bit INT7:0 zostanie zapisany logiczną jedynką i bit I w rejestrze stanu SREG jest ustawiony na 1, to odpowiednie przerwanie z końcówki zewnętrznej jest uaktywniane. Bity wykrywania przerwań zewnętrznych w rejestrach sterujących EICRA i EICRB definiują, czy przerwanie zewnętrzne jest wyzwalane zboczem narastającym/opadającym lub poziomem (przerwania 7 - 4 mogą dodatkowo być wyzwalane zmianą poziomu logicznego na końcówce przerwania). Działania na dowolnej z tych końcówek spowodują wyzwolenie przerwania nawet wtedy, gdy końcówka pracuje jako wyjście. Udostępnia to sposób programowej generacji przerwania.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1C (0x3C) | INTF7 | INTF6 | INTF5 | INTF4 | INTF3 | INTF2 | INTF1 | INTF0 | EIFR |
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 |
Gdy zbocze lub zmiana poziomu logicznego na końcówce INT7:0 wyzwala żądanie przerwania, odpowiedni znacznik INTF7:0 zostaje ustawiony w stan jeden. Jeśli bit I w rejestrze SREG oraz odpowiedni bit uaktywniania przerwań INT7:0 w EIMSK są ustawione na 1, to mikrokontroler wykona skok do wektora przerwania. Znacznik jest zerowany, gdy jest wykonywana procedura przerwania. Alternatywnie można go wyzerować zapisując do niego logiczną jedynkę. Znaczniki te są zawsze zerowane po skonfigurowaniu INT7:0 na przerwania od poziomu. Zapamiętaj, iż wejście w tryb uśpienia z wyłączonymi przerwaniami INT3:0, powoduje wyłączenie buforów wejściowych na tych końcówkach. Może to spowodować zmianę logiczną w wewnętrznych sygnałach, która ustawi znaczniki INTF3:0. Więcej informacji znajdziesz w podrozdziale “Uaktywnienienie wejścia cyfrowego a tryby uśpienia".
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 ATmega640/1280/1281/2560/2561 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[15:8] wywoła przerwanie. Zostanie ono wykonane poprzez wektor przerwań PCI1. Końcówki PCINT[15: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 ATmega640/1280/1281/2560/2561 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[15: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) | PCINT15 | PCINT14 | PCINT13 | PCINT12 | PCINT11 | PCINT10 | PCINT9 | PCINT8 | PCMSK1 |
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[15: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.