A simple example

The assembler msp430.asm.as reads source files (*.S) and creates object files (*.o4). Multiple object files are then linked together and a binary is created that can be downloaded to the MCU.

For example, led.S:

; Test program for msp430.asm.as and msp430.asm.ld
; This one toggles the pin P1.1. This is like the LED flashing example that
; comes preprogrammed on some of the eval boards from TI.

        ; entry point after device reset
RESET:  mov     #0x5a80, &0x120         ; disable WDT
        bis.b   #1, &0x22               ; set pin to output

        ; loop toggling the pin and then doing a delay
.L1:    xor.b   #1, &0x21               ; toggle pin
        mov     #0xc350, R15            ; init delay loop
.L2:    dec     R15                     ; count down
        jnz     .L2                     ; jump while counter is not zero
        jmp     .L1                     ; loop the toggling part

; set the reset vector (and all the others) to the program start
.section .vectors
        .word  RESET                    ; reset vector

Assemble, link:

python -m msp430.asm.as led.S -o led.o4
python -m msp430.asm.ld --mcu MSP430G2211 led.o4 -o led.titext


There are several ways to get a program into a MSP430.

Boot Strap Loader (BSL), Serial

Using a serial connection and some ROM code in the MSP430 it is possible to read and write memory, including Flash.

Not all devices support BSL (e.g. the smaller value line (G2) and F2 devices)

Command example (F1x, F2x, F4x):

python -m msp430.bsl.target -e led.titext

Command example (F5x, F6x):

python -m msp430.bsl5.uart -e led.titext
Boot Strap Loader (BSL), USB HID

Some MSP430 have a built in USB controller and they also support downloading through USB.

Command example:

python -m msp430.bsl5.hid -e led.titext
JTAG, 4-wire

This interface gives access to the internals of the CPU so that it not only can be used to up and download memory, it is also possible to set breakpoints, single step and more debugging.

Some devices have shared GPIO pins, so that a TEST pin switches the function from normal IO pin to JTAG.

Command example:

python -m msp430.jtag.target -e led.titext
JTAG, spy-bi-wire

This is a variation of the JTAG interface that only requires two pins and does not occupy GPIO pins. The same signals as in a 4-wire connection are serialized and transmitted over these two lines. This means that the maximum speed of the spy-bi-wire interface is slower than the 4-wire interface.

Many new MSP430 support this interface (not F1, F4).

Command example:

python -m msp430.jtag.target --spy-bi-wire -e led.titext

The python-msp430-tools also support downloading via remote-GDB-protocol. If a GDB server is running (same machine or a different one), msp430.gdb.target can be used. GDB servers are msp430-gdbproxy or mspdebug

Notes for JTAG

The MSP430.dll can be downloaded from TI. With this installed, USB and parallel port adapters can be used with the msp430.jtag.target tool.
Linux / Others

There is no (recent) MSP430.dll available.

USB JTAG adapters can be used with the tool mspdebug (also includes debug support).

Parallel port adapters can be used with MSP430mspgcc (no debug support).

Command example (Launchpad or ez430-rf2500 kits):

mspdebug rf2500 "prog led.titext" exit

Installing header files

The example above directly used the addresses of the peripheral modules - this is not comfortable. It is easily possible to use the header files from TI as a C preprocessor (cpp) is included, however the header files itself are not.

Downloading header files

A download and extraction script is located in the directory msp430/asm/includes. When executed (python fetch.py) it will download the msp430mcu archive from http://mspgcc.sf.net. Once downloaded, the files are extracted to a subdirectory called upstream.

The include and include/upstream directories are part of the search path for cpp. Files in these directories are found automatically.


The file name that is downloaded is currently hard coded in the script. It may make sense to check the site online for newer files.

Using the msp430mcu package

On many GNU/Linux systems it is possible to install the package msp430mcu though the systems package management.

Debian/Ubuntu: apt://msp430mcu


The header files from the package are currently not found automatically. The user has to provide the location with the -I parameter of cpp.

More Examples

A number of examples can be found in the examples/asm directory of the python-msp430-tools distribution.