LPC1788: Wie kriege ich SSP1 ans Laufen?

OP (Firma: Druckerei Beste) #4204641
Lesenswert?

Hi!

Mein Board hat einen LPC1788. An SSP0 hängt ein ADC, der funktioniert. 
Jetzt will ich externes Flash und EEPROM an SSP1 ans Rattern bringen.

Code sieht folgendermaßen aus (leicht aufbereitet):

LPC_SSP_T *ssp = LPC_SSP1;
Chip_SSP_Init(ssp);
Chip_SSP_SetBitRate(ssp, 30000000);
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 7, (IOCON_FUNC2 | IOCON_MODE_INACT));
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 8, (IOCON_FUNC2 | IOCON_MODE_INACT));
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 9, (IOCON_FUNC2 | IOCON_MODE_INACT));
Chip_SSP_SetFormat(ssp, SSP_BITS_8, SSP_FRAMEFORMAT_SPI, 
SSP_CLOCK_CPHA0_CPOL0);
Chip_SSP_SetMaster(ssp, 1);
Chip_SSP_Enable(ssp);

Mit SSP0 funktioniert dieses Setup, mit SSP1 nicht. Mein Oszi zeigt 
keine Signale auf SCLK, MISO oder MOSI.

Vielen Dank!
Thomas
OP (Firma: Druckerei Beste) #4204767
Lesenswert?

Jim M. schrieb:
> Hast Du den SSP1 via SC->PCONP Register eingeschaltet? Der ist IIRC per
> default aus.

Das User Manual sagt in "21.1 Basic Configuration":

"Remark: On reset, SSP interfaces 0 and 1 are enabled (PCSSP0/1 = 1), 
while SSP2 is disabled (PCSSP2 = 0)."

Habe es trotzdem mal probiert, macht keinen Unterschied. (Obwohl es 
irgendwie nach genau diesem Grund aussieht...)
Gast #4204865
Lesenswert?

> SYSCTL_CLOCK_IOCON. Für mich sieht es so aus, dass bei diesem Fehler
> SSP0 auch nicht funktionieren dürfte. (?)

Ist richtig, habe mir das UserManual vorher nicht angesehen, war nur ein 
Versuch. Bei diesem Conroller ist der Takt für IOCON bereits nach dem 
Reset aktiviert (Seite 26 im UM):
15 PCGPIO Power/clock control bit for IOCON, GPIO, and GPIO interrupts. 
1

Interessanterweise gilt das nicht für:
10         PCSSP1        SSP 1 interface power/clock control bit. 0
21         PCSSP0        SSP0 interface power/clock control bit. 0

obwohl wie von dir Zitiert eigentlich auch das Gegenteil behauptet wird!

Trotzdem kann das power/clock control bit nicht Ursache des Übels sein, 
da 1. SSP0 ja funktioniert und 2. dieses Bit mit Chip_SSP_Init() gesetzt 
wird.

Mfg
michael
OP (Firma: Druckerei Beste) #4205316
Lesenswert?

...und es kommt noch besser. Nicht nur, dass sich das User Manual 
anscheinend selbst widerspricht. Ich habe da einen weiteren Tipp 
bekommen: In table 89 (Type W IOCON register) im Manual steht zu Bit 7:

"Note: this bit must be set to 1 for normal operation."

Da frage ich mich, warum überhaupt irgendwelche IO-operationen 
funktionieren. Die Bits 7 waren in der Tat gelöscht (von 
Chip_IOCON_PinMuxSet), aber setzen half auch nix.

Gibt es weitere Vorschläge?
Thomas
OP (Firma: Druckerei Beste) #4207124
Lesenswert?

Neue Beobachtung: Zwei Pins werden für CS im GPIO Modus benutzt und 
arbeiten wie gewünscht. Ich habe die SSP Pins jetzt mal als GPIO 
Ausgänge konfiguriert und triggere sie in der Hoffnung, eine 
Rechteckfunktion auf dem Oszi zu sehen:

 Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 5);
 Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 6);
 Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 7);
 Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 8);
 Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 9);
 Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 5, 1 << 7);
 Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 6, 1 << 7);
 Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 7, 1 << 7);
 Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 8, 1 << 7);
 Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 9, 1 << 7);
 while (1)
 {
    vTaskDelay(1); // FreeRTOS delay by 1 ms
    Chip_GPIO_SetPinOutLow(LPC_GPIO, 0, 5);
    Chip_GPIO_SetPinOutLow(LPC_GPIO, 0, 6);
    Chip_GPIO_SetPinOutLow(LPC_GPIO, 0, 7);
    Chip_GPIO_SetPinOutLow(LPC_GPIO, 0, 8);
    Chip_GPIO_SetPinOutLow(LPC_GPIO, 0, 9);
    vTaskDelay(1); // FreeRTOS delay by 1 ms
    Chip_GPIO_SetPinOutHigh(LPC_GPIO, 0, 5);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO, 0, 6);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO, 0, 7);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO, 0, 8);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO, 0, 9);
  }

Aber nix is. Ich kriege 500 Hz an Port 0 Pins 5 und 6 aber die anderen 
schalten nur einmal bei Booten von high auf low, wohl wegen Pull Ups.
#4207136
Lesenswert?

Thomas B. schrieb:
> Ich kriege 500 Hz an Port 0 Pins 5 und 6 aber die anderen
> schalten nur einmal bei Booten von high auf low, wohl wegen Pull Ups.

Dann schau Dir mal im Debugger die ganzen Pin Config Register an. Wenn 
die Pins nicht auf GPIO Funktionen reagieren, dann stehen sie auf 
irgendeiner Hardware Funktion.

Hängt da eventuell noch irgendwelche externe Hardware dran (Schaltplan)?
OP (Firma: Druckerei Beste) #4207238
Lesenswert?

Jim M. schrieb:
> Thomas B. schrieb:
>> Ich kriege 500 Hz an Port 0 Pins 5 und 6 aber die anderen
>> schalten nur einmal bei Booten von high auf low, wohl wegen Pull Ups.
>
> Dann schau Dir mal im Debugger die ganzen Pin Config Register an. Wenn
> die Pins nicht auf GPIO Funktionen reagieren, dann stehen sie auf
> irgendeiner Hardware Funktion.
>
> Hängt da eventuell noch irgendwelche externe Hardware dran (Schaltplan)?

Die GPIO-Ansteuerung habe ich inzwischen im Griff. Es gibt da ein "fast 
GPIO port mask register" (User Manual 8.5.1.2). Seit ich das passend 
modifiziert habe klappt es. Aber auf SSP1 wirkt es sich nicht aus.

Externe Hardware sind ein Flash und ein EEPROM an eben diesem SSP und 
Bits 5 und 6 für CS.

Also bin ich keinen Schritt weiter.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren