Systemy wbudowane Zajęcia nr 6 – System przerwań

Transkrypt

Systemy wbudowane Zajęcia nr 6 – System przerwań
Systemy wbudowane
Zajęcia nr 6 – System przerwań
Wprowadzenie do ćwiczeń
Mikrokontroler posiada 14 źródeł przerwań:
• Timer0
• Wejście INT (RB0)
• Zmiana stanu na wejściach RB4..7
• Zapis EEPROM
• Port równoległy PSP
• Przetwornik A/D
• USART
• Moduły CCP 1, 2
• Timery 1 i 2
• Magistrala I2C
Sposób obsługi przerwań pokazano na poniższym rysunku:
Obsługa głównych przerwań (od Timera 0, wejścia INT, oraz RB4..7) odbywa się z
wykorzystaniem rejestru INTCON, obsługa pozostałych przerwań odbywa się z wykorzystaniem
rejestrów PIR1 i PIR2. Rejestr INTCON pokazano na rysunku poniżej:
Poniżej przedstawiono opis poszczególnych bitów rejestru INTCON:
• Bit GIE służy do globalnego maskowania przerwań (1 – uaktywnia przerwania, 0 – blokuje
przerwania),
• Bit PEIE służy do maskowania przerwań od urządzeń peryferyjnych (1 – uaktywnia
przerwania, 0 – blokuje przerwania), ich dalsza obsługa odbywa się za pomocą rejestrów
PIR1 i PIR2,
• T0IE służy do maskowania przerwania od Timera 0 (1 – uaktywnia przerwania, 0 – blokuje
•
•
•
•
•
przerwania),
INTE służy do maskowania przerwania od wejścia RB0/INT (1 – uaktywnia przerwania, 0 –
blokuje przerwania),
RBIE służy do maskowania przerwania od wejść RB4..7 (1 – uaktywnia przerwania, 0 –
blokuje przerwania),
T0IF: wartość 1 oznacza, że Timer 0 został przepełniony (musi być zerowany w programie),
INTF: wartość 1 oznacza, że wykryto przerwanie na wejściu INT (musi być zerowany w
programie),
RBIF: wartość 1 oznacza, że przynajmniej jedno z wejść RB4..7 zmieniło stan (musi być
zerowany programowo po uprzednim odczytaniu wartości z portu B).
Rejestry PIE1 i PIE2 występują w mikrokontrolerze PIC16F877A (nie występują w PIC16F84) są
dodatkowymi rejestrami służącymi do aktywacji lub maskowania przerwań od układów
peryferyjnych. Aby identyfikacja tych przerwań była możliwa konieczne jest włączenie całego
systemu przerwań od układów peryferyjnych, co wykonuje się poprzez ustawienie na 1 bitu PEIE w
rejestrze INTCON. Strukturę rejestrów PIE1 i PIE2 pokazano na poniższych rysunkach.
PIE1
PIE2
Poniżej przedstawiono funkcję poszczególnych bitów znajdujących się w rejestrze PIE1:
• bit 7 (PSPIE): aktywacja przerwania od zapisu/odczytu z portu równoległego PSP: 1 włączenie przerwania od PSP, 0 - wyłączenie przerwania od PSP,
• bit 6 (ADIE): aktywacja przerwania od przetwornika A/C: 1 - włączenie przerwania od
przetwornika A/C, 0 - wyłączenie przerwania od przetwornika A/C,
• bit 5 (RCIE): aktywacja przerwania od zakończenia operacji odbioru bajtu przez moduł
USART: 1 - włączenie przerwania od USART, 0 - wyłączenie przerwania od USART,
• bit 4 (TXIE): aktywacja przerwania od zakończenia operacji wysyłania bajtu przez moduł
USART: 1 - włączenie przerwania od USART, 0 - wyłączenie przerwania od USART,
• bit 3 (SSPIE): włączenie przerwania pochodzącego od synchronicznego portu szeregowego
SSP: 1 - przerwanie od SSP aktywne, 0 - przerwanie od SSP nieaktywne,
• bit 2 (CCP1IE): włączenie przerwania pochodzącego od modułu CCP1 (Capture, Compare,
PWM): 1 - przerwanie od CCP1 aktywne, 0 - przerwanie od CCP1 nieaktywne,
• bit 1 (TMR2IE): aktywacja przerwania wywoływanego po przepełnieniu licznika TIMER2:
1 - przerwanie od TIMER2 aktywne, 0 - przerwanie od TIMER2 nieaktywne,
• bit 0 (TMR1IE): aktywacja przerwania wywoływanego po przepełnieniu licznika TIMER1:
1 - przerwanie od TIMER1 aktywne, 0 - przerwanie od TIMER1 nieaktywne.
•
•
•
•
Poniżej przedstawiono funkcję poszczególnych bitów znajdujących się w rejestrze PIE2:
bit 6 (CMIE): włączenie przerwania pochodzącego od komparatora: 1 - przerwanie od
komparatora aktywne, 0 - przerwanie od komparatora nieaktywne,
bit 4 (EEIE): włączenie przerwania pochodzącego pamięci EEPROM: 1 - przerwanie od
pamięci EEPROM aktywne, 0 - przerwanie od pamięci EEPROM nieaktywne,
bit 3 (BCLIE): aktywacja przerwania wywoływanego przy kolizji na magistrali I 2C: 1 przerwanie od magistrali I2C aktywne, 0 - przerwanie od magistrali I2C nieaktywne,
bit 0 (CCP2IE): włączenie przerwania pochodzącego od modułu CCP2 (Capture, Compare,
PWM): 1 - przerwanie od CCP2 aktywne, 0 - przerwanie od CCP2 nieaktywne.
Rejestry PIR1 i PIR2 są dodatkowymi rejestrami służącymi do identyfikacji przerwań od
układów peryferyjnych. Przerwanie jest zgłaszane przez dane urządzenie peryferyjne, jeżeli
odpowiedni bit w jednym z tych rejestrów jest ustawiony na jedynkę. Wyłącznie przerwań w
rejestrach PIE1 i PIE2 nie blokuje możliwości ustawiania znaczników w rejestrach PIR1 i PIR2.
Znaczniki w rejestrach PIR1 i PIR2 powinny być zerowane programowo po zakończeniu obsługi
przerwania. Strukturę rejestrów PIR1 i PIR2 pokazano na poniższych rysunkach.
PIR1
PIR2
Poniżej przedstawiono funkcję poszczególnych bitów znajdujących się w rejestrze PIE1:
• bit 7 (PSPIF): bit informujący o przerwaniu od portu równoległego PSP: 1 – miała miejsce
operacja odczytu lub zapisu (bit musi być zerowany programowo), 0 – nie było operacji
odczytu i zapisu,
• bit 6 (ADIF): bit informujący o przerwaniu od przetwornika A/C: 1 - konwersja A/C została
zakończona, 0 - konwersja A/C nie została zakończona,
• bit 5 (RCIF): bit informujący o przerwaniu od bufora odbiornika USART: 1 – bufor
odbiornika jest pełny (dane zostały odebrane), 0 – bufor odbiornika jest pusty,
• bit 4 (TXIF): bit informujący o przerwaniu od bufora nadajnika USART: 1 – bufor nadajnika
jest pusty (dane zostały wysłane), 0 – bufor nadajnika jest pełny,
• bit 3 (SSPIF): bit informujący o przerwaniu od synchronicznego portu szeregowego SSP: 1
– wystąpiło przerwanie od SSP (bit musi być zerowany programowo), 0 – nie było
przerwania od SSP,
• bit 2 (CCP1IF): bit informujący o przerwaniu od modułu CCP1 (Capture, Compare, PWM):
• tryb Capture: 1 – wykryto operację przechwytywania w rejestrze TMR1 (bit musi
być zerowany programowo), 0 – nie wykryto operacji przechwytywania w rejestrze
TMR1,
• tryb Compare: 1- operacja porównywania w rejestrze TMR1 zakończona sukcesem
(bit musi być zerowany programowo), 0 - operacja porównywania w rejestrze TMR1
nie została zakończona sukcesem,
• bit 1 (TMR2IF): bit informujący o przerwaniu od licznika TIMER2: 1 – wykryto, że
zawartości rejestrów TMR2 i PR2 są identyczne (bit musi być zerowany programowo), 0 zawartości rejestrów TMR2 i PR2 są różne,
• bit 0 (TMR1IF): bit informujący o przerwaniu od licznika TIMER1: 1 - nastąpiło
przepełnienie licznika TIMER1 (bit ten powinien być zerowany programowo), 0 - nie
nastąpiło przepełnienie licznika TIMER1.
Poniżej przedstawiono funkcję poszczególnych bitów znajdujących się w rejestrze PIR2:
• bit 6 (CMIF): bit informujący o przerwaniu pochodzącym od komparatora: 1 – wejście
komparatora zmieniło się (bit musi być zerowany programowo), 0 - wejście komparatora nie
zmieniło się,
• bit 4 (EEIF): bit informujący o przerwaniu pochodzącym od pamięci EEPROM: 1 –
operacja zapisu do pamięci EEPROM została zakończona (bit musi być zerowany
programowo), 0 – operacja zapisu do pamięci EEPROM trwa lub się nie rozpoczęła,
• bit 3 (BCLIF): bit informujący o przerwaniu wywoływanym przy kolizji na magistrali I 2C: 1
– wystąpiła kolizja na magistrali I2C w module SSP skonfigurowanym w trym I2C, 0 – nie
wykryto kolizji,
• bit 0 (CCP2IF): bit informujący o przerwaniu pochodzącym od modułu CCP2 (Capture,
Compare, PWM):
• tryb Capture: 1 – wykryto operację przechwytywania w rejestrze TMR1 (bit musi
być zerowany programowo), 0 – nie wykryto operacji przechwytywania w rejestrze
TMR1,
• tryb Compare: 1- operacja porównywania w rejestrze TMR1 zakończona sukcesem
(bit musi być zerowany programowo), 0 - operacja porównywania w rejestrze TMR1
nie została zakończona sukcesem, tryb PWM – bit nieużywany w tym trybie.
Obsługa przerwań polega na:
• odmaskowaniu wszystkich przerwań globalnie – GIE=1,
• odmaskowaniu przerwań, które będą wykorzystywane, np. dla Timer0 – T0IE=1,
• napisaniu procedury obsługi przerwania:
• zapisanie w pamięci zawartości rejestrów W, PCLATH i STATUS,
• zamaskowanie globalne przetrwań – GIE=0,
• wykrycie źródła przerwania poprzez testowanie bitów z rejestru INTCON lub PIRx i
wyzerowanie odpowiedniego bitu,
• obsłużenie przerwania - napisanie procedury,
• przywrócenie zawartości rejestrów W, PCLATH i STATUS,
• odmaskowanie przerwań – GIE=1,
• powrót z procedury obsługi przerwania (instrukcja RETFIE).
Szablon programu wykorzystującego przerwania został umieszczony w przykładzie z6_cw1.asm.
Można zauważyć, że pod adresem 0x004 miejsce na procedurę obsługi przerwania, gdzie
zaimplementowano już zachowanie i przywracanie wartości rejestrów W, PCLATH i STATUS.
Zadania do samodzielnego wykonania
1. Napisz program migający diodą, i wykorzystujący jeden z układów czasowo-licznikowych.
W programie należy wykorzystać przerwanie od odpowiedniego układu czasowegolicznikowego do sterowania diodą.
2. Zmodyfikuj program tak, aby po naciśnięciu przycisku S1 zwiększała się liczba migających
diod – do tego celu należy wykorzystać przerwanie od linii INT/RB0.

Podobne dokumenty