Forum: Mikrocontroller und Digitale Elektronik LPC1114/5 SPI/CLK Config


von Peter S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich versuche die SPI Schnittstelle auf dem lpc1115(NXP LPCEperesso
Board) zum Laufen zu bringen.  Leider hab ich ein Fehler den ich nicht
finde.

Meine CLK Konfiguration funktioniert nicht richtig, sie wird nur auf 
High gezogen und taktet nicht.

Was mache ich falsch oder was übersehe ich?

Der volle Source Code befindet sich im Anhang.

Danke euch.

void CLK_Einstellen{

    LPC_SYSCON->SYSPLLCLKSEL  =(1<<0);
    LPC_SYSCON->SYSPLLCLKUEN  =(0<<0);
    LPC_SYSCON->SYSPLLCLKUEN  =(1<<0);
    LPC_SYSCON->MAINCLKSEL    =(1<<0);
    LPC_SYSCON->MAINCLKUEN    =(0<<0);
    LPC_SYSCON->MAINCLKUEN    =(1<<0);
    LPC_SYSCON->SYSAHBCLKDIV  =(1<<0);


}

void CLK_Configuration();

    LPC_SYSCON->CLKOUTCLKSEL  =(1<<0);
    LPC_SYSCON->CLKOUTUEN     =(0<<0);
    LPC_SYSCON->CLKOUTUEN     =(1<<0);
    LPC_SYSCON->CLKOUTDIV     =(1<<0);
    LPC_IOCON->PIO0_1        |=(1<<0)|(1<<4);
}

von Jim M. (turboj)


Lesenswert?

Ohne ins Manual zu schauen: Du scheinst da die Clock kommplett 
abzuschalten. Dann taktet da nix mehr.

Die vielen magischen Bits sollte man durch Beschreibende Flags ersetzen.

PLL Umschalten sieht normalerweise ganz anders aus...

von Peter S. (Gast)


Lesenswert?

Hi Jim,

zunächst einmal bedanke ich mich für deine Antwort.

Ich habe die konfiguration versucht, wie sie im Datenblatt beschrieben 
wird, zu konfigurieren.

"Die vielen magischen Bits sollte man durch Beschreibende Flags 
ersetzen."

Da ich noch neu auf diesem Gebiet bin, verstehe ich das leider nicht 
ganz, könntest du mir mit einem Beispiel weiter helfen.

Danke

von Peter S. (Gast)


Lesenswert?

Hallo Leute,

Ich habe bei meine SPI Konfiguration, für den LPC1115 von NXP, Probleme
damit mein CLK richtig einzustellen. Da ich noch sehr neu auf diesem
Gebiet bin, frage ich euch ob ihr mir mit einem Code Beispiel oder einer 
Lösung weiter helfen könntet?

Hier ist was ich bis jetzt nach der Anleitung hinbekommen konnte.

Danke für eure Hilfe im voraus.

void CLK_Einstellungen(){
  //CLK Einstellung
    LPC_SYSCON->SYSPLLCLKSEL  =(1<<0);
    //S27 Externen Takt als System Oszilator wählen
    LPC_SYSCON->SYSPLLCLKUEN  =(0<<0);
    LPC_SYSCON->SYSPLLCLKUEN  =(1<<0);
    //S28 Externer takt wird als Main CkL eingestellt

    LPC_SYSCON->MAINCLKSEL    =(1<<0);
    LPC_SYSCON->MAINCLKUEN    =(0<<0);
    LPC_SYSCON->MAINCLKUEN    =(1<<0);
    LPC_SYSCON->SYSAHBCLKDIV  =(1<<0);

}

void CLK_OutPinCfg(){
  //CKLOUT PIN CFG
    LPC_SYSCON->CLKOUTCLKSEL  =(1<<0);                //S33 CLKOUT clock
source select System oscillator
    LPC_SYSCON->CLKOUTUEN     =(0<<0);                //S33 CLKOUT clock
source update
    LPC_SYSCON->CLKOUTUEN     =(1<<0);
    LPC_SYSCON->CLKOUTDIV     =(1<<0);                //S34 CLKOUT clock
divider Div by 1
    LPC_IOCON->PIO0_1        |=(1<<0)|(1<<4);
}

: Verschoben durch User
von W.S. (Gast)


Lesenswert?

Es nützt auch nichts, wenn du es zweimal postest.

Also beschreibe ersmal, was du eigentlich willst, was du bereits hast 
und was du bereits kannst.

