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
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.
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
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.
hmm, ok, dann poste ich mal mein setting.
1 | SCU_MCLKSourceConfig(SCU_MCLK_OSC); // MSTR = OSC |
2 | SCU_PLLCmd(DISABLE); // disable PLL |
3 | SCU_BRCLKDivisorConfig(SCU_BRCLK_Div1); // BRCLK = MSTR = 96MHz (SSP & USART) |
4 | SCU_RCLKDivisorConfig(SCU_RCLK_Div1); // RCLK (CPUCLK) = MSTR |
5 | SCU_PCLKDivisorConfig(SCU_PCLK_Div2); // PCLK (APB bus clock) = RCLK/2 |
6 | SCU_HCLKDivisorConfig(SCU_HCLK_Div1); // HCLK (AHB bus clock) = RCLK |
7 | |
8 | // diese beiden Zeilen sind neu:
|
9 | SCU_BRCLKDivisorConfig(SCU_BRCLK_Div2); |
10 | SCU_FMICLKDivisorConfig(SCU_FMICLK_Div2); |
11 | |
12 | SCU_PLLFactorsConfig(192,25,2); // PLL = 96 MHz |
13 | SCU_PLLCmd(ENABLE); // Enable PLL |
14 | 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
Sobald ich nur diese eine Zeile ausklammere, startet der Controller bereits nicht mehr.
1 | SCU_FMICLKDivisorConfig(SCU_FMICLK_Div2); |
Das ist schon ziemlich ärgerlich, denn ich wäre gern so schnell wie möglich unterwegs... Gruß, Rumkugel
Offen gesagt bin ich ziemlicher Anfänger auf diesem Gebiet (ARM) und Flash-Waitstates sagen mir erstmal garnix.. Gruß, Rumkugel
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.
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
So richtig schlau bin ich aus dem Flash Programming Manual leider nicht geworden. Ich denke aber ich benötige diese Konfiguration:
1 | 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.