Tux trifft MSP430-Launchpad
Aus BraLUG-Wiki
(Unterschied zwischen Versionen)
(→Debuggen) |
(→"Hello World") |
||
Zeile 22: | Zeile 22: | ||
="Hello World"= | ="Hello World"= | ||
+ | |||
+ | In der Folge soll kurz beschrieben werden wie man ein (einfaches) Programm für einen MSP430-Launchpad übersetzt und auf die MCU überträgt. Weiterhin wird kurz aufgezeigt, wie man mit dem Debugger direkt auf der MCU arbeiten kann. | ||
+ | |||
+ | |||
==Das Programm== | ==Das Programm== | ||
+ | |||
+ | Das erste Programm ist immer ein "Hello World". Bei einem Mikrocontroller bietet es sich dazu an, ein paar Ausgänge zyklisch ein- und auszuschalten. Hier der entsprechende C-Quelltext, mit dem die beiden, auf dem Launchpad vorhandenen LEDs als Wechselblinker zyklisch angesteuert werden: | ||
<pre> | <pre> |
Version vom 28. Juni 2013, 09:06 Uhr
Derzeit noch Baustelle...!
Inhaltsverzeichnis |
Warum ein MSP430-Launchpad?
Hardware
MSP430
MSP430-Launchpad
Toolchain
- binutils-msp430
- gcc-msp430
- gdb-msp430
- msp430-libc
- msp430mcu
- mspdebug
"Hello World"
In der Folge soll kurz beschrieben werden wie man ein (einfaches) Programm für einen MSP430-Launchpad übersetzt und auf die MCU überträgt. Weiterhin wird kurz aufgezeigt, wie man mit dem Debugger direkt auf der MCU arbeiten kann.
Das Programm
Das erste Programm ist immer ein "Hello World". Bei einem Mikrocontroller bietet es sich dazu an, ein paar Ausgänge zyklisch ein- und auszuschalten. Hier der entsprechende C-Quelltext, mit dem die beiden, auf dem Launchpad vorhandenen LEDs als Wechselblinker zyklisch angesteuert werden:
#include <msp430.h> #define LED_RED (1 << 0) // rote LED an PIN0 #define LED_GREEN (1 << 6) // gruene Led an PIN6 //*************************************** void delay_ms(unsigned int ms){ while(ms--){ __delay_cycles(1000); } } //*************************************** //*************************************** //*************************************** int main(void) { WDTCTL = WDTPW + WDTHOLD; // watchdog ausschalten P1DIR |= LED_RED | LED_GREEN; // LED-Pins als Ausgaenge P1OUT = 0; // alle LEDs aus P1OUT |= LED_GREEN; // gruene LED ein while(1) { // Enlosschleife P1OUT ^= LED_RED + LED_GREEN; // LEDs toggle delay_ms(500); // 500ms Pause } }
Programm übersetzen und auf MCU übertragen
msp430-gcc -mmcu=msp430g2452 -o blink.elf blink.c
> mspdebug rf2500 ... (msdebug) prog blink.elf Erasing... Programming... Writing 186 bytes to e000 [section: .text]... Writing 32 bytes to ffe0 [section: .vectors]... Done, 218 bytes written
(mspdebug) run Running. Press Ctrl+C to interrupt...
PROJ=blink CC=msp430-gcc MCU=msp430g2452 CFLAGS=-Os -g -Wall -mmcu=$(MCU) LDFLAGS=-g -mmcu=$(MCU) OBJS=$(PROJ).o all:$(OBJS) $(CC) $(LDFLAGS) -o $(PROJ).elf $(OBJS) msp430-size $(PROJ).elf clean: rm -fr $(PROJ).elf $(OBJS) flash: mspdebug rf2500 'erase' 'load $(PROJ).elf' 'exit'
Debuggen
Debugproxy auf Port 2000 starten:
> mspdebug rf2500 ... (mspdebug) gdb Bound to port 2000. Now waiting for connection...
Kommadozeilen-Debugger starten und mit Debugproxy verbinden:
> msp430-gdb blink.elf ... (gdb) target remote localhost:2000 ... (gdb)
...oder etwas komfortabler, z.B. mit KDbg:
> kdbg -r localhost:2000 blink.elf
Ausblick
Weiterführende Links
- http://www.mycontraption.com/programming-the-msp430-launchpad-on-ubuntu/
- http://manpages.ubuntu.com/manpages/precise/man1/mspdebug.1.html
- http://wiki.ubuntuusers.de/MSP430-Toolchain
- http://www.itopen.it/2013/03/01/msp430-energia-on-linux/
- http://losinggeneration.homelinux.org/2010/07/02/msp430-launchpad-on-linux/
- http://recursive-labs.com/static/courses/rl100/samples/mspstart.pdf
- http://launchpadlinux.blogspot.de/2012/10/making-thinks-easier-with-make-and-geany.html
- http://dbindner.freeshell.org/msp430/
- http://gpio.kaltpost.de/?cat=55