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;
}
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;
}