Commit 824cef85 authored by Erik Strand's avatar Erik Strand

Update the blink example

OUTSET and OUTCLR should use =, not |=. Their purpose is to avoid
read-modify-write operations.

Also there's no reason to make the hello world sketch blink too fast for
the eye to see without waving the board around.
parent d1e271bc
......@@ -131,6 +131,4 @@ Info : Listening on port 3333 for gdb connections
```
If you see `Error: unable to open CMSIS-DAP device 0x3eb:0x2141`, it probably means openocd needs root privileges to access the programmer. You could run `sudo openocd`, but a better solution is to follow the instructions [here](https://forgge.github.io/theCore/guides/running-openocd-without-sudo.html) to create a new rule. Don't forget to restart `udev` after doing this with `sudo udevadm trigger`.
Fifth, now that openocd is running, open a second terminal window and type `arm-none-eabi-gdb main.elf`. When gdb opens, type `tar ext :3333` (a shortcut for `target extended-remote :3333`), then `load`. This should flash the microcontroller with the new code, at which point you can exit gdb with `quit` and `y`. In the openocd window, close the connection with `Ctrl-C`. If you're flashing one of Jake's [moduleboards](https://gitlab.cba.mit.edu/squidworks/moduleboard-atsamd51/tree/master), the red and green LEDs should alternate fast enough to create a line of dashes when you wave the board around:
![example-blinks](baremetal/example-blinks.jpg)
Fifth, now that openocd is running, open a second terminal window and type `arm-none-eabi-gdb main.elf`. When gdb opens, type `tar ext :3333` (a shortcut for `target extended-remote :3333`), then `load`. This should flash the microcontroller with the new code, at which point you can exit gdb with `quit` and `y`. In the openocd window, close the connection with `Ctrl-C`. If you're flashing one of Jake's [moduleboards](https://gitlab.cba.mit.edu/squidworks/moduleboard-atsamd51/tree/master), the red and green LEDs should blink.
......@@ -2,17 +2,21 @@
int main (void) {
int i;
REG_PORT_DIR0 |= (1<<17);
REG_PORT_DIR0 |= (1<<19);
// on a squidworks module board, the red LED is 17, and the green is 19
REG_PORT_DIR0 = (1u << 17) | (1u << 19);
// setting these high turns the LEDs off
REG_PORT_OUTSET0 = (1u << 17) | (1u << 19);
while(1) {
REG_PORT_OUTSET0 |= (1<<17);
REG_PORT_OUTCLR0 |= (1<<19);
for (i=0;i<10000;i++) {
REG_PORT_OUTSET0 = (1u << 17) | (1u << 19);
for (i=0; i<1000000; i++) {
__asm("nop");
}
REG_PORT_OUTCLR0 |= (1<<17);
REG_PORT_OUTSET0 |= (1<<19);
for (i=0;i<10000;i++) {
REG_PORT_OUTCLR0 = (1u << 17) | (1u << 19);
for (i=0; i<1000000; i++) {
__asm("nop");
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment