Hallo zusammen,
ich kämpfe seit Tagen mit dem Verständnis für das Clocksystem des
AT91SAM9260. Ich hoffe ich kann meine Frage halbwegs verständlich
formulieren...
Ich verwende einen Atmel AT91SAM9260 (ARM9). Code wird aus externem
SDRAM (32bit Anbindung) ausgeführt. PLLA ist auf ~200MHz konfiguriert.
Der Master Clock Controller ist so konfiguriert, dass am Procezzor
200MHz ankommen und an der Bus Matrix 100Mhz. Instruction Cache ist
deaktiviert.
Die 100Mhz kann ich am SDRAM messen und die 200MHz habe ich über den
Clock-Output verifiziert.
So weit so gut. Auf den ersten Blick scheint alles zu stimmen...
Nun habe ich zu Testzwecken folgenden Programmausschnitt verwendet um
eine LED zu toggeln. Für das toggeln benötigt der ARM exact 20 CPU
Zyklen.
1 | // Main loop
|
2 | while (1) // 1 cycle
|
3 | {
|
4 | PIO_Clear(&pinsLeds[0]); // 6 cycle
|
5 | asm("nop \n" // 1 cycle
|
6 | "nop \n" // 1 cycle
|
7 | "nop \n" // 1 cycle
|
8 | "nop \n"); // 1 cycle
|
9 | PIO_Set(&pinsLeds[0]); // 6 cycle
|
10 | asm("nop \n" // 1 cycle
|
11 | "nop \n" // 1 cycle
|
12 | "nop \n"); // 1 cycle
|
13 | }
|
Ich hätte nun erwartet, dass meine LED mit 10 MHz toggelt. Tut Sie aber
nicht. Sie toggelt mit 600kHz! Aktiviere ich nun den Instruction Cache
so toggelt die LED mit 2,5MHz.
Kann es sein, dass mich das SDRAM (100MHz) ausbremst? (Refesh ect...)
Ich hab einfach keine Erkärung dafür und hoffe nun auf diesem Weg eine
Antwort zu bekommen.
Vielen Dank schonmal vorab.