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.

Xmega E5 - Dublowanie się przerwania

m72 02 Sty 2017 01:58 639 7
  • #1 02 Sty 2017 01:58
    m72
    Poziom 12  

    Chodzi o występowanie przerwania generowanego zwieraniem do masy pinu C1.
    Plan był taki:
    1. Wywołać przerwanie
    2. W przerwaniu zdezaktywować przerwania na tym porcie

    Kod: c
    Zaloguj się, aby zobaczyć kod

    3. Namalować coś na ekranie
    4. Po powrocie z przerwania odczekać chwilę
    5. Włączyć przerwanie na pinie C1.

    Nie wiem czemu podczas przywracania przerwań w pętli while
    Kod: c
    Zaloguj się, aby zobaczyć kod

    przerwanie generowane jest powtórnie przez co zawsze występuje ono podwójnie.
    Jak rozwiązać ten problem ?

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Obrazek przedstawiający podwójne rysowanie znaku wywołane jednym zmasowaniem pinu.
    Xmega E5 - Dublowanie się przerwania

    0 7
  • #2 02 Sty 2017 02:33
    2675900
    Użytkownik usunął konto  
  • #3 02 Sty 2017 02:37
    373522
    Użytkownik usunął konto  
  • Pomocny post
    #4 02 Sty 2017 09:11
    tmf
    Moderator Mikrokontrolery Projektowanie

    @niveasoft To nie ten przypadek.
    Wyjaśnienie tej zagadki jest raczej proste - flaga przerwania jest kasowana, ale zwieranie mechaniczne powoduje bouncing, więc zgłaszanych jest więcej niż jedno przerwanie. Samo wyłączenie przerwania nie wpływa na odpowiednią flagę, więc przy kolejnym drganiu jest ona ustawiana, ale przerwanie nie jest obsługiwane bo je wyłączyłeś. W momencie włączenia, procesor pamięta, że to przerwanie było i je natychmiast obsługuje. Rozwiązanie jest równie banalne co wytłumaczenie - przed ponownym włączeniem przerwania należy skasować jego flagę.

    0
  • #5 02 Sty 2017 20:15
    m72
    Poziom 12  

    tmf napisał:
    Rozwiązanie jest równie banalne co wytłumaczenie - przed ponownym włączeniem przerwania należy skasować jego flagę.



    Faktycznie, działa :)
    Niech mnie jeszcze ktoś oświeci - czy na jednym porcie każdy pin może stanowić oddzielne przerwanie z indywidualną procedurą jego obsługi, czy jest tylko jedno przerwanie na cały port ?

    0
  • #6 02 Sty 2017 20:28
    tmf
    Moderator Mikrokontrolery Projektowanie

    Masz dwa wektory przerwań na jeden port, piny możesz w dowolny sposób przyporządkować do jednego z dwóch wektorów dla danego portu.

    0
  • #7 02 Sty 2017 21:20
    m72
    Poziom 12  

    A w Xmegach E5 przypadkiem nie ma tylko jednego przerwania na port ?
    Sugeruję się tym że, w podpowiedziach nie ma takiego skrótu jak np INT0MASK tylko INTMASK

    Xmega E5 - Dublowanie się przerwania

    0