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

Brak odczytu danych przez SPI0 w LPC2131 - jak sprawdzić linię CLK0?

domino36 18 Wrz 2007 14:48 1194 4
REKLAMA
  • #1 4295746
    domino36
    Poziom 11  
    Posty: 10
    Witam

    Wykonałem własną płytkę PCB, na której umieściłem mikrokontroler LPC2131 + układy I/O MCP23S08, pamięć FLASH AT45DB11B + inne peryferia jak RS232, 485... To jest mój pierwszy model wykonany na powyższym procesorze. Program pisze pod środowiskiem Keil, z podmapowanym kompilatorem GNU. Obsługę portów I/O, timera i uarta przeszedłem bezboleśnie. Problem pojawił się z obsługą SPI0 do której podłączone są układy MCP i układ AT. Problem polega na tym, że nie mogę odczytać z układów żadnych danych. Jestem na 100% pewny, że nadawanie danych ( linia MOSI), odbieranie danych ( linia MISO) działają OK, ponieważ w momencie zwarcia ich pomiędzy sobą z rejestru odbiornika SPI0 odczytuje dane wczesniej wysłane oraz generowane jest przerwanie od zakończenia transmisji. Nie wiem niestety co się dzieje na lini CLK0, mam wrażenie jak by nie była aktywna i dane nie były wpisywane do wybranego układu... (Nie posiadam oscyloskopu wiec nie jestem wstanie zobaczyc co się dzieje fizycznie na tej lini...)
    Linie CS dla odczytywanych układów pracują poprawnie, zaś przy odczycie pamięci flach wykorzystuje bibliotekę zastosowaną wcześniej w procesorze MSP430, gdzie działała poprawnie... (stąd moje podejrzenie, że SPI w LPC nie działa poprawnie). Poniżej umieściłem kod inicjujący SPI0. Może czego nie doczytałem w manualu procesora LPC213x....

    Bedę wdzięczny, za wskazówki i podpowiedzi...

    Pozdrawiam

    void InitSPI_0(void)
    {

    PINSEL0 |= (0x01 << 8 ) | (0x01 << 10 ) | (0x01 << 12); // ustawienie funkcji dla MISO0, MOSI0, CLK0

    S0SPCCR = 60; // podzielnik SPI PCLK , zawsze parzysty
    S0SPCR = SPI0_SPIE | SPI0_MSTR;

    /* konfiguracja dla 3 kanalu */
    VICVectCntl3 = VIC_CHANNEL_ENABLED | VIC_CHANNEL_SPI0;
    VICVectAddr3 = (unsigned int)isr_SPI0;

    /* odblokowanie wybranego przerwania*/
    VICIntEnable |= VIC_SOURCE_SPI0;
    }
  • REKLAMA
  • #2 4295853
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Cytat:
    Nie wiem niestety co się dzieje na lini CLK0

    Możesz "zjechać" z taktowaniem do min, ustawić max. dzielnik i przebieg będzie można "zobaczyć" na "oscyloskopie" z karty dzwiękowej.
    Co do lini CS rozumiesz że sterujesz ją programowo?
    Proponuje wyłaczyć przerwanie i sprawdzić działanie SPI wykorzystując flagę zajętości SPIF.
  • REKLAMA
  • #3 4296501
    michalko12
    Specjalista - Mikrokontrolery
    Posty: 3394
    Pomógł: 462
    Ocena: 321
    Podciągnij kloka pullupem 10k.
  • REKLAMA
  • #4 4412635
    domino36
    Poziom 11  
    Posty: 10
    Niestety nadal nie działa mi interfejs SPI0, zabrałem się za uruchomienie SPI1 (SSP) :cry:
  • #5 4443861
    domino36
    Poziom 11  
    Posty: 10
    Problem rozwiazany - nóżka CLK procesora dla SPI0 była spalona. Po wymianie procesora wszystko jest OK.
    Dziękuje za wskazówki. Pozdrawiam
REKLAMA