Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATmega640/1280/1281/2560/2561

Przerwania zewnętrzne

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Przerwania zewnętrzne

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".


Na początek:  podrozdziału   strony 

Przebiegi czasowe przerwań od zmiany stanu końcówki

Przykład synchronizacji w czasie przerwania od zmiany stanu końcówki pokazuje poniższy rysunek:

obrazek


Na początek:  podrozdziału   strony 

Opis rejestrów

EICRA – External Interrupt Control Register A – rejestr A sterowania przerwaniami zewnętrznymi

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  

Bity 7:0 – ISC31, ISC30...ISC00, ISC00: External Interrupt 3 - 0 Sense Control Bits – Bity sterowania wykrywaniem przerwań zewnętrznych 3 - 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.


EICRB – External Interrupt Control Register B – rejestr B sterowania przerwaniami zewnętrznymi

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  

Bity 7:0 – ISC71, ISC70...ISC41, ISC40: External Interrupt 7 - 4 Sense Control Bits – Bity sterowania wykrywaniem przerwań zewnętrznych 7 - 4

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.


EIMSK – External Interrupt Mask Register – rejestr masek przerwań zewnętrznych

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  

Bity 7:0 – INT7:0: External Interrupt Request 7 - 0 Enable – Bity włączania przerwań zewnętrznych 7 - 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.


EIFR – External Interrupt Flag Register – rejestr znaczników przerwań zewnętrznych

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  

Bity 7:0 – INTF7 - INTF0: External Interrupt Flags 7 - 0 – Znaczniki przerwań zewnętrznych 7 - 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".


PCICR – Pin Change Interrupt Control Register – Rejestr sterujący przerwań od zmiany stanu końcówki

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  

Bity 7:3 – Zarezerwowane

Te bity są zarezerwowane w ATmega640/1280/1281/2560/2561 i zawsze dają odczyt zero.

Bit 2 – PCIE2: Pin Change Interrupt Enable 2 – Uaktywnienie przerwań PCI2

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.

Bit 1 – PCIE1: Pin Change Interrupt Enable 1 – Uaktywnienie przerwań PCI1

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.

Bit 0 – PCIE0: Pin Change Interrupt Enable 0 – Uaktywnienie przerwań PCI0

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.


PCIFR – Pin Change Interrupt Flag Register – Rejestr znaczników przerwań od zmiany stanu końcówki

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  

Bity 7:3 – Zarezerwowane

Te bity są zarezerwowane w ATmega640/1280/1281/2560/2561 i zawsze dają odczyt zero.

Bit 2 – PCIF2: Pin Change Interrupt Flag 2 – Znacznik przerwania 2 od zmiany stanu końcówki

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ę.

Bit 1 – PCIF1: Pin Change Interrupt Flag 1 – Znacznik przerwania 1 od zmiany stanu końcówki

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ę.

Bit 0 – PCIF0: Pin Change Interrupt Flag 0 – Znacznik przerwania 0 od zmiany stanu końcówki

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ę.


PCMSK2 – Pin Change Mask Register 2 – Rejestr 2 maski przerwań od zmian stanu końcówek

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  

Bit 7:0 – PCINT[23:16]: Pin Change Enable Mask 23...16 – Bity masek uaktywniania przerwań od zmiany stanu końcówek

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.


PCMSK1 – Pin Change Mask Register 1 – Rejestr 1 maski przerwań od zmian stanu końcówek

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  

Bit 7:0 – PCINT[15:8]: Pin Change Enable Mask 15...8 – Bity masek uaktywniania przerwań od zmiany stanu końcówek

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.


PCMSK0 – Pin Change Mask Register 0 – Rejestr 0 maski przerwań od zmian stanu końcówek

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  

Bit 7:0 – PCINT[7:0]: Pin Change Enable Mask 7...0 – Bity masek uaktywniania przerwań od zmiany stanu końcówek

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.


Na początek:  podrozdziału   strony 

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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.