msp430-test-f5529
Generated from the msp430-quickstart template. For testing with a MSP-EXP430F5529LP LaunchPad.
msp430-quickstart
A template for building applications for TI MSP430 microcontrollers.
This project is developed and maintained by the MSP430 team.
Rust nightly-2022-01-24 or a newer toolchain. Only nightly compilers work for now.
The rust-toolchain.toml
file makes sure this step
is done for you. This file tells rustup
to download
and use nightly compiler for this crate, as well as download the compiler
source to build libcore
.
You can manually set up a nightly compiler as the default for all MSP430 projects by running:
$ rustup default nightly
$ rustup component add rust-src
Alternatively, you can manually set up overrides on a project basis using:
$ rustup override set --path /path/to/crate nightly-YYYY-MM-DD`.
$ rustup component add --toolchain nightly-YYYY-MM-DD rust-src
The cargo generate
subcommand (Installation instructions).
TI's MSP430 GCC Compiler,
version 8.3.0 or greater. msp430-elf-gcc
should be visible on the path.
The following dependencies are required in order to generate a peripheral access crate (see Using this template below)
svd2rust
, version 0.20.0 or
a newer commit.
msp430_svd
, version 0.3.0 or a
newer commit. Cloning the repo and following the directions in README.md is
sufficient.
Before instantiating a project, you need to know some characteristics about your specific MSP430 device that will be used to fill in the template. In particular:
What is the exact part number of your device? Which MSP430 family does your part belong to?
Does your part have an already-existing peripheral access crate (PAC)?
How much flash memory, RAM, and how many interrupt vectors does your device have?
Where does flash memory, RAM, and interrupt vectors begin in the address space?
msp430g2553
is used for the examples in this crate. Answering the first
question above:
msp430g2553
belongs to the MSP430x2xx
family.The linked family manual and datasheet can be used to answer the remaining questions:
The msp430g2553
PAC exists already and can be found on crates.io.
msp430g2553
has 16kB of flash memory, 512 bytes of RAM, and 16 vectors.
Flash memory begins at address 0xC000. RAM begins at address 0x0200. The interrupt vectors begin at 0xFFE0.
If your particular device does not have a PAC crate, you will need to
generate one using svd2rust
and possibly publish
the crate to https://crates.io. To generate an SVD file, follow the directions
in the msp430_svd
README.md
for your device.
In some cases like msp430fr2355
,
TI's linker files are not consistent with datasheets on where interrupt
vectors begin and how many interrupt vectors there are for a given device.
In case of a conflict, examine
the linker script to determine where to start the VECTORS
section in
memory.x
. Copies of many linker scripts are kept in the
msp430_svd
repository.
Instantiate the template and follow the prompts.
$ cargo generate --git https://github.com/rust-embedded/msp430-quickstart
Project Name: app
Creating project called `app`...
Done! New project created /tmp/app
$ cd app
If not targeting msp430g2553
, replace the PAC entry for msp430g2553
in
Cargo.toml
with that of your device, e.g.:
# [dependencies.msp430g2553]
# version = "0.3.0"
# features = ["rt"]
[dependencies.msp430fr2355]
version = "0.4.0"
features = ["rt"]
Populate the memory.x
file with address space layout information of your
device. Note: As mentioned above, in case of a conflict between the
datasheet and linker script on where interrupt vectors begin, use the
linker script!
$ cat memory.x
MEMORY
{
/* These values are correct for the msp430g2553 device. You will need to
modify these values if using a different device. Room must be reserved
for interrupt vectors plus reset vector and the end of the first 64kB
of address space. */
RAM : ORIGIN = 0x0200, LENGTH = 0x0200
ROM : ORIGIN = 0xC000, LENGTH = 0x3FE0
VECTORS : ORIGIN = 0xFFE0, LENGTH = 0x20
}
Build the template application or one of the examples. Some examples
(such as timer
or temp-hal
) may not compile due to size
constraints when building using the dev
profile (the default). Pass the
--release
option to cargo build
in these cases.
$ cargo build
$ cargo build --examples
Note that due to .cargo/config
and rust-toolchain.toml
,
the above is shorthand for:
$ cargo +nightly build --target=msp430-none-elf -Zbuild-std=core
$ cargo +nightly build --target=msp430-none-elf -Zbuild-std=core --examples
You may wish to experiment with other commented options in .cargo/config
.
Once you have an ELF binary built, flash it to your microcontroller. Use mspdebug
to launch a debug session and msp430-elf-gdb
with the linked gdb script. For the msp430g2553 and the MSP-EXP430G2 launchpad board this looks like the following:
In one terminal session
$ mspdebug -C mspdebug.cfg rf2500
In another terminal session
$ msp430-elf-gdb -x mspdebug.gdb target/msp430-none-elf/debug/app
This will flash your Rust code to the microcontroller and open a gdb debugging session to step through it.
Licensed under either of
Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.