Hallo alle zusammen,
ich versuche mich erstmals an den MSP430ern.
Leider bin ich recht schnell an meine Grenzen gestoßen.
Ich kommen mit dem CCS 6.1.1 in Verbindung mit dem MSPGCC 3.05 nicht
weiter.
Aber vielleicht erst mal zu meinen "Umständen".
Ich habe bisher hauptsächlich mit AVRs zu tun, also AtmelStudio, inkl.
JTAGICE MK2, JTAGICE3, STK500 usw.
Auch auf AVRGCC-Basis.
Nun möchte ich mich mal mit den MSP430ern beschäftigen. Vor allem den
MSP430FR...
Dazu habe ich mir Launchpads geholt. Das MSP-EXP430FR4133 und das
MSP-EXP430FR6989. Auf dem Rechner habe ich die oben angegebenen IDE und
Compiler installiert.
Der GCC wird mir dann beim neuen Projekt vom CCS angeboten.
Sooo, jetzt wird es für mich undurchsichtig/unverständlich,
Ich habe einfach versucht, die LED die auf dem Launchpad an PORT1.0 ist
blinken zu lassen.
Dazu habe ich folgenden Code genommen:
1 | #include <msp430.h>
|
2 |
|
3 | void wait(void); /* prototype for wait() */
|
4 |
|
5 | int main(void)
|
6 | { /* main function, called by startup-code */
|
7 | WDTCTL = WDTPW + WDTHOLD;
|
8 | P1DIR = 0xFF; /* port 1 = output */
|
9 | P1OUT = 0x01; /* set bit 0 in port 1 */
|
10 |
|
11 | for(;;)
|
12 | { /* infinite loop */
|
13 | P1OUT = ~P1OUT; /* invert port 1 */
|
14 | wait(); /* call delay function */
|
15 | }
|
16 | }
|
17 |
|
18 | void wait(void)
|
19 | { /* simple delay function */
|
20 | volatile int i; /* declare i as volatile int */
|
21 | for(i = 0; i < 32000; i++); /* repeat 32000 times (nop) */
|
22 | }
|
Dieser Code hat auch beim ersten (LP im Auslieferungszustand) mal
Compilieren und Debuggen funktioniert und die LED blinkte.
Als ich nur die Zählergrenze verändern wollte und erneut Debuggen
wollte, hat das CCS auch keinen Fehler beim Compilieren rausgegeben und
fing augenscheinlich an den Code im LP laufen zu lassen.(Die LEDs auf
der Programmierseite leuchteten/blinkten) Aber die LED am Target tat
nix. Auch den vorher funktionierenden Code wieder mit dem Debugger
einzuspielen brachte nichts. Es tat sich nichts mehr.
Selbst mit dem Batch von TI lies sich das LP auch nict mehr in den
Auslieferungszustand setzen. Meldung war in der Commandozeile immer nur
noch "unknown Device". Aber mit dem TI UniFlash Programm konnte ich die
Auslieferungsprogramme wieder einspielen, und dann lief es auch wieder
wie neu. Nur Eigene Code kann ich nicht mehr mit dem Debugger einspielen
und laufen lassen. Das CCS tut zwar immer so, als ob das Programm läuft,
aber auf dem Target tut sich nix.
Dann habe ich mal ein neues MSP-EXP430FR6989 auf dem Rechner auf meiner
Arbeit ausprobiert, mit dem Ergebnis, dass sich das Programm von Anfang
an nicht auf dem LP starten lies.
Mein Rechner zu Hause ist Win8.1 und auf der Arbeit Windows7, CCS und
GCC sind identisch.
Zu guter Letzt habe ich den Code mal mit dem TI-eigenen Compiler
probiert und siehe da, es funktioniert. Alles blinkt und lässt sich nach
Belieben verändern.
Ich habe auch folgenden Code mit dem GCC probiert:
1 | #include <msp430.h>
|
2 |
|
3 | int main(void)
|
4 | { /* main function, called by startup-code */
|
5 | WDTCTL = WDTPW + WDTHOLD;
|
6 |
|
7 | P1DIR = 0xFF; /* port 1 = output */
|
8 | P1OUT = 0x01; /* set bit 0 in port 1 */
|
9 |
|
10 | for(;;)
|
11 | { /* infinite loop */
|
12 | P1OUT ^= 0x01; /* invert port 1 */
|
13 | for(i=0; i< 20000; i++);
|
14 | }
|
15 | }
|
Ergebnis, wie zuvor, mit GCC geht nix, mit TI-Compiler geht es.
Bei beiden Varianten keine Compilerfehler.
Ach so, vielleicht noch zur Info, der Code, der mit GCC compiliert wurde
lässt sich auch nicht mit dem TI UniFlash Tool einspielen.
Komisch ist nur, dass der Debugger meint, der MSP würde laufen und mir
auch EnergyTrace Werte anzeigt.
Da ich auf dem MSP-Gebiet und bei CCS absoluter einsteiger bin, hoffe
ich, jemand kann mir mal kurz auf die Sprünge helfen.
Danke schonmal und viele Grüße
Sebastian