mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM9 processor clock vs. effectiver clock (AT91SAM9260)


Autor: c.b. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
// Main loop
while (1)                       // 1 cycle
{
    PIO_Clear(&pinsLeds[0]);    // 6 cycle
    asm("nop \n"                // 1 cycle
        "nop \n"                // 1 cycle
        "nop \n"                // 1 cycle
        "nop \n");              // 1 cycle
    PIO_Set(&pinsLeds[0]);      // 6 cycle
    asm("nop \n"                // 1 cycle
        "nop \n"                // 1 cycle
        "nop \n");              // 1 cycle
}

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.

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c.b. schrieb:
> Instruction Cache ist deaktiviert.

Seufz! Alle ARM Applikationsprozessoren (also ab ARM92x, ARM94x)
sollten in jedem Fall mit eingeschalteten Caches betrieben
werden. Sonst hast Du von Deinen 200MHz Core Takt nicht viel.

> 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.

Wie kommst Du darauf? Das hängt von mehreren Dingen ab:

1. Was macht der Compiler aus dem Code? Wieso benötigt ein while(1)
   einen Taktzyklus?

2. Welchen Takt/Latenz hast Du am PIO? Der hängt ja nicht direkt an
   der Busmatrix, sondern am APB Bus.

3. Wie schnell werden die Instruktionen geladen?

> 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.

Siehst Du!

> Kann es sein, dass mich das SDRAM (100MHz) ausbremst? (Refesh ect...)

Klar. Der Refresh kommt jedoch nur selten dazwischen. Solange der
I-Cache nicht angeschaltet war, wird jede Instruktion als
Einzelzugriff aus dem SDRAM geladen.

Gruß
Marcus

Autor: c.b. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus Harnisch schrieb:
> c.b. schrieb:
>> Instruction Cache ist deaktiviert.
>
> Seufz! Alle ARM Applikationsprozessoren (also ab ARM92x, ARM94x)
> sollten in jedem Fall mit eingeschalteten Caches betrieben
> werden. Sonst hast Du von Deinen 200MHz Core Takt nicht viel.

War nur zu Testzwecken. In der späteren Applikation ist der Cache 
natürlich angeschaltet.

Marcus Harnisch schrieb:
>> 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.
>
> Wie kommst Du darauf? Das hängt von mehreren Dingen ab:
>
> 1. Was macht der Compiler aus dem Code? Wieso benötigt ein while(1)
>    einen Taktzyklus?

Ich hab die Assemblerbefehle der Testroutine gezählt :-)

Marcus Harnisch schrieb:
> 2. Welchen Takt/Latenz hast Du am PIO? Der hängt ja nicht direkt an
>    der Busmatrix, sondern am APB Bus.

Das ist interessant. Dem muss ich mal auf die Schliche gehen...

Marcus Harnisch schrieb:
>> 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.
>
> Siehst Du!

2,5MHz ist trotz aktiviertem Cach noch weniger als die erwarteten 10MHz.

Autor: abc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich kenn die SAM9 jetzt nicht im einzelnen, aber sind ja die nachfolger 
des RM9200. Ich hab dort auch eine weile gebraucht, um den ARM Kern auf 
volle leistung zu bringen. beim RM9200 gabs eine stelle wo man einen 
vorteiler für den Core takt einstellen konnte / welcher clock (MCK PLLA 
PLLB SCLK HCLK) verwendet werden soll, und wie der core tackt mit dem 
MCK synchronisiert werden soll. ggf gibts das immer noch, und es liegt 
dort ein problem vor.

ggf läuft er auch auf den 48 MHZ für den USB Part?

gruss

Autor: c.b. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
abc schrieb:
> beim RM9200 gabs eine stelle wo man einen
> vorteiler für den Core takt einstellen konnte / welcher clock (MCK PLLA
> PLLB SCLK HCLK) verwendet werden soll, und wie der core tackt mit dem
> MCK synchronisiert werden soll

Kann man einstellen. Clock ist PLLA vorteiler ist 0 somit sollte der 
core mit 200MHz laufen. MCK läuft mit 100MHz (gemessen)

abc schrieb:
> ggf läuft er auch auf den 48 MHZ für den USB Part?

Nein.

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c.b. schrieb:
>> 1. Was macht der Compiler aus dem Code? Wieso benötigt ein while(1)
>>    einen Taktzyklus?
>
> Ich hab die Assemblerbefehle der Testroutine gezählt :-)

Und jeder Befehl dauert einen Taktzyklus?

> 2,5MHz ist trotz aktiviertem Cach noch weniger als die erwarteten 10MHz.

Aber so weit weg auch wieder nicht.

Poste doch mal den Assembler Code. Die Routine ist ja wahrscheinlich 
nicht so groß.

Gruß
Marcus

Autor: cb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus Harnisch schrieb:
> Poste doch mal den Assembler Code. Die Routine ist ja wahrscheinlich
> nicht so groß.

Werd ich gleich morgen früh erledigen (Sorcen hab ich nur in der Firma).

Kann es sein dass das Schreiben in PODR Register 2 MCK Zyclen benötigt 
(den Teil im Datenblatt verstehe ich nicht...) Dann wäre ich ja schon 
bei 5MHz.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.