Hallo zusammen! Mir gelingt es nicht den RC32M auf 48 MHz umzustellen, egal welche Werte ich in die DFLLRC32M_COMP1 und DFLLRC32M_COMP1 -Register schiebe, die Frequenz bleibt immer bei 32 MHz stehen. LG
Schau dir mal im Atmel-Studio ein USB-Beispiel der ASF an. Die entsprechenden Stellen sollten direkt am Anfang des Programms und beim Initialisieren des USB-Moduls sein.
Hallo, hier mal aus dem ASF, osh.h:
1 | if (ref_id == OSC_ID_USBSOF) { |
2 | /*
|
3 | * Calibrate 32MRC at 48MHz using USB SOF
|
4 | * 48MHz / 1kHz = 0xBB80
|
5 | */
|
6 | DFLLRC32M.COMP1 = 0x80; |
7 | DFLLRC32M.COMP2 = 0xBB; |
8 | OSC.DFLLCTRL |= OSC_RC32MCREF_USBSOF_gc; |
Servus Wolfgang
Hallo again! danke sehr für Eure Beiträge, ich habe nichts wirklich anders gemacht. ABER - genau noch nachgemessen - UND festgestellt das sich die Frequenz sehr wohl verändert, jedoch ganz geringfügig und zwar auf bis auf ca. 37 MHz. In meinem Beispiel möchte ich den internen oscillator auf 50 MHz schalten, soll lt. AU-Manual ( doc 8331 ) zw. 30 und 54 möglich sein, ich beutze den 32 KHz internen RC oscillator als reference dür den 32 MHz DFLL, ohne reference kann die Frequenz überhaup nicht geändert, hier ist die clock init routine von mir. LG OSC_CTRL |= OSC_RC32KEN_bm ; // enable 32KHz Oscilator while ( !( OSC_STATUS & OSC_RC32KRDY_bm )); // wait for 32K Oscillator is stable OSC_CTRL |= OSC_RC32MEN_bm ; // enable 32MHz Oscillator while ( !( OSC_STATUS & OSC_RC32MRDY_bm )); // wait for 32M Oscillator is stable OSC_DFLLCTRL |= OSC_RC32MCREF_RC32K_gc; // set reference DFLLRC32M_COMP1 = 0xbc; // change frequency to 50 MHz DFLLRC32M_COMP2 = 0xbe; DFLLRC32M_CTRL = DFLL_ENABLE_bm; // enable DFLL CCP = CCP_IOREG_gc; //enable register change CLK_CTRL = CLK_SCLKSEL_RC32M_gc; // select 32 MHz internal RC Oscillator
Dein Problem ist, dass du die den Referenztakt auf OSC_RC32MCREF_RC32K_gc stellst. Wenn du dann den DFLL aktvierst wird der 32M über den 32K (auto) kalibieriert. Das willst du aber ja nicht. Mit "OSC_RC32MCREF_USBSOF_gc" wird das ganze über USB (start of frame) kalibriert. Geht es dir nur um die 50 MHz? Dann verwende doch die PLL, z.B. 2MHz x 25
Hallo, anscheinend habe ich die Logik des Einstellens durch die Kalibrierung von DFLL nicht verstanden, aber egal. Juhu! ich habe meine 50 MHz, danke Timmo, funktioniert ganz einfach, bin total in der Kalibrierung versunken ohne an PLL zu denken. Läuft jetzt auch mit 64 MHz ( 8 ( 32 ) x 8 ) PS: kann er mit so hoher Frequenz dauerhaft beschädigt werden? Wärmeentwicklung gibt es überhaupt keine. LG Piotr
:
Bearbeitet durch User
Einige haben die Xmegas auch schon auf > 80 MHz bekommen. Mit 3.3V ist aber wohl eher so 64 MHz drin. Kaputt gehen wird da nichts, aber er könnte dann instabil laufen. 48 MHz geht bei den USB Xmegas auf jeden Fall, da sie ja bei USB-Betrieb eh auf 48 MHz getaktet werden. Probleme gibts wenn du xmegas mit mehr als 128 KB Flash betreibst und auch über die 128 KB Grenze mit dem Code hinaus kommst. Dann hängt er sich bei der Verwendung des ELPM Befehls (um auf > 128 KB zugreifen zu können) auf. Dann sind max. 50-52 MHz drin.
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.