altos: Add sample samd21 application for snekboard
authorKeith Packard <keithp@keithp.com>
Sun, 25 Sep 2022 20:57:08 +0000 (13:57 -0700)
committerKeith Packard <keithp@keithp.com>
Sun, 25 Sep 2022 20:57:08 +0000 (13:57 -0700)
This runs a primitive application and flash loader on snekboard for
samd21 development.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/snekboard/Makefile [new file with mode: 0644]
src/snekboard/ao_pins.h [new file with mode: 0644]
src/snekboard/flash-loader/Makefile [new file with mode: 0644]
src/snekboard/flash-loader/ao_pins.h [new file with mode: 0644]
src/snekboard/snekboard.c [new file with mode: 0644]

diff --git a/src/snekboard/Makefile b/src/snekboard/Makefile
new file mode 100644 (file)
index 0000000..aacd132
--- /dev/null
@@ -0,0 +1,64 @@
+#
+# AltOS build
+#
+#
+
+include ../samd21/Makefile.defs
+
+INC = \
+       ao.h \
+       ao_arch.h \
+       ao_arch_funcs.h \
+       ao_boot.h \
+       ao_pins.h \
+       ao_product.h \
+       ao_task.h \
+       samd21.h \
+       Makefile
+
+ALTOS_SRC = \
+       ao_boot_chain.c \
+       ao_romconfig.c \
+       ao_interrupt.c \
+       ao_product.c \
+       ao_cmd.c \
+       ao_task.c \
+       ao_led.c \
+       ao_stdio.c \
+       ao_panic.c \
+       ao_timer.c \
+       ao_mutex.c \
+       ao_usb_samd21.c
+
+PRODUCT=SnekBoard
+PRODUCT_DEF=-DSNEKBOARD
+IDPRODUCT=0x000a
+
+CFLAGS = $(PRODUCT_DEF) $(SAMD21_CFLAGS)
+
+PROGNAME=snekboard
+PROG=$(PROGNAME)-$(VERSION).elf
+HEX=$(PROGNAME)-$(VERSION).ihx
+
+SRC=$(ALTOS_SRC) snekboard.c
+OBJ=$(SRC:.c=.o)
+
+all: $(PROG) $(HEX)
+
+$(PROG): Makefile $(OBJ) altos.ld
+       $(call quiet,CC) $(LDFLAGS) -o $(PROG) $(OBJ) $(LIBS)
+
+$(OBJ): $(INC)
+
+load: $(PROG)
+       stm-load $(PROG)
+
+distclean:     clean
+
+clean:
+       rm -f *.o $(PROGNAME)-*.elf $(PROGNAME)-*.ihx $(PROGNAME)-*.map
+       rm -f ao_product.h
+
+install:
+
+uninstall:
diff --git a/src/snekboard/ao_pins.h b/src/snekboard/ao_pins.h
new file mode 100644 (file)
index 0000000..4f3cba8
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright © 2022 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#ifndef _AO_PINS_H_
+#define _AO_PINS_H_
+
+#define LED_0_PORT     (&samd21_port_a)
+#define LED_0_PIN      2
+
+#define LED_BLUE       (1 << 0)
+
+#define AO_LED_PANIC   LED_BLUE
+
+#define HAS_BEEP       0
+
+#define HAS_USB                1
+
+#define HAS_LED                1
+
+#define AO_XOSC                        1
+#define AO_XOSC_FREQ           16000000
+#define AO_XOSC_DIV            256
+#define AO_XOSC_MUL            768
+
+#define AO_AHB_PRESCALER       1
+#define AO_APBA_PRESCALER      1
+
+#endif /* _AO_PINS_H_ */
diff --git a/src/snekboard/flash-loader/Makefile b/src/snekboard/flash-loader/Makefile
new file mode 100644 (file)
index 0000000..12330d3
--- /dev/null
@@ -0,0 +1,8 @@
+#
+# AltOS flash loader build
+#
+#
+
+TOPDIR=../..
+HARDWARE=snekboard
+include $(TOPDIR)/samd21/Makefile-flash.defs
diff --git a/src/snekboard/flash-loader/ao_pins.h b/src/snekboard/flash-loader/ao_pins.h
new file mode 100644 (file)
index 0000000..fb39981
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright © 2013 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+#ifndef _AO_PINS_H_
+#define _AO_PINS_H_
+
+#include <ao_flash_samd21_pins.h>
+
+/* ANALOG1 to gnd for boot loader mode */
+
+#define AO_BOOT_PIN                    1
+#define AO_BOOT_APPLICATION_GPIO       (samd21_port_b)
+#define AO_BOOT_APPLICATION_PIN                8
+#define AO_BOOT_APPLICATION_VALUE      1
+#define AO_BOOT_APPLICATION_MODE       AO_MODE_PULL_UP
+
+/* USB */
+#define HAS_USB                        1
+
+#define AO_XOSC                        1
+#define AO_XOSC_FREQ           16000000
+#define AO_XOSC_DIV            256
+#define AO_XOSC_MUL            768
+
+#endif /* _AO_PINS_H_ */
diff --git a/src/snekboard/snekboard.c b/src/snekboard/snekboard.c
new file mode 100644 (file)
index 0000000..19f5975
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright © 2016 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ */
+
+#include <ao.h>
+#include <ao_led.h>
+
+int main(void)
+{
+       ao_led_init();
+       ao_clock_init();
+       ao_task_init();
+       ao_timer_init();
+       ao_usb_init();
+       ao_cmd_init();
+       ao_start_scheduler();
+       return 0;
+}