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

ATmega48A/PA/88A/PA/168A/PA/328/P

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 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 PCINT[23:16] zmieni swój stan logiczny na przeciwny. To samo dotyczy przerwania PCI1 i końcówek PCINT[14:8] oraz przerwania PCI0 i końcówek PCINT[7:0]. Rejestry PCMSK2, PCMSK1 i PCMSK0 określają, które z tych końcówek przyczyniają się do przerwań od zmiany stanu końcówki. Przerwania na końcówkach PCINT23...0 są wykrywane asynchronicznie. Wynika stąd, iż można je wykorzystać do wybudzenia mikrokontrolera również z trybów uśpienia innych od trybu bezczynności (ang. Idle mode).

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

Przebiegi czasowe w przerwaniu 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 kontroli przerwań zewnętrznych

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  

Bity 7:4 – Zarezerwowane

Te bity są zarezerwowane w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze dają odczyt zero.

Bity 3:2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1 and Bit 0 – bity sterujące sposobem wykrywania przerwania INT1

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.

Bity 1:0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0 – bity sterujące sposobem wykrywania przerwania INT0

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.

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

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  

Bity 7:2 – Zarezerwowane

Te bity są zarezerwowane w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze dają odczyt zero.

Bit 1 – INT1: External Interrupt Request 1 Enable – Uaktywnienie żądań przerwania zewnętrznego 1

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.

Bit 0 – INT0: External Interrupt Request 0 Enable – Uaktywnienie żądań przerwania zewnętrznego 0

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.


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

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  

Bity 7:2 – Zarezerwowane

Te bity są zarezerwowane w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze dają odczyt zero.

Bit 1 – INTF1: External Interrupt Flag 1 – Znacznik przerwania zewnętrznego 1

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.

Bit 0 – INTF0: External Interrupt Flag 0 – Znacznik przerwania zewnętrznego 0

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.


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 ATmega48A/PA/88A/PA/168A/PA/328/P 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[14:8] wywoła przerwanie. Zostanie ono wykonane poprzez wektor przerwań PCI1. Końcówki PCINT[14: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 ATmega48A/PA/88A/PA/168A/PA/328/P 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[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ę.

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 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 końcówek

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  

Bit 7 – Zarezerwowany

Ten bit jest zarezerwowany w ATmega48A/PA/88A/PA/168A/PA/328/P i zawsze daje odczyt zero.

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

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.


PCMSK0 – Pin Change Mask Register 0 – Rejestr 0 maski przerwań od zmian 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.