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. 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. Zwróć uwagę, iż rozpoznanie przerwań od zboczy opadających lub narastających na końcówkach INT7:4 wymaga obecności zegara we/wy, opisanego w podrozdziale "Systemy zegarowe i ich przydział". Przerwania od niskiego poziomu oraz przerwania od zboczy na końcówkach INT3:0 są wykrywane asynchronicznie. Oznacza to, iż można je wykorzystywać do wybudzania mikrokontrolera również z trybów uśpienia innych niż tryb bezczynny (ang. Idle mode). 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 pewien czas, aby wybudzić mikrokontroler. Czyni to mikrokontroler mniej czułym na zakłócenia. Zmieniony poziom jest próbkowany dwukrotnie przez zegar oscylatora licznika zegarowego. Okres tego oscylatora wynosi 1 μs (znamionowo) przy 5,0V i 25°C. Częstotliwość oscylatora licznika zegarowego zależy od napięcia, jak pokazano w rozdziale "Typowe Parametry – TA = -40°C do 85°C". Mikrokontroler wybudzi się z uśpienia, jeśli wejście będzie posiadało wymagany poziom podczas tego próbkowania lub jeśli jest on utrzymany do końca czasu włączania. Czas włączania jest definiowany przez bity bezpiecznikowe SUT, co opisuje podrozdział "Systemy zegarowe i ich przydział". Jeśli poziom zostanie spróbkowany dwukrotnie przez zegar oscylatora licznika zegarowego, lecz zniknie przed zakończeniem czasu uruchamiania, to mikrokontroler wciąż się wybudzi, lecz nie zostanie wygenerowane żadne przerwanie. Pożądany poziom musi być utrzymywany wystarczająco długo, aby mikrokontroler zakończył wybudzanie się i wyzwolił przerwanie od poziomu.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
(0x6A) | 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 |
Rejestr ten nie jest dostępny w trybie kompatybilności z ATmega103, lecz jego wartości początkowe definiują INT3:0 jako przerwania od niskiego poziomu, tak samo jak w ATmega103.
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 | Zarezerwowane |
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 | |
0x3A (0x5A) | 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 | |
0x39 (0x59) | 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 | |
0x38 (0x58) | 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".
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.