Ich bin dabei die Konfiguration für die Clock Chain eines AtSamC21E15A einzustellen. Dabei bin ich darüber gestolpert, dass laut Datenblatt für das FDPLL96M Modul als Quelle der Generic Clock Controller möglich ist. Der Generic Clock Controller hat ja 8 Generatoren. Die Frage ist nun, wie stelle ich explizit den Generator ein? Das ASF config struct für das FDPLL96M Modul hat nur die ".reference_clock" Eigenschaft zur Auswahl des "Generic Clock Controller". Eine Eigenschaft für die Nummer des Generators finde ich da nicht. Zum Vergleich habe ich das "Atmel-Start" Portal gefragt. (siehe Anhang) Wie es scheint kann jeder Generator als Quelle gewählt werden. Aber in den endlosen Dateihaufen, den "Atmel-Start" ausspuckt, bin ich leider nicht fündig geworden. Im Datenblatt und im ASF Manual konnte ich dazu leider auch nichts finden. Ich vermute, dass das irgendwie über den Peripheral Clock Controller geht...auch wenn ich das FDPLL96M Modul eigentlich nicht als "Peripheral" ansehe. :) Hat das jemand schonmal gemacht/verwendet?
:
Bearbeitet durch User
17.6.2.1: "Note: Each Peripheral Channel m is configured by one dedicated register PCHCTRLm" Weiter mit "17.6.3.3 Selecting the Clock Source for a Peripheral", dann "Table 17-9. PCHCTRLm Mapping", da ist dann "0 GCLK_DPLLFDPLL96M input clock source for reference" Im Ggs. zu dem, was "17.7 Register Summary" suggeriert, muss PCHCTRLm also tatsächlich 46 Register umfassen, fortlaufend ab Offset 0x80.
Andreas B. schrieb: > Im Ggs. zu dem, was "17.7 Register Summary" suggeriert, muss PCHCTRLm > also tatsächlich 46 Register umfassen, fortlaufend ab Offset 0x80. Das ist auch das was mich verunsichert hat. Weil im Register Summary zu den Peripheral Clock Channels kein FDPLL96M auftaucht, habe ich mich gefragt wie die konstante Id zur Channel Konfiguration für FDPLL96M wohl heißen soll. Ich hab mich mal rückwärts durch die includes gefräst und bin auf "OSCCTRL_GCLK_ID_FDPLL" (siehe Anhang) gestoßen. Ob das richtig ist, weiß ich noch nicht. :)
Ja, das ist ziemlich mißverständlich ausgedrückt. Aber es gibt ja sonst in dem ganzen Registerblock keine "Adressbits", über die man auswählen könnte, welches PCHCTRLm Register unter 0x80 erreichbar ist. Da die Bits in PCHCTRLm aber R/W sein sollen, kann man das ja einfach ausprobieren ...
Beitrag #7447896 wurde vom Autor gelöscht.
Ich habe heute endlich die Hardware erhalten und konnte die Einstellung testen. "OSCCTRL_GCLK_ID_FDPLL" ist die richtige ID um den FDPLL durch einen spezifischen Generator zu speisen. Hier die ASF Code Zeile:
1 | system_gclk_chan_set_config(OSCCTRL_GCLK_ID_FDPLL, GCLK_GENERATOR_1); |
PS: Die Beschreibung im Datenblatt ist übrigens noch verrückter als gedacht. Alle Kapitel die du zitierst, fehlen in dem immerhin 1200 Seiten dicken AtSamC20/C21 Family Data Sheet .... die sind nur im expliziten Datenblatt des C21 enthalten....das witzigerweise sogar weniger Seiten hat.... Wer erwartet denn bei 1200 Seiten, dass es bei so einem Umfang ein noch umfangreicheres Datenblatt gibt?
Ja, die Aufteilung auf verschiedene Dokumente ist manchmal schon befremdlich. Auch bei den STM32 muss man immer Datenblatt und RM gleichzeitig im Auge haben, dazu kommt noch, dass aus dem RM bisweilen nur mit viel Herumsucherei hervorgeht, welche Peripherie in welchem Chip nun konkret vorhanden ist ... Und unklare, sich z. T. widersprechende Formulierungen kommen hin und wieder auch vor. Echte Fehler dann und wann ebenfalls. Aber so ist das Leben halt, niemand ist perfekt. Zumindest bei der "ST Community" bekommt man aber meist recht schnell Antwort (von ST selbst!), wenn man auf Lücken/Diskrepanzen/Fehler in der Doku hinweist.
F. K. schrieb: > Alle Kapitel die du zitierst, fehlen in dem immerhin 1200 Seiten dicken > AtSamC20/C21 Family Data Sheet .... die sind nur im expliziten > Datenblatt des C21 enthalten....das witzigerweise sogar weniger Seiten > hat.... Was soll denn bitte fehlen? Und was meinst Du mit "expliziten Datenblatt des C21"? Link? Die PLL ist im Kapitel "20. OSCCTRL" beschrieben. ASF ist übrigens inzwischen auch offiziell tot, siehe die START Seite. Init aus 16MHz Quarz ohne die PLL zuerst durch eine GCLK Einheit zu schicken:
1 | void init_clock(void) |
2 | { |
3 | NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_RWS(2); /* set the NVM Read Wait States to 2, since the operating frequency will be 48 MHz */ |
4 | |
5 | OSCCTRL->XOSCCTRL.reg = |
6 | OSCCTRL_XOSCCTRL_STARTUP(6) | /* 1,953 ms */ |
7 | OSCCTRL_XOSCCTRL_RUNSTDBY | |
8 | OSCCTRL_XOSCCTRL_AMPGC | |
9 | OSCCTRL_XOSCCTRL_GAIN(3) | |
10 | OSCCTRL_XOSCCTRL_XTALEN | |
11 | OSCCTRL_XOSCCTRL_ENABLE; |
12 | while(0 == OSCCTRL->STATUS.bit.XOSCRDY); |
13 | |
14 | /* configure the PLL, source = XOSC, pre-scaler = 8, multiply by 24 -> 48MHz clock from 16MHz input */ |
15 | OSCCTRL->DPLLCTRLB.reg = OSCCTRL_DPLLCTRLB_DIV(3) | OSCCTRL_DPLLCTRLB_REFCLK(1); |
16 | OSCCTRL->DPLLRATIO.reg = OSCCTRL_DPLLRATIO_LDRFRAC(0x0) | OSCCTRL_DPLLRATIO_LDR(23); |
17 | OSCCTRL->DPLLCTRLA.reg = OSCCTRL_DPLLCTRLA_RUNSTDBY | OSCCTRL_DPLLCTRLA_ENABLE; |
18 | while(0 == OSCCTRL->DPLLSTATUS.bit.CLKRDY); /* wait for the pll to be ready */ |
19 | |
20 | /* configure the clock-generator for the core to use the PLL -> run at 48MHz */ |
21 | GCLK->GENCTRL[0].reg = |
22 | GCLK_GENCTRL_DIV(0) | |
23 | GCLK_GENCTRL_RUNSTDBY | |
24 | GCLK_GENCTRL_GENEN | |
25 | GCLK_GENCTRL_SRC_DPLL96M | |
26 | GCLK_GENCTRL_IDC ; |
27 | while(1 == GCLK->SYNCBUSY.bit.GENCTRL0); /* wait for the synchronization between clock domains to be complete */ |
28 | } |
Ja, die PLL hat einen Takt Vor-Teiler, die Bezeichner und die Reihenfolge in START sind etwas unglücklich gewählt. Und ja, auf die Namen für die PCHCTRL Register muss man erstmal kommen, bzw. das es überhaupt Macros dafür gibt, im Datenblatt stehen ja nur die Nummern (Table 16-9) und die Macros sind in den Header files für die jeweilige Unit. C:\Program Files (x86)\Atmel\Studio\7.0\packs\atmel\SAMC21_DFP\1.2.176\samc21\include\ins tance ADC0_GCLK_ID SERCOM4_GCLK_ID_CORE CAN0_GCLK_ID PTC_GCLK_ID TC4_GCLK_ID
Andreas B. schrieb: > Ja, die Aufteilung auf verschiedene Dokumente ist manchmal schon > befremdlich Welche Aufteilung auf welche verschiedenen Dokumente? Das "SAM C20/C21 Family Data Sheet" ist das Dokument. Wie man in der Revision History erfährt, wurden die C20 und C21 Family Data Sheets mit Revision B in 2017 zusammen gelegt zu dem einen Dokument.
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.