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

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny4/5/9/10

Przerwania

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

Wektory przerwań

Poniższa tabela opisuje wektory przerwań (ang. Interrupt Vectors) dostępne w mikrokontrolerze ATtiny4/5/9/10:

Numer wektora Adres programu Źródło Definicja przerwania
1 0x0000 RESET Końcówka zewnętrzna, Reset przy włączeniu zasilania,
Reset przy spadku napięcia zasilającego, Reset od
licznika zegarowego
2 0x0001 INT0 Żądanie przerwania zewnętrznego 0
3 0x0002 PCINT0 Żądanie przerwania 0 przy zmianie stanu końcówki
4 0x0003 TIM0_CAPT Input Capture dla timera/licznika 0
5 0x0004 TIM0_OVF Przepełnienie timera/licznika 0
6 0x0005 TIM0_COMPA Zgodność porównania A w timerze/liczniku 0
7 0x0006 TIM0_COMPB Zgodność porównania B w timerze/liczniku 0
8 0x0007 ANA_COMP Komparator analogowy
9 0x0008 WDT Zakończony okres zliczania w timerze licznika zegarowego
10 0x0009 VLM Przerwanie od monitora napięcia zasilającego
11 0x000A ADC Zakończone przetwarzanie w przetworniku A/C

Jeśli program nigdy nie uaktywnia żadnego źródła przerwań, to wektory przerwań nie są używane i zajmowany przez nie obszar pamięci można wykorzystać na instrukcje normalnego programu.

Najbardziej typowe i ogólne ustawienie wektorów resetu oraz przerwań w ATtiny4/5/9/10 wygląda następująco:

Adres  Etykiety Kod                  Komentarze
0x0000          rjmp RESET           ; Obsługa resetu
0x0001          rjmp EXT_INT0        ; Obsługa IRQ0
0x0002          rjmp PCINT0          ; Obsługa PCINT0
0x0003          rjmp TIM0_CAPT       ; Obsługa Input Capture dla Timera 0
0x0004          rjmp TIM0_OVF        ; Obsługa przepełnienia Timera 0
0x0005          rjmp TIM0_COMPA      ; Obsługa zgodności porównania A w Timerze 0
0x0006          rjmp TIM0_COMPB      ; Obsługa zgodności porównania A w Timerze 0
0x0007          rjmp ANA_COMP        ; Obsługa komparatora analogowego
0x0008          rjmp WDT             ; Obsługa przerwania z licznika zegarowego
0x0009          rjmp VLM             ; Obsługa monitora napięcia zasilającego
0x000A          rjmp ADC             ; Obsługa konwersji w przetworniku A/C
;
0x000B RESET:   ldi r16, high(RAMEND); Start programu głównego
0x000C          out SPH,r16          ; Ustaw wskaźnik stosu
0x000D          ldi r16, low(RAMEND) ; na szczyt pamięci RAM
0x000E          out SPL,r16
0x000F          sei                  ; Włącz przerwania
0x0010          <instr>
...    ...      ...                  ...
Na początek:  podrozdziału   strony 

Przerwania zewnętrzne

Przerwania zewnętrzne (ang. external interrupts) są wyzwalane przez końcówkę INT0 lub dowolną z końcówek PCINT3...0 mikrokontrolera ATtiny4/5/9/10:

obrazek

Zwróć uwagę, że gdy przerwania te zostaną uaktywnione, będą wyzwalane nawet w przypadku, kiedy związane z nimi końcówki zostały skonfigurowane jako wyjścia. Cecha ta udostępnia sposób generowania przerwania programowego. Przerwania od zmiany stanu końcówki (ang. pin change interrupts, PCINT0) będą wyzwalane, gdy jedna z uaktywnionych końcówek PCINT3...0 zmieni swój stan logiczny (np. z 1 na 0 lub z 0 na 1). Rejestr PCMSK określa, które z końcówek PCINT3...0 mogą generować takie przerwanie. Przerwania zmiany stanu końcówki na wyprowadzeniach PCINT3...0 są wykrywane asynchronicznie, co oznacza, że można ich używać do wybudzania mikrokontrolera z trybów uśpienia innych niż tryb bezczynny.

