PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LPC1769 SSP0(SPI) schwierigkeiten



Maxtronik
24.04.2012, 19:20
Hallo,

ich möchte über einen SPI Bus mit einem Display kommunizieren.
Das ganze System besteht aus einem LPC1769 Xpresso Board.
Für Testzwecke habe ich erst einmal ein Soundkarten Oszilloskop an SCK gehängt,
aber ich schaffe es nicht den SPI zu initialisieren. Ich habe schon alle register gesetzt verändert,
ausprobiert, doch es will mir nicht gelingen ein Clock Signal anzeigen zu lassen.

Hier ist der Code:


#ifdef __USE_CMSIS
#include "LPC17xx.h"
#endif

#include <cr_section_macros.h>
#include <NXP/crp.h>

__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;

int main(void)
{
LPC_SC->PCONP |= (1<<21); //PCSSP0 = 1 Enable AHB clock
LPC_SC->PCLKSEL1 &= ~(1<<10); //PCLK_peripheral = CCLK/4
LPC_SC->PCLKSEL1 &= ~(1<<11);
LPC_SSP0->CPSR = 4; //Clock Prescale

LPC_PINCON->PINSEL0 &= ~(1 << 30); // P0.15: SCK0
LPC_PINCON->PINSEL0 |= (1 << 31);
LPC_PINCON->PINSEL1 &= ~((1<<2) | (1<<4)); // P0.17: MISO0, P0.18: MOSI0
LPC_PINCON->PINSEL1 |= (1<<3) | (1<<5);

LPC_SSP0->CR0 &= ~(1<<0); //8 Bit
LPC_SSP0->CR0 |= (1<<1) | (1<<2) | (1<<3); //8 Bit
LPC_SSP0->CR0 &= ~(1<<6); //CPOL = 0 SCK high zwischen frame

LPC_SSP0->CR1 &= ~(1<<2); //SSP Master
LPC_SSP0->CR1 |= (1<<1); //SSP Enable

uint8_t i;
while(1)
{
i = 0;
i = i + 1;
}
return 0 ;
}

(CodeRed Develop)

Übersehe ich vielleicht ein Register oder setze ich sie falsch.
Mit dem Debugger habe ich die Register ausgelesen, scheint eigentlich alles in Ordnung zu sein.

MfG Maxtronik

askazo
25.04.2012, 09:30
Ich kenne Deinen Controller nicht, von daher kann ich nicht wirklich überprüfen, ob Deine Initialisierung richtig ist.
Aber um ein Clock-Signal messen zu können, musst Du auch Daten über die SPI-Schnittstelle senden.
SCK wird nur dann getaktet, wenn vom Master Daten gesendet werden.

Gruß,
askazo

Maxtronik
25.04.2012, 17:54
Guter Tipp askazo ;)

Ich hoffe es reicht einfach etwas ins Datenregister zu schreiben. Aber dennoch funktioniert es nicht.
Ich bin wirklich total verzweifelt....:(
Ich werde wohl erstmal das Display mit einem AVR testen, da kann ich mir sicher sein das der SPI funtioniert.
Aber wenn irgendjemand noch einen Tipp oder Hinweiß hat würde ich mich sehr freuen ;)

MfG Maxtronik

askazo
26.04.2012, 07:42
Ich habe mir jetzt mal das Manual des LPC angeschaut und Deine Registereinstellungen überprüft.
Das einzige, was mir aufgefallen ist, ist dass das CR0-Register nicht so gesetzt ist, wie Du's kommentiert hast (gesetzt ist 15-Bit Transfer, SCK Low between Frames).
Aber trotzdem müsste ein Takt zu messen sein, sobald Du etwas in's Datenregister schreibst.
Vielleicht musst Du zusätzlich noch den P0.16 als SSEL0 konfigurieren, aber eigentlich kann ich mir nicht vorstellen, dass es daran liegt.


Was mich ein wenig wundert ist, dass Du das SSP0-Modul verwendest anstatt direkt das SPI-Modul zu verwenden...

Gruß,
askazo