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

©2022 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny13

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

W tym rozdziale opisane są zasady obsługi przerwań w mikrokontrolerze ATtiny13. Ogólne wyjaśnienie sposobu obsługi przerwań na platformie AVR znajdziesz w rozdziale "Reset i obsługa przerwań".

Wektory przerwań

Poniższa tabela opisuje wektory przerwań (ang. Interrupt Vectors) dostępne w mikrokontrolerze ATtiny13:
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 TIM_OVF Przepełnienie timera/licznika 0
5 0x0004 EE_RDY Gotowość pamięci EEPROM
6 0x0005 ANA_COMP Komparator analogowy
7 0x0006 TIM0_COMPA Zgodność porównania A w timerze/liczniku 0
8 0x0007 TIM0_COMPB Zgodność porównania B w timerze/liczniku 0
9 0x0008 WDT Zakończony okres zliczania w timerze licznika zegarowego
10 0x0009 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 ATtiny13 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_OVF        ; Obsługa przepełnienia Timera 0
0x0004          rjmp EE_RDY          ; Obsługa gotowości EEPROM
0x0005          rjmp ANA_COMP        ; Obsługa komparatora analogowego
0x0006          rjmp TIM0_COMPA      ; Obsługa zgodności porównania A w Timerze 0
0x0007          rjmp TIM0_COMPB      ; Obsługa zgodności porównania A w Timerze 0
0x0008          rjmp WATCHDOG        ; Obsługa przerwania z licznika zegarowego
0x0009          rjmp ADC             ; Obsługa konwersji w przetworniku A/C
;
0x000A RESET:   ldi r16, low(RAMEND) ; Start głównego programu
0x000B          out SPL,r16          ; Ustaw wskaźnik stosu na szczyt pamięci RAM
0x000C          sei                  ; Uaktywnij przerwania
0x000D          <instr> xxx
...    ...      ...                  ...
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 PCINT5...0 mikrokontrolera ATtiny13:

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, PCI) będą wyzwalane, gdy jedna z uaktywnionych końcówek PCINT5...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 PCINT5...0 może generować takie przerwanie. Przerwania zmiany stanu końcówki na wyprowadzeniach PCINT5...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 sterowania mikrokontrolerem – MCUCR. Gdy przerwanie INT0 jest uaktywnione i skonfigurowane jako wyzwalane poziomem, będzie ono wyzwalane tak długo, jak końcówka 6 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.

Przerwanie od niskiego poziomu

Przerwanie od niskiego poziomu (ang. Low Level Interrupt)   na końcówce INT0 (6) 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 definiowany za pomocą bitów bezpiecznikowych SUT i CKSEL, co opisano w rozdziale "Źródła zegarowe".

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

MCUCR – MCU Control Register – Rejestr sterujący mikrokontrolera

Bit 7 6 5 4 3 2 1 0  
0x35 - PUD SE SM1 SM0 - ISC01 ISC00 MCUCR
Zapis/Odczyt O Z/O Z/O Z/O Z/O O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

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

Przerwanie zewnętrzne 0 (ang. External Interrupt 0) zostaje wyzwolone przez zewnętrzną końcówkę INT0 (6), jeśli są ustawione znacznik I w rejestrze stanu SREG oraz odpowiednia maska przerwania. Poziom i zbocza na zewnętrznej końcówce INT0, które wyzwalają przerwanie, są zdefiniowane w poniższej tabeli. Wartość sygnału na końcówce INT0 jest próbkowana przed wykrywaniem zboczy. Jeśli zostanie wybrane przerwanie wyzwalane zboczem lub zmianą stanu, to impulsy trwające dłużej niż jeden okres zegarowy wygenerują przerwanie. Krótsze impulsy nie dają gwarancji wygenerowania przerwania. Jeśli zostanie wybrane przerwanie od niskiego poziomu, to ten niski poziom musi się utrzymać do zakończenia bieżąco wykonywanej instrukcji, aby wygenerować przerwanie.

Sterowanie rodzajem wykrywania przerwania

ISC01 ISC00 Opis
0 0 Żądanie przerwania generuje niski stan na końcówce INT0.
0 1 Żądanie przerwania generuje zmiana stanu logicznego na końcówce INT0.
1 0 Żądanie przerwania generuje opadające zbocze sygnału na końcówce INT0.
1 1 Żądanie przerwania generuje narastające zbocze sygnału na końcówce INT0.

