Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega - Sygnał zewnętrznego przerwania

08 Kwi 2013 17:08 1308 4
  • Poziom 20  
    Witam,

    czy ktoś może podpowiedzieć czy sygnał zewnętrznego przerwania musi być utrzymany w stanie ( np. niskim) do czasu wywołania procedury przerwania czy może zostać zwolniony.

    przykład dotyczy ATmega128 (kwarc 14MHz) gdzie uruchomione są dwa przerwania od licznika TIMER1 oraz zewnętrzne przerwanie INT1(aktywne zbocze opadające).
    Sygnał przerwania INT1 trwa dosyć krótko ok. 20us, ale może się zdarzyć że pełen cykl zmiany INT1 (0-1) będzie podczas trwania obsługi przerwania licznika TIMER.

    Czy w takim przypadku przerwanie od INT1 zostanie wywołane ?
  • Pomocny post
    Moderator Mikrokontrolery Projektowanie
    Tak, o ile procesor nie będzie w uśpieniu. Jeśli będzie to wymagana jest funkcjonalność asynchronicznego wybudzania, czego ATMega nie ma dla zboczy, wyłącznie dla poziomu. Trzeba też pamiętać, że zmiany krótsze niż okres zegara mogą być przez MCU niezauważone. Oczywiście dla kwartcu 14 MHz i impulsu 20us nie jest to problemem.
  • Pomocny post
    Poziom 29  
    Może zostać zwolniony. Przerwanie w momencie wystąpienia jest odnotowywane w odpowiednim rejestrze i 'czeka' tam aż nie zostanie zresetowane/wykonana procedura obsługująca to przerwanie.
  • Poziom 10  
    Temat dość dawno nie ruszany, ale mam dodatkowe pytanie.
    Jeżeli Atmega1280 ma kwarc 16MHz to czy w świetle powyższego znaczy, że zewnętrzne przerwanie INT0 może być wywołane nawet 16 razy na mikro sekunde? us
    Czy to oznacza, że czas trwania imp. wyzw. moze być faktycznie poniżej 1 us?
  • Specjalista - Mikrokontrolery
    trkmajor napisał:
    Jeżeli Atmega1280 ma kwarc 16MHz to czy w świetle powyższego znaczy, że zewnętrzne przerwanie INT0 może być wywołane nawet 16 razy na mikro sekunde?

    Odpowiedź krótka: nie.
    Odpowiedź długa - to zależy. :) Zależy od tego, co rozumiesz przez wywołanie przerwania 16 razy na sekundę. Nie da się obsługiwać przerwań z taką częstotliwością, bo raz, że samo wejście w przerwanie zajmuje co najmniej 5+3 taktów zegara, a dwa, że funkcja obsługi przerwania też zwykle kilka rozkazów ma.
    Zgłaszanie przerwania z taką częstotliwością też nie nastąpi, bo zgłoszenie następuje z chwilą ustawienia bitu żądania przerwania w odpowiednim rejestrze, a to nie nastąpi ponownie, dopóki ten bit po poprzednim zgłoszeniu nie zostanie skasowany.
    Natomiast jak często wystąpi możliwość wykrycia i zgłoszenia przerwania masz opisane w w rozdziale 15.2 DS.

    trkmajor napisał:
    Czy to oznacza, że czas trwania imp. wyzw. moze być faktycznie poniżej 1 us?

    Tak. Dla przerwań wyzwalanych asynchronicznie zboczem (INT0 - 3) to minimalnie 50ns. Dla przerwań wyzwalanych synchronicznie zboczem to minimum 1 okres zegara, dla wyzwalanych poziomem to więcej, bo sygnał musi być aktywny aż do momentu przyjęcia zgłoszenia.