Hallo Leute, ich versuche mich aktuell an einem LPC1113/302 und habe mir dafür ein LPCXpresso als Debugger geholt. Ich möchte allerdings nicht den auf dem Board sitzenden Controller, sondern einen externen (auf meinem eigenen Board) befindlichen Controller als Target verwenden und habe deshalb den Debugger (LPC-Link)abgetrennt. Die Verbindungen zwischen LPCLink und LPC113/302 habe ich so wie im UM10398 S.441 hergestellt(siehe Bild). Als Taktquelle soll der integrierte RC-Oszillator (12MHz) verwendet werden (Default) und über die PLL auf 48MHz erhöht werden. Ein heruntergeteilter Takt von 8MHz soll am CLKOUTPin zu sehen sein. Der prinzipielle Aufbau ist im Bild Aufbau.png zu sehen. Als IDE verwende ich LPCXpresso v4.2.0 [Build 264] von CodeRed. Als erstes Programm habe ich nur ein neues Projekt erstellt (ohne CMSIS) mit einer While(1) und habe versucht es zu debuggen. Die Optimierung ist dabei auf off (-O0) das Debugglevel auf Maximum (-g3). Der Code ist im File main.c zu sehen. Wenn ich nun aber mit dem Oszi an CLKOUT messe bekomme ich nicht die erwarteten 8MHz sondern um die 15MHz heraus. Des weiteren hängt sich nach einem Run der Debuger auf indem er sagt "No source available for "" " bzw. nach einem Singlestep kommt die Fehlermeldung "Target request failed: Cannot find bounds of current function". Hat jemand eine Ahnung woran es liegen könnte, oder sieht jemand einen groben Fehler den ich gemacht habe? Für konstruktive Kritik bin ich immer zu haben. Grüße und vielen Dank Mani
Ich verstehe es nicht...egal was ich in das Register SYSPLLCTRL versuche hineinzuschreiben, es landet immer eine 0x27 drin! Ist das Register irgendwie Schreibgeschützt durch ein Flag oder so? Grüße Mani
Mit einem Multi = 16 -> 16 *12 MHz = 192 MHz bist du aber auch deutlich über den max. 100 MHz. Versuch doch mal kleinere Multi, siehe auch Table 46.
Danke für Deine Antwort. Wie gesagt, ich habe auch schon mit verschiedenen Werten experementiert. Von 1 bis 16, aber jedesmal steht eine 27h drin. Grüße
Keine Ursache. Würde mich auch interessieren, wie das funktioniert. Ich habe die PLL selber noch nie benutzt, da ich aus Stromspargründen immer so niedrig wie nötig takte. In einem Startup Code habe ich gefunden, daß die das Register zuerst lesen:
1 | uint32_t regVal; |
2 | |
3 | regVal = LPC_SYSCON->SYSPLLCTRL; |
4 | regVal &= ~0x1FF; |
5 | LPC_SYSCON->SYSPLLCTRL = (regVal | (MAIN_PLL_P_Val<<5) | MAIN_PLL_M_Val); |
Vielleicht ist das notwendig.
Der Bereich für FCCO geht von 156MHz bis 320MHz. Die 192MHz sind also ok. FCCO wird allerdings durch 2*P geteilt. Mit 0x4f für SYSPLLCTRL sollten also 24MHz rauskommen. Auffällig ist an dem Code dass die PLL aktiviert wird noch bevor die Register gesetzt werden. Eigentlich(tm) ist das Schema wie folgt: 1. Auswahl der Taktquelle für die PLL (SYSPLLCLKSEL), warten 2. Teiler einstellen (SYSPLLCTRL) 3. Waitstate für Flash einstellen (FLASHCFG) 4. PLL aktivieren (PDRUNCFG), warten 5. Quelle für Main clock auf PLL Ausgang, warten Die Konfiguration für Clockout (P0.1) müsste so passen.
Danke euch 2. Das werde ich gleich mal testen. >Scotty schrieb: Das Read Modify Write werde ich gleich mal ausprobieren. M. G. schrieb: > Auffällig ist an dem Code dass die PLL aktiviert wird noch bevor die > Register gesetzt werden. Ja, das habe ich mittlerweile auch gelesen dass es ansonsten zu unerwarteten Spikes kommen kann. Aber auch das nachträgliche einschalten hatte daran nichts geändert dass in dem Register nicht das Richtige steht. Ich werde es dennoch mal so ausprobieren wie Du es geschrieben hast. Sobald ich es getestet habe melde ich mich nochmal. Grüße und vielen Dank. Mani
Ok, zumindest kommt jetzt schon mal das Richtige aus dem CLKOUT. Aber ich verstehe nicht warum!? Im wesentlichen habe ich nur die Flashtimings eingestellt (ganz am Anfang) wie von M.G. geschrieben (lt. Datenblatt bei 50MHz 3-Wait-States). Dann habe ich ein Read-Modify-Write des SYSPLLCTRL Registers gemacht (wie von Scotty geschrieben). Habe am Anfang den Wert aus dem LPCXpresso-Code genommen mit 0x23. Der läuft zwar mit einem externen Quarz, hat aber auch 12MHz. In meinen Augen müsste da aber ein 0x03 oder besser ein 0x2F rein (siehe SYSPLLCTRL.png). Begründet durch die Datenblattangabe dass der Current Controlled Oszillator im Bereich von 156MHz bis 320MHz liegen soll. Das merkwürdige ist, 0x03 und 0x23 führen zu dem selben Ausgangstakt von um die 8MHz! Wie kann das sein? Grüße Mani
Das Bild oben ist FALSCH. Sorry. Das Bit in PSEL müsste 1 weiter nach links. Dann wäre der Wert 2 und somit der Teiler 4. Der Hex-Wert wäre dann 0x4F. Da Locked dann aber die PLL nicht mehr!?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.