Forum: Mikrocontroller und Digitale Elektronik MSP430F543x Quarz Problem und Probleme mit dem Debuggen


von Jan P. (flux)


Lesenswert?

Hallo,

Ich habe einen MSP430F5437 und will diesen an XT2 mit einem 4 MHz Quarz 
betreiben, im ersten Schritt habe ich MCLK, SMCLK und Auch ACLK alle von 
XT2 versorgt.

Der Quarz schwingt exakt mit 4 MHz (direkt am Quarz gemessen)
Wenn ich jetzt jedoch am Port Pin Messe, an dem ich die CLK ausgebe, ist 
dort eine Frequenz von CIRCA einem MHz. Das Teilerregister habe ich 
komplett auf 0x0000 gesetzt (siehe Code).

Soviel zum ersten Teilproblem mit dem Quarz.

Das zweite, viel seltsamere Problem zeigt sich beim Debuggen: das 
funktioniert gar nicht.

Habe mit ner EXP-Platine mit MSP430F4618 begonnen den Code zu 
entwickeln, und habe den dann auf den MSP430F5437 portiert.
Aber den habe ich zu Debug-Zwecken dann soweit wieder zurückgestutzt wie 
unter gezeigt.
Als Software habe ich IAR.
Der Debugger, ein TI USB-FET funktioniert mit dem EXP-Board problemlos, 
wenn ichs mit meiner Schaltung (Lochrasterplatine) versuche, springt IAR 
nie in den Code hinein, sagt die CPU ist im LPM und interrrupts sind 
aus, deswegen ist kein STep/Go möglich.
Weiterhin läuft der Stack über, egal wie groß ich den wähle, was auf dem 
EXP-Board nie passiert ist. Habe den Stack auf 5 KB gesetzt schon, läuft 
trotzdem über.
Der Kompilierte Code kann aber mit der Software von Elprotronic in die 
CPU geladen werden, und zwar Problemlos.
Dann läuft der CPU, man kann LEDs blinken lassen etc etc. Nur ist er 
viel zu langsam, meiner Meinung nach noch viel langsamer wie er mit 1 
MHz laufen müsste.

Hier der Code:
1
void main(void)
2
{
3
 volatile unsigned int i=0;
4
  WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
5
    _BIS_SR(OSCOFF + SCG0 + GIE);      // Disable LFXT1 xtal osc & FLL loop
6
7
  
8
  P5SEL |= 0x0C;                     // Analog function for XT2 Pins
9
  UCSCTL6 &= ~(XT2OFF);                     // XT2 On
10
  
11
  UCSCTL6 |= XT2DRIVE_0 + XCAP_0 +XTS + XT1OFF;   // set XT1 sourced
12
                                                //from external and to HF
13
14
    
15
  // Wait for xtal to stabilize
16
  do
17
  {
18
  UCSCTL7 &= ~XT2OFFG;                   // Clear OSCFault flag
19
  for (i = 0xFF; i > 0; i--);           // Time for flag to set
20
  }
21
  while ((UCSCTL7 & XT2OFFG));        // OSCFault flag still set?
22
23
  UCSCTL3 |= SELREF_2;                // Set DCO FLL reference =REFO
24
  UCSCTL4 |= SELS_5 + SELM_5 + SELA_5; // Set MCLK, SMCLK, ACLK =XT2
25
  UCSCTL5 = 0x0000;
26
  init_PortPins();
27
28
  while(1)
29
  {
30
31
    OUTPUT ^= TEST_PIN;
32
       for (i = 0xFF; i > 0; i--); 
33
34
  }
35
  
36
}//end of main()

Ich hoffe mir kann einer von euch weiterhelfen.

Viele Grüße, Jan!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Wenn ich jetzt jedoch am Port Pin Messe, an dem ich die CLK ausgebe

Wo initialisierst Du das?

von Christian R. (supachris)


Lesenswert?

Jan P. schrieb:

> Habe mit ner EXP-Platine mit MSP430F4618 begonnen den Code zu
> entwickeln, und habe den dann auf den MSP430F5437 portiert.
> Aber den habe ich zu Debug-Zwecken dann soweit wieder zurückgestutzt wie
> unter gezeigt.
> Als Software habe ich IAR.

Hast du auch ganz sicher überall in deinem Projekt auf den anderen Chip 
umgestellt? Kompiler, Linker, vor allem im Debugger? Nicht, dass da ein 
Teil des IAR noch denkt, er habe den F4618 vor sich...

von Jan P. (flux)


Lesenswert?

Hallo, erstmal vielen Dank für die bisherigen Antworten!

Die Initialisierung des Pins ist in [init_PortPins();] ;)
und sieht so aus dass ich dir PxDir auf Out(1) stelle und PxSel auch auf 
1.

Und ich habe ein komplett neues Projekt erzeugt, den alten quellcode 
eingebunden und es an einer stelle vom defaultmässig eingestellten 
MSP430F149 auf den F5437 umgestellt. in den Projektoptionen. Wo muss man 
das sonst noch tun? Entschuldigt meine Unwissenheit! ;)

Gruß, jan!

von Alex (Gast)


Lesenswert?

Hallo,

soweit ich mich erinnere hat das UCS eine Fail Safe Logic - d.h. ich 
vermute du laeufst weiterhin auf dem DCO!

Bevor das UCS die Takte umschaltet muss du also das OFIFG im SFRIFG1 
loeschen.

mfg Alex

von Jan P. (flux)


Lesenswert?

Das werde ich gleich nochmal ausprobieren, ich melde mich wieder!

Vielen Dank!

von Jan P. (flux)


Lesenswert?

So, ich nochmal!

Habe das rücksetzen des OFIFG flags mal versucht (SFRIFG1 &= OFIFG;) 
eingefügt direkt hinter dem Löschen des XT2 Fault Flags.

Ergebnis war dass der Clock-Pin noch langsamer war.
Auskommentieren der oben angegebenen Zeile ließ ihn wieder mit etwa 1MHz 
schwingen. Sehr seltsam das ganze wie ich finde.

Gruß, Jan

von Jan P. (flux)


Lesenswert?

Ach ja, was mir noch unklar ist:
was genau macht die Zeile  _BIS_SR(OSCOFF + SCG0 + GIE); ?

Die habe ich einfach vom Beispeilcode übernommen.

Also das GIE kenne ich noch vom F149, aber was genau macht der Rest?
Hab die Stelle im Datenblatt gefunden, an der das SFR erklärt wird, auch 
die erklärung zu den OSCOFF und SCG0 Bits, aber ich verstehe nicht warum 
das im SFR nochmal gebraucht wird, wenn es die Bits schon in den Clock 
Registern gibt.

von Rufus Τ. F. (rufus) Benutzerseite


Angehängte Dateien:

Lesenswert?

Das ist ein Codebeispiel aus SLAC166, das ziemlich genau das tut, was Du 
willst - nämlich einen HF-Quarz an XT2 zu betreiben.

von Johnny (Gast)


Lesenswert?

Ich beschäftige mich nun auch schon ein Weilchen mit der 5er Serie, die 
genannte SLAC ist sehr zu empfehlen und befindet sich hier:
http://www.ti.com/litv/zip/slac166j
Viele Kleinigkeiten funktionieren schon ein wenig anders und ungewohnt 
im Vergleich zu den älteren Serien, da helfen die Beispiele sehr gut 
weiter.

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.