Jak ustawić kolejnośc przerwań

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
nasiono
-
Posty: 46
Rejestracja: 29 lip 2005, 0:01

Jak ustawić kolejnośc przerwań

Post autor: nasiono » 29 lip 2005, 0:24

Witam.
Jestem początkójący w uP i w związku z tym pojawił się problem.
Jak ustawić kolejność przerwań , gdzieś czytałem ,że można to zrobić sprzętowo jak i programowo (wolał bym ten pierwszy sposób).
Programuje w C ,używam środowiska WinAVR a procek to at90s2313.
Dziękuje z góry .

cyber
-
Posty: 12
Rejestracja: 24 lip 2005, 11:14

Post autor: cyber » 29 lip 2005, 10:50

Mikrokontrolery AVR nie mają możliwości zmiany priorytetów przerwań (ani sprzętowo ani programowo). Można jedynie blokować przerwania o wyższym priorytecie, tak aby nie zakłócały wykonywania procedury obsługi przerwania o niższym priorytecie i ewentualnie odpowiednio reagować zerowaniem flag zgłoszenia przerwania. Podaj jakieś szczegóły, jakie przerwania chcesz "kolejkować" i w jaki sposób.

nasiono
-
Posty: 46
Rejestracja: 29 lip 2005, 0:01

Post autor: nasiono » 29 lip 2005, 11:08

Witam.
Konkretnie chciałbym żeby przerwanie od przepełnienia timera 16 bit miało wyższy priorytet niż przerwanie od przechwycenia wartości.
A w jaki sposób to zrobić, tego właśnie chciał bym się dowiedzieć najlepiej na jakimś prostym przykłądzie w C nie koniecznie z użyciem tych przerwań.
Pozdrawiam.

cyber
-
Posty: 12
Rejestracja: 24 lip 2005, 11:14

Post autor: cyber » 29 lip 2005, 16:08

A czy podczas wykonywania procedury obsługi przerwania od przechwycenia, ustawienie flagi przepełnienia T1 ma powodować zawieszenie wykonywania tej pierwszej i przejscie do drugiej i dopiero po jej zakonczeniu wrocic do procedury od przechwycenia? Bo jesli nie to w sumie wystarczy jesli zrobisz tak:

Kod: Zaznacz cały

SIGNAL(SIG_OVERFLOW1)
{
cli();                            //blokujemy przerwania na czas obsługi
...
Twoje instrukcje
...
sei();                          //z powrotem włączamy przerwania                           
To spowoduje, że jak w czasie wykonywania przerwania od przepełnienia T1 nastąpi zgłoszenie przerwania od przechwycenia wartości to zostanie ono obsłużone dopiero po zakończeniu procedury OVERFLOW1.

nasiono
-
Posty: 46
Rejestracja: 29 lip 2005, 0:01

Post autor: nasiono » 29 lip 2005, 19:31

"A czy podczas wykonywania procedury obsługi przerwania od przechwycenia, ustawienie flagi przepełnienia T1 ma powodować zawieszenie wykonywania tej pierwszej i przejscie do drugiej i dopiero po jej zakonczeniu wrocic do procedury od przechwycenia?" - dokładnie o to mnie chodzi!! czy mógł byś dać jakiś przykłąd na zrealizowanie tego był bym wdzięczny?

[ Dodano: 01-08-2005, 17:10 ]
czy ktoś wie jak zrealizować tego typu przerwanie ? :|

ODPOWIEDZ