Forum: Mikrocontroller und Digitale Elektronik LPC21xx PLL - Verhalten bei Reset


von Volker T. (funker211)


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?

von Dietmar (Gast)


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

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.