Forum: Mikrocontroller und Digitale Elektronik Probleme mit SPI und LPC2103


von Tobias (Gast)


Lesenswert?

Hallo,

ich habe Probleme mit dem SPI Port auf meinem Olimex lpc2103 board.
1
....
2
int main(void)
3
{
4
  systemInit(); // PLL, MAM, VPB
5
  PCB_PINSEL0 |= (1<<8)|(1<<10)|(1<<12)|(1<<14); //Pin Select für SPI0
6
7
  //Init SPI0
8
  SPI_SPCCR = 16;
9
  SPI_SPCR = (1<<2) | (1<<3) | (1<<5) | (1<<7) | (1<<11);
10
11
  SPI_SPDR = 0x11; //write to dataregister
12
  
13
  while (!(SPI_SPSR & 0x80)); // wait for datatransfer to be completed
14
....

Ich habe SSEL (Pin0.7) mit 3.3V verbunden. Mit meinem Debugger kann ich 
sehen, dass der Wert des Statusregister SPI_SPSR (0xE0020004) auf 0x80 
wechselt, sobald ich ins Datenregister SPI_SPDR schreibe, aber das 
Programm bleibt in der While Schleife hängen. Ich hoffe mir kann 
irgendjemand weiterhelfen.
Viele Grüße, Tobias

von Mario P. (mariopieschel)


Lesenswert?

SSEL heißt slave select und ist ein Eingang! Es soll also ein SPI-Sklave 
angesprochen werden. Du betreibst den LPC2103 als Meister, vergiss SSEL 
und mach' das hier:

....
int main(void)
{
  systemInit(); // PLL, MAM, VPB
  PCB_PINSEL0 |= (1<<8)|(1<<10)|(1<<12); //Pin Select für SPI0

  //Init SPI0
  SPI_SPCCR = 16;
  SPI_SPCR = (1<<2) | (1<<3) | (1<<5) | (1<<7) | (1<<11);

 irgend ein Pin als Ausgang auf Low für den SPI-Chip /CE

  SPI_SPDR = 0x11; //write to dataregister

  while (!(SPI_SPSR & 0x80)); // wait for datatransfer to be completed

 diesen Pin auf High für den SPI-Chip /CE
....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.