Hallo,
mit dem Byte 0xD8 wird das Configuration Change Schutz-Register (CCP)
freigegben. Dann kann erst gewünschte Konfiguration für die Vorteiler
usw. eingestellt werden.
Gruß xmega
Mhh irgendwie werde ich daraus nicht ganz schlau.
Mit der folgenden Oszi_Init möchte den ClkPer4 = 64MHz, ClkPer2 = 64MHz
und ClkCPU = ClkPer = 32Mhz einstellen.
1
//Oscillator auf 32Mhz einstellen PIN1 = OSC_RC32MEN wird gesetzt
2
OSC.CTRL=0x02;
3
4
// Wenn Oscillator stabil wird das Flag RC32MRDY
5
// gesetzt und 32Mhz können benutzt werden
6
while(!(OSC.STATUS&OSC_RC32MRDY_bm));
7
8
OSC.CTRL&=~OSC_PLLEN_bm;// PLL ausschalten
9
OSC.PLLCTRL=OSC_PLLSRC_RC32M_gc|OSC_PLLFAC3_bm;// Quelle und Multiplikator 8 einstellen
10
OSC.CTRL|=OSC_PLLEN_bm;// PLL einschalten
11
while(!(OSC.STATUS&OSC_PLLRDY_bm));// Warten bis PLL Ready
12
13
CCP=0xD8;
14
CLK.PSCTRL=0x01;// Prescaler C auf 2 stellen
15
CLK.CTRL=0x04;// Main Clk Source auf PLL stellen
funktioniert aber leider nicht. Der Takt könnte so bei 1MHz liegen.
Was mache ich falsch?
Also ich habe jetzt noch ein bisschen rumprobiert. Wenn ich nach der
ersten while schleife CLK.CTRL = 0x01 schreibe dann läuft er auch mit
32MHz, als wenn er den Rest kopmlett ignoriert, also die PLL.
Matthias Laubnitz schrieb:> CCP = 0xD8;> CLK.PSCTRL = 0x01; // Prescaler C auf 2 stellen> CLK.CTRL = 0x04; // Main Clk Source auf PLL stellen
Lies mal "3.12.1 Sequence for write operation to protected I/O
registers" aus dem XMega A Manual.
Du hast nach CCP = 0xD8 4! Takte Zeit, das Register zu ändern. Daraus
folgt a) ggf. mehrfach CCP = 0xD8 und b) Optimierung des Compilers
einschalten.
Korrektur: Bei -o1 scheint alles so zu laufen wie ich es möchte, also
ClkPER und ClkCPU.
Doch bleibt er jetzt in der Init für das SDRAM hängen. Woran liegt denn
das schon wieder?
1
voidsdram_init(void)
2
{
3
/* Initialize EBI. */
4
EBI_Enable(EBI_SDDATAW_4BIT_gc,
5
EBI_LPCMODE_ALE1_gc,
6
EBI_SRMODE_ALE12_gc,
7
EBI_IFMODE_3PORT_gc);
8
9
PORTE.OUT|=(1<<PIN5);// Dieser Punkt wird nicht erreicht
10
11
12
/* Initialize SDRAM. (PER2X clock is 2MHz giving a 500ns clock cycle.) */
Also nochmal zum Anfang. Der Takt ist nun wie möchte mit 32/64MHz bei
-O1. Nur reagiert jetzt alles etwas komisch als wenn Teile komplett weg
optimiert werden.
Meine Frage an Euch ist nun ob es auch eine Möglichkeit gibt den
gewünschten Takt ohne Optimierung einzustellen.