This is the Hello World of microcontroller programming : turning an LED on and off. It demonstrates efficiently how the microcontroller is initialized, how to control an output pin, and how to make people smile.
If you need help to understand this program, there is a line-by-line explaination in the Getting started tutorial.
Two versions of the same program are presented below : a version using the helper module specifically for the Carbide board, and a generic version using only the main library functions which can be used on any board.
setHigh()
turns the LED off and setLow()
turns the LED on. This is because the other side of the LED is connected to Vcc and the pin is used as a current sink, so it needs to be pulled to GND in order to let the current flow : this is called negative logic. The reason for doing this is that the microcontroller is not designed to supply lots of currents on its pins, however, it can tolerate to let a bit more current pass to ground. Anyway, if you plan to drive more powerful devices than a LED (e.g. a motor), remember to use a dedicated circuit for this (such as based on a transistor for example).blink.cpp
[download]wget http://libtungsten.io/static/code/examples/blink_carbide/blink.cpp
#include <core.h> #include <carbide.h> int main() { // Init the board, including defining the // red LED pin as output Carbide::init(true); while (true) { // Turn the LED on Carbide::setLedR(true); // Wait for half a second Core::sleep(500); // Turn the LED off Carbide::setLedR(false); // Wait for half a second Core::sleep(500); } }
Makefile
[download]wget http://libtungsten.io/static/code/examples/blink_carbide/Makefile
NAME=blink BOOTLOADER=true CARBIDE=true # Available modules : adc dac eic gloc i2c spi tc trng usart # Some modules such as gpio and flash are already compiled by default # and must not be added here. MODULES= # The toolchain's bin/ path, don't forget to customize it # If this directory is already in your PATH, comment this line. TOOLCHAIN_PATH=/opt/arm-none-eabi/bin/ # Include the main lib makefile include libtungsten/Makefile
blink.cpp
[download]wget http://libtungsten.io/static/code/examples/blink/blink.cpp
#include <core.h> #include <gpio.h> int main() { // Init the microcontroller Core::init(); // Define the pin on which the LED is connected // On Carbide, this is the red LED const GPIO::Pin PIN_LED = GPIO::PA00; // Enable this pin in output to a HIGH state GPIO::enableOutput(PIN_LED, GPIO::HIGH); while (true) { // Turn the LED on GPIO::setLow(PIN_LED); // Wait for half a second Core::sleep(500); // Turn the LED off GPIO::setHigh(PIN_LED); // Wait for half a second Core::sleep(500); } }
Makefile
[download]wget http://libtungsten.io/static/code/examples/blink/Makefile
NAME=blink BOOTLOADER=true # Available modules : adc dac eic gloc i2c spi tc trng usart # Some modules such as gpio and flash are already compiled by default # and must not be added here. MODULES= # The toolchain's bin/ path, don't forget to customize it # If this directory is already in your PATH, comment this line. TOOLCHAIN_PATH=/opt/arm-none-eabi/bin/ # Include the main lib makefile include libtungsten/Makefile