Welche Taktfrequenz ist mit dem MSP430FG439 mit internem Oszillator maximal möglich? Wie muss ich diese Register setzten? SCFQCTL SCFI0 SCFI1
Die FLL+ im FG439 ist recht umfangreich und hat mehrere Register. Nicht ganz trivial einzustellen, da solltest du dir mal die Demos von TI angucken, da müsste ein Code-Beispiel dabei sein. Der Prozessor kann maximal mit 8Mhz laufen, egal, was man am FLL+ einstellen kann. Für die 8MHz muss aber die Betriebsspannung 3,6V betragen. Für die FLL+ benutzt man am besten einen Uhrenquarz als Referenz und stellt die Register dann auf ein Vielfaches der 32,768kHz ein.
Hab folgendes Code-Beispiel gefunden:
1 | //******************************************************************************
|
2 | // MSP-FET430P430 Demo - FLL+, Runs Internal DCO at 8MHz
|
3 | //
|
4 | // Description: This program demostrates setting the internal DCO to run at
|
5 | // 8MHz with auto-calibration by the FLL+.
|
6 | // ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = DCO = (121+1) x 2 x ACLK = 7995392Hz
|
7 | // //* An external watch crystal between XIN & XOUT is required for ACLK *//
|
8 | //
|
9 | // MSP430FG439
|
10 | // -----------------
|
11 | // /|\| XIN|-
|
12 | // | | | 32kHz
|
13 | // --|RST XOUT|-
|
14 | // | |
|
15 | // | P1.1|--> MCLK = 8Mhz
|
16 | // | |
|
17 | // | P1.5|--> ACLK = 32kHz
|
18 | // | |
|
19 | //
|
20 | // M. Buccini
|
21 | // Texas Instruments Inc.
|
22 | // Feb 2005
|
23 | // Built with IAR Embedded Workbench Version: 3.21A
|
24 | //******************************************************************************
|
25 | #include <msp430xG43x.h> |
26 | |
27 | void main(void) |
28 | {
|
29 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer |
30 | SCFI0 |= FN_4; // x2 DCO freq, 8MHz nominal DCO |
31 | SCFQCTL = 121; // (121+1) x 32768 x 2 = 7.99 Mhz |
32 | FLL_CTL0 |= DCOPLUS + XCAP18PF; // DCO+ set so freq= xtal x D x N+1 |
33 | P1DIR = 0x22; // P1.1,5 to output direction |
34 | P1SEL = 0x22; // P1.1,5 to output MCLK & ACLK |
35 | |
36 | while(1); // Loop in place |
37 | }
|
Was ich nicht ganz Check... oben steht "Runs Internal DCO at 8MHz". Gleichzeitig wird aber bei XIN/XOUT ein 32kHz Quarz angehängt. Ist dieses Beispiel nun mit externem oder internem oszi? danke klaus
> Ist dieses Beispiel nun mit externem oder internem oszi?
Ich würde mal sagen beides. In der Regel wird der externe 32kHz dazu
benutzt den internen exakt einzustellen. Ich nehme mal an das das bei
diesem Beispiel auch so ist (// (121+1) x 32768 x 2 = 7.99 Mhz)
Genau so ist es. Wobei die FLL+ noch bissl besser ist als der DCO. Durch die Regelschleife muss man das nicht nachstellen, der stellt sich automatisch immer auf das Vielfache des Quarzes ein. Und ist deshalb annähernd so genau wie der Quarz selber. Geht auch ganz ohne Quarz, dann aber mit recht viel Temp- und Vcc abhängigem Drift.
das besipiel gitb doch alles her: MCLK läuft auf 8MHz DCO und ACLK wird von dem 32,768kHz Quarz versorgt!
Hab den jetzt mal nach dem Beispiel eingestellt. Aber mein SPI clock ist immer noch so langsam. Ca. 5kHz und auch kein schöner Rechteck. Es werden so komische positive und negative Flanken ausgegeben. Die Register für den SPI-Takt hab ich folgendermassen initialisiert: UBR00 = 0x02; // UCLK/2 UBR10 = 0x00; Müsste dann doch bei einem CPU-Clock von 4MHz ein 2MHz Takt ergeben. Und nicht 5kHz...
Mit SSEL0 und SSEL1 werden ja die Source für den Vorteiler gewählt. Da kann man zwischen UCLKI, ACLK und SMCLK wählen. Was ist der Unterschied zwischen diesen drei?
Der MSP430 hat grundlegend 3 Takt-"Stränge". - ACLK - MCLK - SMCLK ACLK und SMCLK sind eigentlich überall verfügbar. Daneben gibt es noch Peripherie bezogene Taktquellen wie eben der UCLKI. Für den Anfang solltest du für dein SPI den SMCLK nehmen. Ist das einfachste.
Und erst mal an den entsprechenden Pins für MCLK und SMCLK schauen, ob da überhaupt die 8Mhz rauskommen.
Also bei obigem Beispiel, mit internem Oszi, beträgt die MCLK Frequenz 3MHz. Sie sollte aber 8MHz betragen. Jemand eine Idee wieso?
Hat niemand eine Idee warum die Frequenz nur 3MHz beträgt?
Dein ACLK ist wirklich 32768Hz? Wie ist dein SMCLK?
Beim Beispiel steht: MCLK = SMCLK = DCO Den MCLK hab ich an Port P1.1 gemessen. Der ist 3MHz. Der SPI-Takt sollte SMCLK/2 sein und der ist 1.5MHz.
Womit misst du das eigentlich? 3Mhz klingt sehr komisch. Ist denn der Uhrenquarz richtig angeschlossen und hat er auch wirklich 32,768kHz?
>Womit misst du das eigentlich? Mit einem KO, das stimmt schon. >Ist denn der >Uhrenquarz richtig angeschlossen und hat er auch wirklich 32,768kHz? Wie gesagt, ich hab kein Uhrenquarz. Ich wollte ihn nur mit internem Oszi takten. Geht das überhaupt bei der Frequenz? Wie hoch kann ich ihn denn maximal intern takten?
Achso, ohne Uhrenquarz kannst du das obige Beispiel natürlich nicht verwenden. Da musst du dich wohl durch den User Guide wühlen, und schauen, wie man den DCO ohne den Quarz als Referenz einstellt. Prinzipiell geht der DCO bis 56Mhz oder sowas einzustellen, allerdings geht die CPU nur bis 8MHz. Ich hab auf die Schnelle jetzt aber keinen Beispielcode dafür gefunden. Ohne Quarz ist das aber eh wahnsinnig ungenau, schau mal bloß ins Datenblatt auf Seite 31, wie die Toleranzen angegeben sind.
Ohne Uhrenquarz hilft nur Try and Error. Solange an den Register-Werten spielen bis es passt.
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.