Ganz generell kann ich dir eine systematische Vorgehensweise anraten:

1. Pins aufsetzen wie gewünscht, also welche Peripheriefunktion usw.
2. Clock bzw. PLL aufsetzen, wie gewünscht
3. Clock-Freigaben machen für alle Peripherie, die du aktiv haben willst
4. die einzelnen Peripherie-Cores aufsetzen

Die Positionen 1..3 macht man am besten in einer separaten Unit config.c 
oder so ähnlich, denn sie bezieht sich ja auf das konkrete Projekt.

Die Position 4 hingegen macht man im jeweiligen zugehörigen 
Low-Level-Treiber.

In main.c hat sowas alles nichts zu suchen. Dort steht dann bloß sowas:
Init_ADC();
Init_UART0(9600);
Init_USB();
Init_SysTick();
und so weiter.

Klaro?

W.S.

von Peter S. (Gast)


Lesenswert?

Hi,

danke dir für deine tipps und deine Antwort. Mein problem liegt darin 
ein CLK zu generieren. Es wird zwar auf High gezogen aber es taktet 
nicht, dass das alles nicht in der main.c geschrieben wird weiß ich 
auch, das war nur provisorisch. Ich habe es lediglich bereits 
hinbekommen das meine Daten einwandfrei gesendet werden können.

Ein weiteres Porblem scheint zu sein, das ich das Datenblatt nicht ganz 
verstanden habe. Ich habe auch die letzten Tage damit verbracht in Foren 
danach zu suchen, ob das jemand mal gelöst hat.

von Jim M. (turboj)


Lesenswert?

Du hast in einem Header die Definition für LPC_SYSCON. Die Bits stehen 
da normalerweise in der Nähe, wenn nicht im selben File.

Dein geposteter Source Code hat übrigens gar keine Header. So geht das 
bestimmt nicht durch den Compiler.

Peter S. schrieb:
> Ich habe die konfiguration versucht, wie sie im Datenblatt beschrieben
> wird, zu konfigurieren.

Die PLL muss man erst programieren und dann warten bis das entsprechende 
Lock Bit gesetzt ist, erst dann darf man die Main Clock darauf 
umschalten.

Peter S. schrieb:
> "Die vielen magischen Bits sollte man durch Beschreibende Flags
> ersetzen."
>
> Da ich noch neu auf diesem Gebiet bin, verstehe ich das leider nicht
> ganz, könntest du mir mit einem Beispiel weiter helfen

So ähnlich:
1
LPC_SYSCON->MAINCLKUEN = MAINCLKUEN_ENA;

Die genaue Bit Definition kann anders heissen, da muss man kurz nach 
suchen. man grep

von WaddeHaddeDuDeDa (Gast)


Lesenswert?

Peter S. schrieb:
> Da ich noch neu auf diesem Gebiet bin, verstehe ich das leider nicht
> ganz, könntest du mir mit einem Beispiel weiter helfen.

Verwende am besten erst einmal LPCopen und schaue dort wie du mit dem 
Mikrocontroller umgehst.
http://www.nxp.com/products/software-and-tools/hardware-development-tools/lpcxpresso-boards/lpcopen-software-development-platform-lpc11xx:LPCOPEN-SOFTWARE-FOR-LPC11XX
Schaue nach der Version für LPCXpresso LPC11C24, die unterstüzt auch den 
LPC1115.

von Manni (Gast)


Lesenswert?

Genau. Importiere einfach mal die o.g. Beispiele in die LPCXpresso-IDE 
und gehe sie durch. Mit F3 und/oder Maus draufhalten kann man sich dann 
wunderbar durch die ganzen Funktionen und defines hangeln.

von Peter S. (Gast)


Angehängte Dateien:

Lesenswert?

Ich danke Euch für eure Unterstützung.

Ich habe Euch im Anhang ein Oszi. Bild angefügt, damit Ihr Euch mein 
Problem vielleicht besser vorstellen könnt. Der Blaue Chanal soll den 
SCK darstellen und der Gelbe den MOSI.

danke für den Link WaddeHaddeDuDeDa, leider hilft mir das nicht wirklich 
weiter.

Also noch mal das Programm lässt sich problemlos Compilieren, dass was 
ich Euch hier geschickt habe, ist nur ein Ausschnitt der so auch nicht 
Compilierbar ist Jim Meba. Was mich noch ein bisschen verwirrt ist mein 
I2C funktioniert auch einwandfrei mit dem SCL, also muss doch der 
innerer CLK richtig eingestellt sein oder?

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.