Przerwanie INT0 może być wyzwalane przez opadające/narastające zbocze sygnału lub przez niski poziom logiczny. Ustawia się to w rejestrze A sterowania przerwaniami zewnętrznymi, EICRA (ang. External Interrupt Control Register A). Gdy przerwanie INT0 jest uaktywnione i skonfigurowane jako wyzwalane poziomem, będzie ono wyzwalane tak długo, jak końcówka 4 jest utrzymywana w stanie niskim. Zwróć uwagę, iż rozpoznanie przerwań od opadającej lub narastającej krawędzi sygnału na końcówce INT0 wymaga obecności zegara we/wy, co opisano w rozdziale "System zegarowy".

Przerwanie od niskiego poziomu

Przerwanie od niskiego poziomu (ang. low level interrupt)   na końcówce INT0 (4) jest wykrywane asynchronicznie. Oznacza to, iż to źródło przerwania może zostać użyte do wybudzania mikrokontrolera również z trybów uśpienia innych niż tryb bezczynności (zegar we/wy jest zatrzymywany we wszystkich trybach uśpienia za wyjątkiem trybu bezczynności).

Zwróć uwagę, iż jeśli przerwanie od niskiego poziomu zostanie użyte do wybudzenia z trybu wyłączenia zasilania, to pożądany poziom musi być utrzymywany wystarczająco długo, aby mikrokontroler ukończył wybudzanie się, a następnie wyzwolił to przerwanie. Jeśli niski poziom zniknie przed końcem czasu uruchamiania, mikrokontroler wybudzi się, lecz nie zostanie wygenerowane żadne przerwanie. Czas uruchamiania jest określony w rozdziale "System zegarowy".

Jeśli niski poziom na końcówce przerwania zostanie usunięty przed wybudzeniem się mikrokontrolera, to wykonanie programu nie zostanie skierowane do procedury obsługi przerwania, lecz nastąpi kontynuacja wykonywania od kolejnej instrukcji za rozkazem SLEEP.

Synchronizacja w czasie przerwania 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  
0x15 - - - - - - ISC01 ISC00 EICRA
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 i zawsze dają odczyt zero.

Bity 1:0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0 – Bit 1 i bit 0 sterowania wykrywaniem przerwań

Zewnętrzne przerwanie 0 jest aktywowane przez zewnętrzną końcówkę INT0 (4), jeśli zostały ustawione znacznik I w rejestrze stanu SREG oraz odpowiednia maska przerwań. Poziom i zbocza sygnału na zewnętrznej końcówce INT0, które aktywują przerwanie są zdefiniowane w poniższej tabeli:

ISC01 ISC02 Opis
0 0 Niski poziom na końcówce INT0 generuje żądanie przerwania.
0 1 Zmiana stanu logicznego na końcówce INT0 generuje żądanie przerwania.
1 0 Opadające zbocze sygnału na końcówce INT0 generuje żądanie przerwania.
1 1 Narastające zbocze sygnału na końcówce INT0 generuje żądanie przerwania.

Wartość sygnału na końcówce INT0 jest próbkowana przed wykrywaniem zbocz. Jeśli zostało wybrane przerwanie od zbocza lub zmiany stanu, to impulsy trwające dłużej od jednego cyklu zegarowego wygenerują przerwanie. Krótsze impulsy nie dają gwarancji wygenerowania przerwania. Jeśli zostało wybrane przerwanie od niskiego poziomu, to poziom ten musi być utrzymywany aż do zakończenia bieżąco wykonywanej instrukcji, aby zostało wygenerowane przerwanie.


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

Bit 7 6 5 4 3 2 1 0  
0x13 - - - - - - - INT0 EIMSK
Zapis/Odczyt O O O O O O O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:1 – Zarezerwowane

Te bity są zarezerwowane i zawsze dają odczyt zero.

Bit 0 – INT0: External Interrupt Request 0 Enable – Włączenie żądania przerwania zewnętrznego 0

Gdy bity INT0 oraz I w rejestrze stanu (SREG) zostaną ustawione na 1,  uaktywnia się przerwanie zewnętrzne od końcówki mikrokontrolera. Bity sterowania wykrywaniem przerwania (ISC01 i ISC00) w rejestrze A sterowania przerwaniami zewnętrznymi (EICRA) definiują, czy przerwanie jest aktywowane przy wykryciu narastającego/opadającego zbocza lub poziomu niskiego sygnału na końcówce INT0. Aktywność na tym wyprowadzeniu spowoduje żądanie przerwania nawet wtedy, gdy końcówka INT0 została skonfigurowana jako wyjście. Żądanie przerwania INT0 powoduje wykonanie programu od wektora przerwań INT0.


