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

[PIC16F1518][C] System przerwań.

smokeing 06 Mar 2012 22:25 1029 3
  • #1 06 Mar 2012 22:25
    smokeing
    Poziom 12  

    Witam.

    Mój kod obsługi przerwania:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Obsługa z MSSP ma dla mnie większy priorytet niż obsługa od Timera0.

    Nie mogę jednak zrozumieć zasady działania systemu przerwań w tym uC.
    Myślałem że jest tak:
    Skok do przerwania
    GIE na 0
    Obsługa przerwania
    powrót, GIE na 1

    Czy gdy GIE jest 0 to SSPIF się nie ustawi? Ze schematu w nocie wynika że nie zostanie wykonany skok, nie ma nic o ustawianiu tego bitu.

    Spotkało mnie też dość dziwne zjawisko mianowicie gdy w trakcie obsługiwania przerwania od Timera zostanie zgłoszone przerwanie od MSSP program mi się zawiesza.

    Dałbym ten kod który jest w timerze do pętli nieskończonej i synchronizował tylko z timerem, ale nadal mam problem: co gdy 2 przerwania trafią na siebie. Dodatkowo w pętli nieskończonej mam obsługę informacji która przychodzi z SPI (w obsłudze MSSP odkładam sobie tylko do pamięci kolejne bajty i analizuję je że tak powiem na spokojnie)

    Z góry dziękuję za odpowiedź
    smokeing

    0 3
  • #2 07 Mar 2012 00:36
    94075
    Użytkownik usunął konto  
  • Pomocny post
    #3 07 Mar 2012 00:45
    adamwesola
    Poziom 24  

    SSPIF ustawia się niezależnie od GIE, natomiast przerwanie wystąpi wówczas gdy ustawiony jest SSPIE, w rejestrze PIE1 oraz PEIE w rejestrze INTCON.
    Po zakonczeniu obsługi przerwania timera, ustawiona flaga SSPIF wywoła obsługę przerwania od MSSP

    0
  • #4 07 Mar 2012 00:50
    smokeing
    Poziom 12  

    Aha!
    Czyli nawet jeżeli bym w funkcji obsługującej przerwania zamienił miejscami te if'y (MSSP dał na początku) to skok wykona się drugi raz :D
    Takie sprytne.

    Dzięki za odpowiedź!

    0