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

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny20

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 ATtiny20:

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 PCINT1 Żądanie przerwania 1 przy zmianie stanu końcówki
5 0x0004 WDT Żądanie przerwania od licznika zegarowego
6 0x0005 TIM1_CAPT Input Capture dla timera/licznika 1
7 0x0006 TIM1_COMPA Zgodność porównania A w timerze/liczniku 1
8 0x0007 TIM1_COMPB Zgodność porównania B w timerze/liczniku 1
9 0x0008 TIM1_OVF Żądanie przerwania przy przepełnieniu  w timerze/liczniku 1
10 0x0009 TIM0_COMPA Zgodność porównania A w timerze/liczniku 0
11 0x000A TIM0_COMPB Zgodność porównania B w timerze/liczniku 0
12 0x000B TIM0_OVF Żądanie przerwania przy przepełnieniu  w timerze/liczniku 0
13 0x000C ANA_COMP Komparator analogowy
14 0x000D ADC Zakończone przetwarzanie w przetworniku A/C
15 0x000E TWI_SLAVE Interfejs TWI
16 0x000F SPI Interfejs SPI
17 0x0010 QTRIP(1) Wykrywanie dotyku
Uwaga: 1. Źródło przerwania przy wykryciu dotyku odnosi się do wsparcia dla biblioteki QTouch.

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.

Typowe i ogólne ustawienie wektorów resetu oraz przerwań w ATtiny20 wygląda następująco:

.org 0x0000             ;Ustaw adres następnego rozkazu

    rjmp RESET          ; Adres 0x0000
    rjmp INT0_ISR       ; Adres 0x0001
    rjmp PCINT0_ISR     ; Adres 0x0002
    rjmp PCINT1_ISR     ; Adres 0x0003
    rjmp WDT_ISR        ; Adres 0x0004
    rjmp TIM1_CAPT_ISR  ; Adres 0x0005
    rjmp TIM1_COMPA_ISR ; Adres 0x0006
    rjmp TIM1_COMPB_ISR ; Adres 0x0007
    rjmp TIM1_OVF_ISR   ; Adres 0x0008
    rjmp TIM0_COMPA_ISR ; Adres 0x0009
    rjmp TIM0_COMPB_ISR ; Adres 0x000A
    rjmp TIM0_OVF_ISR   ; Adres 0x000B
    rjmp ANA_COMP_ISR   ; Adres 0x000C
    rjmp ADC_ISR        ; Adres 0x000D
    rjmp TWI_SLAVE_ISR  ; Adres 0x000E
    rjmp SPI_ISR        ; Adres 0x000F
    rjmp QTRIP_ISR      ; Adres 0x0010

RESET:                  ; Start programu głównego
    <instr>             ; Adres 0x0011
    ...
(ang. ISR = Interrupt Service Routine, procedura obsługi przerwania)
Na początek:  podrozdziału   strony 

Przerwania zewnętrzne

obrazek