GIMSK – General Interrupt Mask Register – Rejestr maski przerwań ogólnych

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

Bity 7, 4:0 – Zarezerwowane

Te bity są w ATtiny13 zarezerwowane i przy odczycie zawsze dają wartość zero.

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

Gdy ustawione są bity INT0 oraz I w rejestrze stanu SREG, to zostaje włączona obsługa przerwanie od końcówki zewnętrznej INT0. Bity sterujące wyborem sposobu wykrywania przerwania (ang. Interrupt Sense Control0 bits 1/0, ISC01 i ISC00) w rejestrze sterowania mikrokontrolerem (ang. MCU Control Register, MCUCR) określają, czy przerwanie będzie wyzwalane przez poziom, zbocze narastające/opadające lub przez zmianę stanu logicznego na końcówce INT0. Zmiany sygnału na tej końcówce wygenerują przerwanie nawet wtedy, gdy końcówka ta została skonfigurowana jako wyjście. Obsługa przerwanie zewnętrznego 0 rozpoczyna się skokiem do wektora INT0.

Bit 5 – PCIE: Pin Change Interrupt Enable – Włączenie przerwań od zmiany stanu końcówki

Gdy ustawione są bity PCIE oraz I w rejestrze stanu SREG, to zostaje włączona  obsługa przerwań od zmiany stanu końcówek. Jakakolwiek zmiana na uaktywnionej końcówce PCINT5:0 spowoduje przerwanie. Obsługa tego przerwania rozpoczyna się skokiem do wektora PCI. Końcówki PCINT5:0 są indywidualnie wybierane w rejestrze PCMSK.


GIFR – General Interrupt Flag Register – Rejestr znaczników przerwań ogólnych

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

Bity 7, 4:0 – Zarezerwowane

Te bity są w ATtiny13 zarezerwowane i przy odczycie zawsze dają wartość zero.

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

Gdy zbocze lub zmiania stanu logicznego na końcówce INT0 wyzwoli żądanie przerwania, znacznik INTF0 zmienia stan na jeden. Jeśli ustawione są bit I w SREG oraz bit INT0 w GIMSK, to mikrokontroler wykona skok do odpowiedniego wektora przerwań. Znacznik jest zerowany podczas wykonywania procedury obsługi tego przerwania. Alternatywnie można go wyzerować przez zapisanie w nim logicznej jedynki. Ten znacznik jest zawsze wyzerowany, gdy końcówka INT0 została skonfigurowana na przerwanie od poziomu niskiego.

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

Gdy zmienia się stan logiczny na dowolnej z końcówek PCINT5:0, zostaje wyzwolone żądanie przerwania, znacznik PCIF zostaje ustawiony na jeden. Jeśli bit I w SREG, bit PCIE w GIMSK oraz bit PCINT5:0 w PCMSK są ustawione na jeden, to mikrokontroler wykona skok do odpowiedniego wektora przerwań. Znacznik jest zerowany podczas wykonywania procedury obsługi tego przerwania. Alternatywnie można go wyzerować przez zapisanie w nim logicznej jedynki.


PCMSK – Pin Change Mask Register – Rejestr maski dla wyboru końcówki wywołującej przerwanie od zmiany stanu

Bit 7 6 5 4 3 2 1 0  
0x15 - - PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 PCMSK
Zapis/Odczyt O 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:6 – Zarezerwowane

Te bity są w ATtiny13 zarezerwowane i przy odczycie zawsze dają wartość zero.

Bity 5:0 – PCINT5:0: Pin Change Enable Mask 5:0 – Maska uaktywniająca zmianę stanu końcówki

Każdy bit PCINT5:0 określa, czy na odpowiadającej mu końcówce będzie aktywne przerwanie od zmiany stanu tej końcówki we/wy. Jeśli są ustawione na jeden bit(y) w PCINT5:0 oraz bit PCIE w GIMSK, to przerwanie od zmiany stanu tej końcówki zostaje uaktywnione. Jeśli dany bit jest wyzerowany w masce PCINT5:0, to zmiana stanu odpowiadającej mu końcówki we/wy nie wygeneruje żądania przerwania.

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
©2022 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.