From 4be4ffe72c5f678a66658e9e61d3cfac7f20a9b3 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 6 Nov 2022 15:07:46 -0800 Subject: [PATCH] altos: Add metro-m0 port for SAMD21G18 testing Useful as a test target Signed-off-by: Keith Packard --- src/metro-m0/ao_pins.h | 45 ++++++++++++++++++++++ src/metro-m0/flash-loader/ao_pins.h | 38 +++++++++++++++++++ src/metro-m0/metro-m0.c | 58 +++++++++++++++++++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 src/metro-m0/ao_pins.h create mode 100644 src/metro-m0/flash-loader/ao_pins.h create mode 100644 src/metro-m0/metro-m0.c diff --git a/src/metro-m0/ao_pins.h b/src/metro-m0/ao_pins.h new file mode 100644 index 00000000..285d991a --- /dev/null +++ b/src/metro-m0/ao_pins.h @@ -0,0 +1,45 @@ +/* + * Copyright © 2022 Keith Packard + * + * 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 USE_USB_STDIO 1 + +#define HAS_LED 1 + +#define AO_DFLL48M 48000000 +#define AO_XOSC32K 32768 + +#define AO_AHB_PRESCALER 1 +#define AO_APBA_PRESCALER 1 + +#define HAS_SPI_0 1 +#define SPI_0_PA08_PA09_PA10 1 + +#endif /* _AO_PINS_H_ */ diff --git a/src/metro-m0/flash-loader/ao_pins.h b/src/metro-m0/flash-loader/ao_pins.h new file mode 100644 index 00000000..9a621480 --- /dev/null +++ b/src/metro-m0/flash-loader/ao_pins.h @@ -0,0 +1,38 @@ +/* + * Copyright © 2013 Keith Packard + * + * 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 + +/* A0 to gnd for boot loader mode */ + +#define AO_BOOT_PIN 1 +#define AO_BOOT_APPLICATION_GPIO (samd21_port_a) +#define AO_BOOT_APPLICATION_PIN 2 +#define AO_BOOT_APPLICATION_VALUE 1 +#define AO_BOOT_APPLICATION_MODE AO_MODE_PULL_UP + +/* USB */ +#define HAS_USB 1 + +#define AO_DFLL48M 48000000 +#define AO_XOSC32K 32768 + +#endif /* _AO_PINS_H_ */ diff --git a/src/metro-m0/metro-m0.c b/src/metro-m0/metro-m0.c new file mode 100644 index 00000000..32b241ec --- /dev/null +++ b/src/metro-m0/metro-m0.c @@ -0,0 +1,58 @@ +/* + * Copyright © 2016 Keith Packard + * + * 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 +#include +#include + +#define SNEK_CS_PORT (&samd21_port_a) +#define SNEK_CS_PIN (11) +#define SNEK_SPI_INDEX AO_SPI_0_PA08_PA09_PA10 +#define SNEK_SPI_SPEED ao_spi_speed(1000000) + +static const uint8_t spi_test[] = { + 0xaa, + 0xcc, + 0xff, + 0x00 +}; + +static void +ao_spi_test(void) +{ + ao_spi_get_bit(SNEK_CS_PORT, SNEK_CS_PIN, SNEK_SPI_INDEX, SNEK_SPI_SPEED); + ao_spi_send(spi_test, sizeof(spi_test), SNEK_SPI_INDEX); + ao_spi_put_bit(SNEK_CS_PORT, SNEK_CS_PIN, SNEK_SPI_INDEX); +} + +const struct ao_cmds ao_spi_cmds[] = { + { ao_spi_test, "s \0Send some bytes over spi" }, + { 0, NULL }, +}; + +int main(void) +{ + ao_led_init(); + ao_clock_init(); + ao_task_init(); + ao_timer_init(); + ao_dma_init(); + ao_spi_init(); + ao_usb_init(); + ao_cmd_register(ao_spi_cmds); + ao_spi_init_cs(&samd21_port_a, 1 << 11); /* analog 8 for CS */ + ao_cmd_init(); + ao_start_scheduler(); + return 0; +} -- 2.30.2