zumek napisał: smalski->O priorytecie przerwań w AVR-ach , można powiedziec tak , że im niższy(mniejszy) adres wektora , tym wyższy priorytet posiada dane przerwanie.
To jest zasada stosowana w PC, (np przerwanie 2h ma prorytet wyższy od 3h, ale niższy od 0h... 0h (dzielenie przez zero) ma najwyższy priorytet..)..
w AVR wszystkie przerwania mają taki sam priorytet.. zasada jest taka że każde przerwanie ma swoją flage.. i wywołane zostanie to przerwanie które szybciej będzie miało ustawioną flage... po obsłudze nastapi przejście do kolejnej obsługi...
można programowo zmniejszyć priorytet: po wejściu do przerwania o (wg. nas) niższym priorytecie z początku ustawić flage I (instrukcja sei) co pozwoli na wywoływanie innych przerwań... na samym końcu
nietrzeba kasować flagi I.. gdy nastąpi powrót z przerwania (instrukcja reti) flaga I zostanie ponownie ustawiona.. w ten sposób jeśli podczas obsługi przerwania o niższym priorytecie wystąpi inne przerwanie - zostanie ono obsłużone odrazu..
pamiętac trzeba żeby stworzyć odpowiednio duży stos, który pomieści wywołania kilku przerwań,..
aha.. przed ustawieniem flagi I trzeba skasować flage IE (interrupt enable) aktualnego przerwania aby nienastąpiło ponowne wywołanie tego samego przerwania podczas jego trwania.. takie zapełnienie sie stosu przez jedno przerwanie jest groźne z oczywistych względów.. pod koniec obsługi przerwania trzeba wtedy flage IE tegoż przerwania ustawić..