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);
}
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...
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
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);
}
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.
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.
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
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.
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?
Eine eigene Frage?
Dieser Thread ist über 10 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.