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

[LPC1114] pin GPIO jako źródło przerwania

04 Gru 2011 20:40 2167 10
  • Poziom 9  
    Witam,

    Potrzebuję, aby mikrokontroler reagował na jakieś zbocze na pinie (np. 1.0).
    Inicjalizacja wygląda tak:
    Code:
    LPC_SYSCON->SYSAHBCLKCTRL |= 0x00000040;
    
    LPC_IOCON->R_PIO1_0 |= 0x00000001;   
    LPC_IOCON->R_PIO1_0 &= ~0x00000018;
    LPC_GPIO1->DIR &= ~0x00000001;
    LPC_GPIO1->IS &= ~0x00000001;
    LPC_GPIO1->IBE &= ~0x00000001;
    LPC_GPIO1->IEV &= ~0x00000001;
    LPC_GPIO1->IE |= 0x00000001;
    NVIC_EnableIRQ(EINT1_IRQn);


    a funkcja obsługująca przerwania:
    Code:
    void PIOINT1_IRQHandler(void)
    
    {
       cośtam;
    }


    Problem w tym, że zmieniając w debugerze wartość pinu 1.0 albo jakiegokolwiek z portu 1 program nie wchodzi do przerwania.
    Co jest źle?
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Specjalista - Mikrokontrolery
    16 bit w LPC_SYSCON->SYSAHBCLKCTRL masz ustawiony?

    Dodano po 3 [minuty]:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Dlaczego GPIO2 a nie GPIO1?
  • Poziom 9  
    Już poprawiłam. Bo sprawdzałam też na pinie 2.0 i zapomniałam odmienić, ale i tak nie działa. 16. bit ustawiłam teraz, dalej to samo.
  • Specjalista - Mikrokontrolery
    Co masz w "cośtam"?
    Na jakiej podstawie stwierdzasz, że przerwanie nie jest wywoływane?
    Dlaczego stan portu zmieniasz w debugerze a nie bezpośrednio na procesorze. Jak można zmieniać stan pinu ustawionego na wejście?
    Inne przerwania działają?
  • Poziom 9  
    W cośtam - kasowanie flagi przerwania.
    Stwierdzam na podstawie takiej, że ustawiłam sobie break point'a na cośtam i nigdy się nie zatrzymuje. Zresztą używam Keila i tam na zielono zaznacza linijki kodu, które zostały chociaż raz wykonane, a ta nie jest nigdy.
    Zmieniam w debugerze w I/O port, bo wydaje mi się, że to wychodzi na to samo jak i na sprzęcie. Zresztą widzisz, że po dwukrotnym kliknięciu zapalają się przerwania GPIO1RIS i MIS.
    [LPC1114] pin GPIO jako źródło przerwania
    A inne przerwania działają. Zarówno Timery, jak i UART.
  • Specjalista - Mikrokontrolery
    Ten kod pod LPCXpresso działa.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jedyne co mi przychodzi do głowy jeszcze to niezgodność nazw funkcji wektorów przerwań lub zgubne skutki działania debuggera Keila.
  • Poziom 35  
    Debugger Keila ma się dobrze. U mnie pod tym debuggerem chodziło wszystko co chciałem, łącznie z przerwaniami GPIO.

    To działa pod keilem:
    Kod: C
    Zaloguj się, aby zobaczyć kod


    init tych przerwań:
    Kod: C
    Zaloguj się, aby zobaczyć kod


    Piny GPIO1: 0,4,5,8, int na oba zbocza
  • Poziom 13  
    Jakiś czas temu robiłem obsługę klawiatury PS/2 na układzie LPC111x (Link - wiem jakość kiepska ale niedługo poprawie) i w tym celu używałem przerwań od GPIO. Miałem taką sytuację że kod działał na fizycznym procesorze natomiast w Keil-u na symulatorze już nie. Powodem tego jest błąd w ustawianiu przerwań co można zaobserwować wchodząc do okna NVIC(Peripherals -> Core Peripherals -> Nestes Vectored Interrupt Controller) widać tam wyraźnie że przerwanie nie jest ustawione a nawet przy ręcznym ustawieniu nie jest przyjmowane. Kod pisałem w LPCXpresso natomiast do Keila wrzucałem tylko plik z rozszerzeniem axf który był generowany tam gdzie pisałem. Trzeba pamiętać o tym że czasami mogą zdarzyć się sytuacje że kod w Keil-u działa natomiast na fizycznym układzie już nie.
  • Poziom 9  
    Dziękuję za odpowiedzi.
    U mnie w Keilu, w NVIC wszystko jest ok.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    powoduje włączenie przerwania:
    [LPC1114] pin GPIO jako źródło przerwania
    LPCXpresso nie chce mi działać, więc faktycznie sprawdzę na sprzęcie.
  • Poziom 13  
    Jeżeli możesz to zamieść cały projekt z Keila z plikami (konkretnie interesuje mnie plik axf) a zbadam dokładniej sprawę bo mnie się zdaje że mamy do czynienia z jakimś błędem.
  • Poziom 9  
    Załączam projekt oczyszczony ze wszystkiego co zbędne. Dałam teraz, żeby reagował na pin 1.5, ale nie reaguje. Z kolei np. dla 1.4 za każdym razem wchodzi do przerwania.