mikrocontroller.net

Forum: Compiler & IDEs MSP430 Timing während Debugging


Autor: Manfred Hauser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kai Eckardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Manfred Hauser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Manfred Hauser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Kai Eckardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: R2D2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.