Forum: Mikrocontroller und Digitale Elektronik MSP430 Startschwierigkeiten


von glagnar (Gast)


Lesenswert?

Hi Leute,

ich mache gerade meine ersten Schritte mit dem MSP430 (in Verbindung mit 
MSP430-GCC unter Windows XP). Die Hardware funktioniert soweit 
(MSP430F1121A im BSL-Modus über USB-Seriell-Adapter). Ich habe ein 
kleines Python-Programm geschrieben, das mit dem BSL des MSP430 
kommuniziert und ich kann den Controller auslesen, beschreiben, etc. 
Leider läuft das einfachste Testprogramm nicht, und ich kann den Fehler 
nicht finden. Das Programm soll einfach eine LED blinken lassen, die an 
P1.4 angeschlossen ist. Was jedoch passiert ist, daß die LED dauerhaft 
leuchtet. Dabei macht es keinen Unterschied, ob ich den Controller 
resette oder den Code mittels der "Load PC" Bootloaderfunktion 
anspringe. Hier das Programm:

1
#include    <signal.h>
2
#include    <io.h>
3
4
    .section  .text
5
RESET:      mov     #0x300,R1        ; Initialize stack pointer
6
7
StopWDT:    mov     #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT
8
9
      bis.b  #0x10,&P1DIR
10
11
L1:      bis.b  #0x10,&P1OUT
12
      call  Delay
13
      bic.b  #0x10,&P1OUT
14
      call  Delay
15
      jmp    L1
16
      
17
      
18
Delay:    mov    #0xffff,R15
19
D1:      dec    R15
20
      jnz    D1
21
      ret
22
23
    .section  .vectors  
24
    .org    RESET_VECTOR,0xFF
25
    .word   RESET                   ; POR, ext. Reset, Watchdog

Das Makefile:

1
CC=msp430-gcc
2
CPPFLAGS= -g -O2 -mmcu=msp430x1121 -D_GNU_ASSEMBLER_ -nostartfiles -nostandartlibs
3
4
all:
5
  $(CC) $(CPPFLAGS) ledblink.S -o ledblink.o
6
7
hex:
8
  msp430-objcopy -I elf32-msp430 -O ihex ledblink.o ledblink.hex
9
10
clean:
11
  -rm -f $(PROGS)

Das Intel-Hexfile, das msp430-objcopy produziert:

1
:10F00000341231400003B240805A2001F2D0100087
2
:10F010002200F2D01000210090120E00F2C0100069
3
:10F02000210090120400F53F3F431F83FE2330412F
4
:040000030000F00009
5
:00000001FF


Und ein Hexdump des Controllers nach dem Flashen:

1
f000  34 12 31 40 00 03 b2 40 80 5a 20 01 f2 d0 10 00  4.1@...@.Z .....
2
f010  22 00 f2 d0 10 00 21 00 90 12 0e 00 f2 c0 10 00  ".....!.........
3
f020  21 00 90 12 04 00 f5 3f 3f 43 1f 83 fe 23 30 41  !......??C...#0A
4
f030  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
5
f040  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
6
f050  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
7
f060  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
8
f070  ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................

von Uhu U. (uhu)


Lesenswert?

Folgendes kannst du tun:

1. Nachprüfen, ob bis.b #0x10,&P1DIR die Leitung P1.4 auf Output setzt
   (Im Manual nachlesen!)
2. Mit welchen Takt läuft der µC? Womöglich ist die Zählschleife viel zu
   schnell abgelaufen, als daß du was blinken sehen könntest.
   (Dann sollte aber wenigstens die LED ~ auf halber Helligkeit
   leuchten.)
3. Im µC nachsehen, ob der Reset-Vektor auch initialisiert ist

von glagnar (Gast)


Lesenswert?

Hallo Uhu,

danke für Deine Antwort. Zu 1.: ja, der Befehl stimmt. Ich kann auch von 
Hand im BSL das 4. Bit an Adresse 0x22 (=P1DIR) setzen und die LED geht 
an. Lösche ich es, geht sie wieder aus ...

Zu 2.: Der BSL konfiguriert den internen Oszillator auf ~2 MHz, das 
Blinken sollte noch wahrnehmbar sein. Zur Sicherheit habe ich die 
Warteschleife aber dahingehend verändert:

1
Delay:   mov    #0x40,R15
2
D2:      mov    #0xffff,R14
3
D1:      dec    R14
4
         jnz    D1
5
         dec    R15
6
         jnz    D2
7
         ret

Kein Unterschied. Zu 3.: Die Interruptvektoren sehen so aus:

1
ffe0  00 f0 00 f0 00 f0 00 f0 00 f0 00 f0 00 f0 00 f0  ................
2
fff0  00 f0 00 f0 00 f0 00 f0 00 f0 00 f0 00 f0 00 f0  ................

Zeigen also alle auf meinen Code.

von Uhu U. (uhu)


Lesenswert?

Die vorletzte Zeile in deinen hex-File:

   :040000030000F00009

Wenn ich das richtig interpretiere, ist das dein Resetvektor - aber die 
Adresse ist 0. Warum?

Was auch merkwürdig ist: Wieso sind alle Interruptvektoren 
initialisiert? In deinem Hex-File steht das nicht.

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.