Witam, obecnie uzywam Timera0 generowania przerwania co okolo 1 sek w ktorym to przerwaniu jest wykonywana pewna procedura. Chce zaprzegnac Timer1 do przerwania sprawdzajacego klawiaturke. Jak ustawic priorytety przerwan? Czy w trakcie trwania jednego przerwania moze nastapic drugie?
AVRGCC przerwania...
May 15, 2004
1 Replies
Sat, 15 May 2004 11:04:16 +0200, na pl.misc.elektronika, Paweł Kurzawa napisał(a):
Avr mają sztywny priorytet przerwań ( wg kolejności wektorów ) i nic tam nie można przestawić. Wejście do handlera przerwania od razu sprzętowo blokuje następne i odblokowuje po powrocie RETI - więc jeśli chcesz w handlerze umożliwić następne przerwanie trzeba jawnie użyć sei. Avrgcc ma to przygotowane - są dwa typy makr do obsługi : SIGNAL działający tradycyjnie ( z blokadą ) i INTERRUPT - odblokowujący w prologu następne przerwania. Przeważnie wystarcza SIGNAL - INTERRUPT pozostaje do jakichś zupełnie szczególnych przypadków i jego działanie musi być dokładnie przewidziane żeby nie przysporzyć niespodzianek ;-)
IMHO używanie różnych timerów do klawiatury i zegara 1 s to w takim wydajnym procku marnowanie zasobów ( chyba, że dla edukacji ). Do większości tradycyjnych zastosowań wystarcza z powodzeniem jeden uniwersalny zegar systemowy np 1 ms ( zrealizowany np. w bardzo wygodnym i dokładnym trybie CTC ), który jest podstawą dla całego szeregu timerów programowych, timeoutów, pollingów powolnych - jak klawiatura - peryferiów itp.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required