logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

ATmega128 - Czy krótki sygnał INT1 wywoła przerwanie przy aktywnym TIMER1?

al555 08 Kwi 2013 17:08 1440 4
  • #1 12172972
    al555
    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
    #2 12172996
    tmf
    VIP Zasłużony dla elektroda
    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
    #3 12173042
    marci4
    Poziom 31  
    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.
  • #4 15651916
    trkmajor
    Poziom 11  
    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?
  • #5 15652050
    szelus
    Poziom 34  
    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.
REKLAMA