Przerwania zewnętrzne (ang. External Interrupts) są wyzwalana przez końcówkę INT0 lub przez dowolną z końcówek PCINT[11:0]. 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 0 od zmiany końcówki (PCI0) będą wyzwalany, gdy dowolna z uaktywnionych końcówek PCINT[7:0] zmieni swój stan na przeciwny. Przerwania 1 od zmiany końcówki (PCI1) są wyzwalane, gdy zmienia stanu wystąpi na uaktywnionych końcówkach PCINT[11:8]. Rejestry PCMSK0 i PCMSK1 określają, które z końcówek mogą stać się źródłem tego przerwania. Przerwania od zmiany stanu końcówki na końcówkach PCINT[11: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 lub narastające zbocze albo niski poziom sygnału. Ustawiane jest to w rejestrze MCUCR. 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 (5) 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

GIMSK – General Interrupt Mask Register – Ogólny rejestr masek przerwań

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

Bity 7:6, 3:1 – Zarezerwowane

Te bity są zarezerwowane w ATtiny20 i przy odczycie dają wartość 0.

Bit 5 – PCIE1: Pin Change Interrupt Enable 1 – Uaktywnienie przerwań 1 od zmiany stanu końcówki

Gdy są ustawione na 1 bit PCIE1 oraz bit I w rejestrze stanu SREG, to zostają uaktywnione żądania przerwań przy zmianach stanów końcówek PCINT[11:8]. Przy wystąpieniu zmiany na tych końcówkach, zostaje wykonany wektor przerwania PCI1. Końcówki PCINT[11:8] są uaktywniane indywidualnie w rejestrze PCMSK1.

Bit 4 – PCIE0: Pin Change Interrupt Enable 0 – Uaktywnienie przerwań 0 od zmiany stanu końcówki

Gdy są ustawione na 1 bit PCIE0 oraz bit I w rejestrze stanu SREG, to zostają uaktywnione żądania przerwań przy zmianach stanów końcówek PCINT[7:0]. Przy wystąpieniu zmiany na tych końcówkach, zostaje wykonany wektor przerwania PCI0. Końcówki PCINT[7:0] są uaktywniane indywidualnie w rejestrze PCMSK0.

Bit 0 – 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.


GIFR – General Interrupt Flag Register – Ogólny rejestr znaczników przerwań

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

Bity 7:6, 3:1 – Zarezerwowane

Te bity są zarezerwowane w ATtiny20 i przy odczycie dają wartość 0.

Bit 5 – PCIF1: Pin Change Interrupt Flag 1 – Znacznik 1 przerwania przy zmianie stanu końcówki

Gdy zmiana stanu logicznego na dowolnej z końcówek PCINT[11:8] wyzwoli żądanie przerwania, bit PCIF1 przyjmuje stan 1. Jeśli są ustawione bit I w rejestrze stanu SREG oraz bit PCIE1 w rejestrze GIMSK, mikrokontroler skoczy do odpowiedniego wektora przerwania. Znacznik ten zostaje wyzerowany, gdy będzie wykonywana procedura obsługi przerwania. Alternatywnie znacznik można wyzerować zapisując w nim logiczną jedynkę.

Bit 4 – PCIF0: Pin Change Interrupt Flag 0 – Znacznik 0 przerwania przy zmianie stanu końcówki

Gdy zmiana stanu logicznego na dowolnej z końcówek PCINT[7:0] wyzwoli żądanie przerwania, bit PCIF0 przyjmuje stan 1. Jeśli są ustawione bit I w rejestrze stanu SREG oraz bit PCIE0 w rejestrze GIMSK, mikrokontroler skoczy do odpowiedniego wektora przerwania. Znacznik ten zostaje wyzerowany, gdy będzie wykonywana procedura obsługi przerwania. Alternatywnie znacznik można wyzerować zapisując w nim logiczną jedynkę.

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 GIMSK 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. Znacznik ma stale wartość 0, gdy INT0 jest skonfigurowane jako przerwanie od poziomu niskiego.


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

Bit 7 6 5 4 3 2 1 0  
0x0A - - - - PCINT11 PCINT10 PCINT9 PCINT8 PCMSK1
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 ATtiny20 i przy odczycie dają wartość 0.

Bity 3:0 – PCINT[11:8]: Pin Change Enable Mask 11:8 – Maska włączania przerwań od zmiany stanu końcówek 11:8

Każdy z bitów PCINT[11:8] wybiera, czy przerwanie od zmiany stanu końcówki jest uaktywnione na odpowiadającej mu końcówce we/wy. Jeśli bit PCINT[11:8] jest ustawiony oraz jest ustawiony bit PCIE1 w rejestrze GIMSK, to zostaje uaktywnione przyjmowanie przerwań przy zmianie stanu końcówki na odpowiedniej końcówce we/wy. Jeśli bit PCINT[11:8] jest wyzerowany, to przerwanie od zmiany stanu końcówki na odpowiadającej mu końcówce we/wy jest wyłączone.


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

Bit 7 6 5 4 3 2 1 0  
0x09 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  

Bity 7:0 – PCINT[7:0]: Pin Change Enable Mask 7:0 – Maska włączania przerwań od zmiany stanu końcówek 7:0

Każdy z bitów PCINT[7:0] wybiera, czy przerwanie od zmiany stanu końcówki jest uaktywnione na odpowiadającej mu końcówce we/wy. Jeśli bit PCINT[7:0] jest ustawiony oraz jest ustawiony bit PCIE0 w rejestrze GIMSK, to zostaje uaktywnione przyjmowanie przerwań przy zmianie stanu końcówki na odpowiedniej końcówce we/wy. Jeśli bit PCINT[7:0] jest wyzerowany, to przerwanie od zmiany stanu końcówki na odpowiadającej mu końcówce we/wy 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
©2021 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.