Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

POLITECHNIKA POZNAŃSKA

Podobne prezentacje


Prezentacja na temat: "POLITECHNIKA POZNAŃSKA"— Zapis prezentacji:

1 POLITECHNIKA POZNAŃSKA
WBMiZ Zakład Urządzeń Mechatronicznych STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH

2 Przerwania zewnętrzne EXTI / INT

3 Licznik instrukcji PC (Program Counter)
Egzekucja programu Licznik instrukcji PC (Program Counter) 1 2 3 Adres Rejestr PC: 0000 Instrukcja 0 0001 Instrukcja 1 0002 Instrukcja 2 0003 Instrukcja 3 Opisać na tablicy krok po kroku jak wykonywany jest program klasycznie

4 #include <avr/io. h> #include <util/delay
#include <avr/io.h> #include <util/delay.h> unsigned int i; void main(void) { DDRC=0b ; //diody LED DDRD=0b ; //przyciski SW while(1) for(i=0;i<50;i++) _delay_ms(100); //czekaj PORTC|= (1<<0); //LED nr 0 ON PORTC&=~(1<<0); //LED nr 0 OFF if(bit_is_clear(PIND,2)) PORTC|= (1<<1); //jeśli SW1 to LED 1 ON if(bit_is_clear(PIND,3)) PORTC&=~(1<<1); //jeśli SW2 to LED 1 OFF }

5 Przerwania Pod pojęciem przerwania rozumiemy wbudowaną sprzętowo funkcję CPU, która po wystąpieniu danego zdarzenia (sygnału) pozwoli na zatrzymanie aktualnie wykonywanego zadania i czasowego przejścia do innego wątku. Posługując się przerwaniami możemy ustawić pracę mikrokontrolera tak, aby przerywał pewne mniej istotne zadania na rzecz innych, ważniejszych w danej chwili, poczym dokańczał te mniej istotne niejako „w wolnym czasie”.

6 Rodzaje przerwań ze względu na sygnał
przerwania wewnętrzne: generowane przez wewnętrzne peryferia mikrokontrolera takie jak liczniki czasowe, liczniki zdarzeń, przetworniki analogowo cyfrowe, pamięci, peryferia komunikacyjne itd… przerwania zewnętrzne: generowane przez specjalnie dedykowane do tego zdania wejścia GPIO. MCU TIM1 CPU PORTA

7 Potocznie przerwania określa się akronimem INT (ang. INTerrupt),
przerwania zewnętrzne można spotkać także pod skrótem EXTI (ang. External INTerrupt).

8 Rodzaje przerwań ze względu na czas
asynchroniczne: wyzwalane jednorazowo po wystąpieniu danego zdarzenia synchroniczne: wyzwalane cyklicznie tak długo jak trwa zdarzenie U[V] t

9 EXTI - hardware

10 Funkcja obsługi przerwania
Gdy sygnał żądania przerwania zostanie aktywowany i obsłużony CPU: dokańcza aktualnie wykonywaną instrukcję, Odkłada na stos adres kolejnej instrukcji programu oraz stan rej. akumulatorów, Zmienia wartość rejestru PC aby zrealizować skok do funkcji obsługi przerwania Adres pod jakim znajduje się funkcja obsługi przerwania nazywamy „wektorem przerwania” Po zakończeniu funkcji obsługi przerwania (instrukcja „RETI”) do rejestru PC pobierany jest ze stosu adres kolejnej instrukcji programu oraz poprzedni stan rej. akumulatorów

11 Program: Adres: 0000 Instrukcja 0 0001 Instrukcja 1 0002 Instrukcja 2 0003 Instrukcja 3 …. Funkcja obsługi przerwania: Adres: 0100 Instrukcja 0 0101 Instrukcja 1 0102 Instrukcja 2: RETI Stos: CP=0003, akum=…………. Rejestr PC: Rejestry rdzenia (akumulatory)

12 Funkcja obsługi przerwania
#include <avr/interrupt.h> ISR(INT0_vect) { //tutaj umieść swoją funkcję obsługo przerwania INT0 } //automatyczny powrót do programu głównego void main(void) .. … } RETI

