#kernel #teensy #embedded #baremetal #teensy-4

nightly no-std teensycore

A kernel for the teensy4.0 microcontroller

6 releases

Uses new Rust 2021

new 0.0.6 Jan 18, 2022
0.0.5 Jan 14, 2022

#137 in Embedded development

Download history 91/week @ 2022-01-14

91 downloads per month

MIT license

145KB
3.5K SLoC

Teensycore

Teensycore is a kernel written in rust for the Teensy-4.0 microcontroller.

Installation

To properly build teensycore and any subsequent project, you'll need the following:

# Install build tools
sudo apt-get install gcc-arm-none-eabi jq

# Configure rust
rustup default nightly
rustup target add thumbv7em-none-eabi

Usage

Teensycore exports a convenient macro that helps to configure the entrypoint of your application. It takes care of the default panic handler, initializing system clocks, setting up irq, enabling debug UART, and much more. In this way, you can just focus on what your project needs to get going.

#![feature(lang_items)]
#![crate_type = "staticlib"]
#![no_std]

teensycore::main!({
    /* Application code here */
});

Building

In order for your project to build correctly, you'll need the following:

  • Configure your project as a library
  • Put your entrypoint code in src/lib.rs
  • Download the build template bash script
  • Execute build-template.sh in lieu of cargo build.

The build script will generate a .hex file and place it in a folder called out. This hex file is compatible with the teensy 4.0 and can be flashed with the teensy-loader utility.

CAUTION: Do not build this in release mode. It optimizes a lot of stuff away, and can cause problems.

Example

Here is a very basic blinky example. To see more examples, check out the /examples folder.

#![feature(lang_items)]
#![crate_type = "staticlib"]
#![no_std]

use teensycore::*;
use teensycore::phys::pins::*;

main!({
    pin_mode(13, Mode::Output);

    loop {
        pin_out(13, Power::High);
        wait_ns(1 * S_TO_NANO);
        pin_out(13, Power::Low);
        wait_ns(1 * S_TO_NANO);
    }
});

Contributing

This project is a work-in-progress and will be undergoing significant development over the coming months as I make it suitable for my own needs. Contributions are welcome.

License

MIT

No runtime deps

~140KB

!a