Sorry, hat etwas gedauert. Ich habe mir mein Programm bzw.
die Konfiguration nochmal angesehen und ich bin mir sicher
das F_CLK = P_CLK = 60MHZ ist.
Toggeln einer LED und rücksetzen von Timer0 wenn T0TC
1.000.000 erreicht hat führt zu einer Blinkfrequenz von
0,5Hz (1s an, 1s aus).
Dein Testprogramm habe ich nicht laufen lassen aber die
startup.s habe ich mir angesehen. Meiner Ansicht nach stimmt
die PLL Initialisierung nicht.
1 | .equ PLLCFG_MSEL, (0x1F<<0) /* PLL Multiplier */
|
2 | .equ PLLCFG_PSEL, (0x03<<5) /* PLL Divider */
|
Das sind die Konstanten M und P. P steht hier auf 8, was
völlig O.k ist aber M ist 32. Laut dem PLL-Tool von
Philips entspricht das (theoretisch) einer F_CLK von 384MHz.
Bei einem 12MHz Quarz müßte M=8 sein.
Was passiert denn wenn du die MSEL Zeile wie folgt abänderst:
1 | .equ PLLCFG_MSEL, (0x04<<0) /* PLL Multiplier */
|
Vielleicht interessiert sich der Simulator aber auch gar nicht
dafür (ich habe den nie benutzt).
Wenn ich das richtig überblicke wird in der timer.c der Timer
durch den Match-Interrupt alle 155µs zurückgesetzt und 'timeval'
um eins hochgezählt. Zumindest dann wenn der Kern mit 60MHz
getaktet wird. Die Peripherie läuft dann mit 30MHz.
- Michael