13 Adres wektora przerwania oraz nazwa przerwania
Szukajcie w nocie katalogowej od CPU

14 Zezwolenie na przerwania
Zezwolenie globalne: sei(); - globalne zezwolenie na przerwania cli(); - globalne zablokowanie przerwań Zezwolenie lokalne: Poza globalnym pozwoleniem na przerwania w systemie, każde zdarzenie musi być dodatkowo lokalnie odblokowane za pomocą rejestrów sterujących aby dany sygnał mógł aktywować przerwanie.

15 Zezwolenie na przerwania
Domyślnie wszystkie przerwania są zablokowane. Domyślnie globalne zezwolenie na przerwania jest zablokowane. Podczas każdego skoku do funkcji obsługi przerwania globalne zezwolenie na przerwania jest automatycznie blokowane. Podczas każdego powroty z funkcji obsługi przerwania globalne zezwolenie na przerwania jest automatycznie odblokowane.

16 Pytania?

17 Priorytety Odświeżenie stanu sygnałów odbywa się w sposób dyskretny (raz na takt zegara systemowego) Pomiędzy kolejnymi taktami może zgłosić się więcej niż jeden sygnał przerwania W sytuacji takiej system obsługi przerwań musi podjąć decyzję o dalszym działaniu CPU 0/1 [-] 1 INT1 1 INT2 1 CLK t

18 Priorytety przerwań Priorytet przerwania w mcu typu AtMega zależy od adresu funkcji obsługi przerwania i jest niezmienny. Istnieją również bardziej zaawansowane rozwiązania mcu w których priorytety przerwań mogą być zmieniane w sposób programowy.

19 Priorytety przerwań Jeśli więcej niż jeden sygnał wyzwalający przerwanie jest aktywny to porównywane są priorytety przerwań Przerwanie o niższym adresie jest obsługiwane w pierwszej kolejności, a wektor przerwania o wyższym adresie odkładany jest na stos Po zakończeniu przerwania o niższym adresie (RETI) zdejmowany jest ze stosu adres kolejnej wykonywanej instrukcji którą jest skok do przerwania o wyższym adresie. Po zakończeniu przerwania o wyższym adresie (RETI) zdejmowany jest ze stosu adres kolejnej wykonywanej instrukcji którą jest już powrót do wątku sprzed wyzwolenia przerwania.

20 Zagnieżdżenie przerwań może przepełnić stos
Uwaga! Zagnieżdżenie przerwań może przepełnić stos Zapętlenie przerwań może zablokować program Umieszczenie funkcji opóźniających (np. delay) w przerwaniach może znacząco spowolnić program i powinno być unikane

21 REJESTRY STERUJĄCE PRZERWANIAMI ZEWNĘTRZNYMI

22 EIMSK - External Interrupt Mask
Logiczne 1 na pozycji X zezwala lokalnie na obsługę przerwania o numerze X

23 EIFR: External Interrupt Flag Register
Logiczne 1 na danej pozycji oznacza oczekiwanie na obsługę przerwania

24 EICRx - External Interrupt Control Register x (A/B)

25 EICRx - External Interrupt Control Register x (A/B)

26 Przykładowy program #include <AVR/io.h> #include <AVR/interrupt.h> #include <util/delay.h> unsigned int i; ISR(INT2_vect) { PORTC|=(1<<1); //LED nr 1 ON } void main(void) { DDRC=0b ; DDRD=0b ; EICRA&=~(1<<ISC20); //ustaw zdarzenie wyzwalające przerwanie INT2 EICRA |=(1<<ISC21); //ustaw zdarzenie wyzwalające przerwanie INT2 EIMSK |=(1<<INT2); //odblokuj przerwanie INT2 sei(); //globalne zezwolenie na przerwania while(1) for(i=0;i<50;i++) _delay_ms(100); //czekaj PORTC|= (1<<0); //LED nr 0 ON PORTC&=~(1<<0); //LED nr 0 OFF

27 Pytania? 16.09 nieobecny

28 Dziękuję (lista)


Pobierz ppt "POLITECHNIKA POZNAŃSKA"

Podobne prezentacje


Reklamy Google