Forum: Mikrocontroller und Digitale Elektronik Taktquelle für FDPLL vom AtSamC21


von F. K. (superpcfan)


Angehängte Dateien:

Lesenswert?

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
von Andreas B. (abm)


Lesenswert?

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.

von F. K. (superpcfan)


Angehängte Dateien:

Lesenswert?

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. :)

von Andreas B. (abm)


Lesenswert?

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.
von F. K. (superpcfan)


Lesenswert?

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?

von Andreas B. (abm)


Lesenswert?

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.

von Rudolph R. (rudolph)


Lesenswert?

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

von Rudolph R. (rudolph)


Lesenswert?

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
Noch kein Account? Hier anmelden.