LPC21xx PLL - Verhalten bei Reset

OP #508974
Lesenswert?
• ▲
▼
Hallo Forum,

ich beobachte ein eigenartiges Verhalten meines LPC2129 beim Reset, 
genaugenommen der PLL. Laut Datanblatt sollte die PLL beim Start inaktiv 
sein und der MSEL auf 0 stehen (M = MSEL + 1 -> fcclk = M * fin = (MSEL 
+ 1) * fin). Ausserdem sollte der Teiler VPBDIV, der den Takt der 
Peripherie gemäß fpclk = fcclk / div definiert einen Wert von '00' 
haben, was in div = 4 resultiert.

So. Gestern starte ich also mein Olimex LPC-P2129 EvalBoard und sehe im 
Debugger, dass MSEL = 2 ist (--> M = 3) und VPBDIV = '00' (--> div = 0).

Resultat:
fin = 14.745.600 Hz
fcclk = fin * 3 = 44.236.800 Hz
fpclk = fcclk / 4 = 11.059.200 Hz

Schön. Heute starte ich das gleiche Board, diesmal erhalte ich MSEL = 2 
(M=3) und VPBDIV = '01' (div=1).

Resultat:
fin = 14.745.600 Hz
fcclk = fin * 3 = 44.236.800 Hz
fpclk = fcclk / 1 = 44.236.800 Hz

Anzumerken sei dabei, dass jeweils die selbe Firmware lief. Die 
Startup-Routine und der Rest der Firmware stammt von mir selbst und es 
gibt keine einzige Stelle, an der ich irgendwelche Programmierungen der 
PLL mache.

Zunächst erwartete ich, dass ggf. irgendwas im Flash drinen blieb, das 
zunächst ausgeführt wird und meine PLL setzt, noch bevor ich mit dem 
Debugger über JTAG meine Firmware lade. Aber dann sollte das Verhalten 
jeden Tag das gleiche sein, oder?

Irgendwelche Ideen? Ist es vielleicht der Philips BootLoader, der 
standardmäßig hier irgendwas verändert?
Gast #509877
Lesenswert?
• ▲
▼
>Irgendwelche Ideen? Ist es vielleicht der Philips BootLoader, der
>standardmäßig hier irgendwas verändert?

Aus dem LPC2119/2129/2194/2292/2294 User Manual, S. 263:
"The on-chip PLL is not used by the boot code."

Und wenn, nach einem Boot-Vorgang mußt du ohnehin einen Reset auslösen, 
womit die PLL in den Urzustand kommt.

>Laut Datanblatt sollte die PLL beim Start inaktiv
>sein und der MSEL auf 0 stehen

Ist bei mir tatsächlich so...

>Ausserdem sollte der Teiler VPBDIV, der den Takt der
>Peripherie gemäß fpclk = fcclk / div definiert einen Wert von '00'
>haben, was in div = 4 resultiert.

Stimmt ebenfalls...

Und ist es auch absolut ausgeschlossen, daß dein Sourcecode nicht 
irgendwie z.B. über Pointer Zufallswerte in den System Control Block 
schreibt, denn darin befinden sich PLL und VPB Divider?

Gruß

Dietmar

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.