www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ARM PLL Konfiguration


Autor: Rumkugel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein paar Probleme mit der PLL-Konfiguration meines STR911FAM44.
Ich kann die PLL problemlos bis 62.5 MHz hochtakten, doch darüber hinaus 
bewegt sich der Controller überhaupt nicht mehr, obwohl bei einem 25MHz 
Quarz eigentlich 96MHz möglich sein sollten.
Offenbar liegt es auch nicht direkt an der PLL, sondern eher an der 
Reference Clock (RCLK), welche auch die CPUClK bestimmt, denn wenn ich 
zwischen PLL und RCLK noch einen Teiler setze, gehts auch.
Ich möchte aber gern die CPU mit 96MHz takten.

Kann mir jemand helfen?

Gruß,
Rumkugel

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
96MHz geht beim STR9 durchaus, aber Busse und Flash müssen dafür 
entsprechend konfiguriert werden (Teiler/Waitstates). Und zwar bevor der 
Systemtakt auf die PLL geschaltet wird.

Da du nicht schreibst, was du tust, lässt sich auch nicht sagen, was du 
falsch machst.

Autor: Rumkugel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin hier offenbar auf eine kleine Hardwareeigenart getroffen.

http://www.keil.com/support/docs/3306.htm

also demnach BRCLK und FMICLK halbieren.. und das funktioniert sogar :)

Gruß,
Rumkugel

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rumkugel schrieb:

> http://www.keil.com/support/docs/3306.htm

Trifft hier nicht zu. Das bezieht sich nur auf Anfangsrevisionen des 
etwas glücklosen STR911F, nicht auf die spätere Version davon und schon 
garnicht auf den deutlich verbesserten STR911FA.

Wenn das dein Problem löst, dann weil du was anderes falsch gemachst 
hast. Das Flash-Timing wäre der erste Verdacht.

Du wirst zwar auch bei vollen 96MHz fast jedes Rennen gegen 70-100MHz 
CM3 verlieren, aber mit halben Flashtakt erst recht.

Autor: Rumkugel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, ok, dann poste ich mal mein setting.
SCU_MCLKSourceConfig(SCU_MCLK_OSC);     // MSTR = OSC 
SCU_PLLCmd(DISABLE);                    // disable PLL  
SCU_BRCLKDivisorConfig(SCU_BRCLK_Div1); // BRCLK = MSTR = 96MHz (SSP & USART) 
SCU_RCLKDivisorConfig(SCU_RCLK_Div1);   // RCLK  (CPUCLK) = MSTR  
SCU_PCLKDivisorConfig(SCU_PCLK_Div2);   // PCLK  (APB bus clock)   = RCLK/2 
SCU_HCLKDivisorConfig(SCU_HCLK_Div1);   // HCLK  (AHB bus clock)   = RCLK 

// diese beiden Zeilen sind neu:
SCU_BRCLKDivisorConfig(SCU_BRCLK_Div2);  
SCU_FMICLKDivisorConfig(SCU_FMICLK_Div2);

SCU_PLLFactorsConfig(192,25,2);   // PLL = 96 MHz  
SCU_PLLCmd(ENABLE);               // Enable PLL
SCU_MCLKSourceConfig(SCU_MCLK_PLL);   // MSTR = PLL

Also wie gesagt, es läuft ja nun, aber würd natürlich auch gern wissen, 
weshalb, bzw. weshalb vorher nicht..

Gruß,
Rumkugel

Autor: Rumkugel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sobald ich nur diese eine Zeile ausklammere, startet der Controller 
bereits nicht mehr.
SCU_FMICLKDivisorConfig(SCU_FMICLK_Div2);

Das ist schon ziemlich ärgerlich, denn ich wäre gern so schnell wie 
möglich unterwegs...

Gruß,
Rumkugel

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo definierst du das Flash selbst? FMI_Config sehe ich nirgends.

Autor: Rumkugel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Offen gesagt bin ich ziemlicher Anfänger auf diesem Gebiet (ARM) und 
Flash-Waitstates sagen mir erstmal garnix..

Gruß,
Rumkugel

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist auch wirklich ein bischen fies von ST, sowas im Flash Programming 
Manual zu verstecken ;-). Aber irgendwo logisch, denn das Flash ist ja 
ein separater Chip. Gibt dort auch noch etwas mehr zu beachten als die 
Waits.

Schau mal dort rein, und dann unter den FMI_xxx Funktionen der Lib.

Autor: Rumkugel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank erstmal soweit.

hab dies noch in meiner startup912.s gefunden:

[avrasm]

 /*; --- wait states Flash confguration */

        LDR     R6, = 0x00080000     /*;Write a Write Flash 
Configuration */
        LDR     R7, =0x60            /*;Register command (60h) to any 
word*/
        STRH    R7, [R6]             /*;address in Bank 1.*/


        LDR     R6, = 0x00083040     /*;Write a Write Flash 
Configuration  */
        LDR     R7, = 0x3            /*;Register Confirm command (03h)*/
        STRH    R7, [R6]             /*;2Wstaites in read,PWD,LVD 
enabled, */
                                     /*;High BUSCFG.*/

[avrasm]

sagt mir erstmal garnix.
Aber ich schau mal in das Flash Programming Manual

Gruß,
Rumkugel

Autor: Rumkugel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So richtig schlau bin ich aus dem Flash Programming Manual leider nicht 
geworden. Ich denke aber ich benötige diese Konfiguration:
FMI_Config(FMI_READ_WAIT_STATE_3, FMI_WRITE_WAIT_STATE_0, FMI_PWD_ENABLE, FMI_LVD_ENABLE, FMI_FREQ_HIGH);

Die Zeile habe ich hinter dem PLL Disable und vor dem PLL Enable 
platziert, aber leider hilft es nichts. Ohne FMICLK Divisor läuft gar 
nichts.

Steht die Zeile nun an der falschen Stelle, habe ich noch mehr 
vergessen, oder stimmt die Konfiguration nicht?

Gruß,
Rumkugel

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.