EIFR – External Interrupt Flag Register – Rejestr znacznika przerwania zewnętrznego

Bit 7 6 5 4 3 2 1 0  
0x14 - - - - - - - INTF0 EIFR
Zapis/Odczyt O O O O O O O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:1 – Zarezerwowane

Te bity są zarezerwowane i zawsze dają odczyt zero.

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

Gdy zbocze sygnału lub zmiana jego poziomu logicznego na końcówce INT0 wyzwala przerwanie, bit INTF0 zostaje ustawiony na 1. Jeśli bit I w rejestrze stanu SREG oraz bit INT0 w rejestrze maski przerwań zewnętrznych EIMSK są ustawione na 1, mikrokontroler wykona skok do odpowiedniego wektora przerwań.

Znacznik ten jest zerowany, gdy zostaje jest wykonywana procedura obsługi przerwania. Zastępczo znacznik można wyzerować przez zapis do niego logicznej jedynki (nie zera).

Znacznik ma stale wartość 0, gdy INT0 jest skonfigurowane jako przerwanie od poziomu niskiego.


PCICR – Pin Change Interrupt Control Register – Rejestr sterujący przerwaniami zmiany stanu na końcówce

Bit 7 6 5 4 3 2 1 0  
0x12 - - - - - - - PCIE0 PCICR
Zapis/Odczyt O O O O O O O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:1 – Zarezerwowane

Te bity są zarezerwowane i zawsze dają odczyt zero.

Bit 0 – PCIE0: Pin Change Interrupt Enable 0 – Włączenie przerwań od zmiany stanu na końcówce

Gdy bity PCIE0 oraz I w rejestrze stanu (SREG) są ustawione na 1, zostaje uaktywnione przerwanie 0 od zmiany stanu końcówki mikrokontrolera. Jakakolwiek zmiana na uaktywnionej końcówce PCINT3..0 spowoduje przerwanie i skok do wektora przerwań PCI0. Końcówki PCINT3..0 są uaktywniane indywidualnie w rejestrze PCMSK.


PCIFR – Pin Change Interrupt Flag Register – Rejestr znacznika przerwania od zmiany stanu na końcówce

Bit 7 6 5 4 3 2 1 0  
0x11 - - - - - - - PCIF0 PCIFR
Zapis/Odczyt O O O O O O O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:1 – Zarezerwowane

Te bity są zarezerwowane i zawsze dają odczyt zero.

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

Gdy zmiana stanu na dowolnej z końcówek PCINT3..0 wywołuje żądanie przerwania, zostaje ustawiony na 1 znacznik PCIF0. Jeśli bity I w rejestrze stanu SREG oraz PCIE0 w rejestrze PCICR są ustawione na 1, to mikrokontroler wykona skok do odpowiedniego wektora przerwań. Znacznik ten jest zerowany, gdy zostaje jest wykonywana procedura obsługi przerwania. Zastępczo znacznik można wyzerować przez zapis do niego logicznej jedynki (nie zera).


PCMSK – Pin Change Mask Register – Rejestr maski wyboru końcówek dla przerwań od zmiany stanu

Bit 7 6 5 4 3 2 1 0  
0x10 - - - - PCINT3 PCINT2 PCINT1 PCINT0 PCMSK
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:4 – Zarezerwowane

Te bity są zarezerwowane i zawsze dają odczyt zero.

Bits 3:0 – PCINT3..0: Pin Change Enable Mask 3..0 – Bity 3...0 maski wyboru końcówek dla przerwania od zmiany stanu

Każdy bit PCINT3..0 wybiera, czy na tej końcówce zostanie uaktywnione przerwanie od zmiany stanu. Jeśli bit PCINT3..0 jest ustawiony na 1 oraz bit PCIE0 w rejestrze PCICR jest również ustawiony na 1, to na odpowiedniej końcówce mikrokontrolera zostaje uaktywnione przerwanie od zmiany stanu logicznego tej końcówki. Jeśli bit PCINT3..0 jest wyzerowany, to  przerwanie od zmiany stanu na odpowiedniej końcówce mikrokontrolera zostaje 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
©2023 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.