Forum: Compiler & IDEs MSP430 Timing während Debugging


von Manfred Hauser (Gast)


Lesenswert?

Hallo!

Ich habe jetzt unter Windows (mspgcc mit msp430-gdbproxy, msp430-gdb und 
msp340-insight) das allseits bekannte Testprogramm auf den MSP430F149 
(Olimex JTAG-Adapter + Olimex Header-Board mit dem MSP430F149, 
32kHz-Quarz) geladen und gestartet (nur dieses C-Programm, keine weiter 
Timer-Konfiguration o.Ä.):

  -----------------------------------------------
  #include <io.h>
  void wait(void);         //prototype for wait()
  int main(void)
  {
    P1DIR=0xFF;            //port 1 = output
    P1OUT=0x01;            //set bit 0 in port 1
    for(;;) {              //infinite loop
      P1OUT=~P1OUT;        //invert port 1
      wait();              //call delay function
    }
  }
  void wait(void)          //delay function
  {
    volatile int i;        //declare i as volatile int
    for(i=0;i<32000;i++);  //repeat 32000 times
  }
  -----------------------------------------------

Es funktioniert soweit alles, mich wundert nur folgendes:

Lasse ich den MSP frei laufen (GDB-Proxy nicht gestartet bzw. 
JTAG-Adapter nicht angschlossen), so blinkt die LED an Port 1.0 ca. 60 
mal pro Minute (ca. 1 Hz). Starte ich den MSP über Insight oder direkt 
über dessen GDB-Konsole (run bzw. continue), so blinkt die LED ca. 160 
mal pro Minute (ca. 2,7 Hz).

Nun meine Fragen:
1. Kennt jemand dieses Problem?
2. Was ist die Ursache für dieses Phänomen?
3. Kann jemand mit seinem MSP diesen Versuch kurz durchführen
   und mir berichten, ob er den gleichen Effekt beobachten
   kann?

Grüsse,
Manfred

von Kai Eckardt (Gast)


Lesenswert?

Ich habe es eben mal mit genau Deiner Hard-und Softwarekonfiguration 
ausprobiert. Wenn ich im
Insight auf continue clicke kriege ich eine Periode
von 1,1 s, also etwa 1 Hz. Wenn ich den JTAG ab-
nehme und nach kurzem Warten die Versorgungsspannung
wieder anklemme bekomme ich ebenfalls 1,1 s. Habe
mir das auf dem Oszilloskop angeschaut. Da Du in
dem Programmbeispiel den Oszillator nicht konfigu-
rierst sollte Dein f149 mit DCO-Takt auf etwa 800 kHz
laufen. Woran es bei Dir mit den verschiedenen Fre-
quenzen liegt kann ich nicht sagen. Hast Du das Pro-
gramm mit der mspgcc - Option -g compiliert ? (Ich
habe die Option -O weggelassen) Ansonsten ist bei mir
alles so konfiguriert wie auf der mikrocontroller.net
Seite beschrieben.

von Manfred Hauser (Gast)


Lesenswert?

Ich habe nun auch mal die -O Option beim Compilieren weggelassen. Ändert 
aber bei diesem einfachen Programm wahrscheinlich nicht viel.

Ich habe jetzt mal XT2 (der ja bei mir nicht vorhanden ist) 
ausgeschaltet und XT1 (32kHz) auf MCLK und SMCLK gelegt. Anschliessend 
habe ich die Verzögerungsschleife auf 3200 erniedrigt. Jetzt blinkt die 
LED sowohl unter Insight wie auch im Freilauf mit ca. 0,4Hz.

Irgendwas muss bei mir noch anders sein, dass der DCO (der ja aktiv ist, 
wenn nix konfiguriert ist?) durch das Debuggen beeinflusst wird. Mich 
würde brennend interessieren was!

Manfred

von Manfred Hauser (Gast)


Lesenswert?

Nochmal ich...

Ich habe jetzt mal probiert, den DCO explizit zu definieren:

  BCSCTL1 = XT2OFF + RSEL2;
  BCSCTL2 = 0;
  DCOCTL  = DCO1 + DCO2;

Das sollte den DCO auf etwa 1000kHz einstellen.

Jetzt komme ich mit und ohne Debugging bei einer 32000er Verzögerung auf 
ca. 1,1Hz.

Bei Dir, Kai, funktionierts ohne explizite Definition? Wie entstehen 
eigentlich die Standard-800Hz des DCO? Wenn man nix konfiguriert (alle 
Register auf 0) dann kommt laut UserManual doch was anderes raus...

Manfred

von Kai Eckardt (Gast)


Lesenswert?

Das mit den 800 kHz habe ich irgendwo in einer der Anleitungen gelesen, 
vermutlich slau049c.pdf. Nach
einem Reset müssen nicht zwangsläufig alle Register
0 gestellt sein ! Die DCO wurde so gebaut, daß der
Takt nach einem Power up im mittleren Bereich und
eben bei etwa 800 kHz liegt. Warum Du im ersten Bei-
spiel unterschiedliche Frequenzen für Debugging und
Standalonebetrieb bekommst weiß ich leider auch nicht.

von R2D2 (Gast)


Lesenswert?

Das Problem entsteht, weil gdbproxy beim Programmieren die
Takteinstellung des MSP430 verändert sie aber nacher nicht mehr
zurückstellt. Ein "monitor reset" sollte reichen um das Problem zu
beheben(zumindest bei mir).

mfg,
R2D2

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.