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

XMega128A3U - XPT2046 - Panel nie wystawia ponownie przerwania.

SciroWroc 01 Kwi 2015 11:58 1212 1
REKLAMA
  • #1 14579317
    SciroWroc
    Poziom 14  
    Witam.
    Mam problem z panelem dotykowym, a dokładniej z sygnałem TIRQ.

    Wyświetlacz 2,8 '' ze sterownikiem ILI9325
    Panel dotykowy ze sterownikiem XPT2046

    Dotyk podpięty do SPI na porcie C. Połączenie 1-1 bez pull-up'ow, rezystorów w linii i kondensatorów.
    pin 2 na porcie C dostaje sygnał o dotknięciu ekranu.

    Do tej pory potrzebowałem tylko wykrycia dotknięcia ekranu i to działało prawidłowo. Zbocze opadające na pinie 2 zgłaszało przerwanie.

    Problem pojawił się gdy chciałem odczytać pozycję.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Wysłanie danych
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Ustawienie portu
    Kod: text
    Zaloguj się, aby zobaczyć kod


    W odpowiedzi dostaje dane o pozycji, ale po przesłaniu informacji, panel zgłasza tylko raz lub dwa razy przerwanie na pinie TIRQ (niski stan).

    Z dokumentacji (strona 24 tabela 5) wynika, że aby ten pin dalej zgłaszał przerwania, należy ustawić bit PD0=0.
    Czasami stan stan pinu zostaje niski, czasami wysoki.

    Dzieje się tak bez względu, czy mam włączoną optymalizację, czy nie. Taktowanie 2MHz lub 32 MHz i preskaler SPI od 4 do 128 nic nie zmienia.
    Czasami nie można się doczekać potwierdzenia odpowiedzi "while(SPIC.STATUS == 0); "

    Czy trzeba coś jeszcze nadać, po odebraniu pozycji ?
    Czy jak wyślę bajt sterujący i dostane odpowiedź w 2 kolejnych bajtach to wszystko ?

    pozdrawiam
    Grzegorz.
  • REKLAMA
  • #2 14581617
    SciroWroc
    Poziom 14  
    Ok udało się rozwiązać.

    Problemem było NIE podnoszenie pinu CS po konwersji.
    Drugim problem było zerowanie flagi I. Nie doszedłem, dlaczego tak się działo.
    Wyłączenie przerwań na czas odczytu pozycji i ponownie ich uruchomienie, pozwoliło mi zamaskować problem z flagą I.

    Działająca procedura odczytu. Wywoływana w przerwaniu od zbocza opadającego pinu 2 (TIRQ).
    Kod: text
    Zaloguj się, aby zobaczyć kod


    pozdrawiam
    Grzegorz
REKLAMA