From f391796dddbcc0a265b22cb101b41eafa34694af Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Thu, 22 Feb 2018 08:51:06 +0000 Subject: uart-basic: initial hacks for dut board. but oh joy, solder bridges are wrong for serial to hw1 host by defualt :( --- tests/uart-basic/Makefile.dut-stm32l073rz | 26 +++++++++++ tests/uart-basic/main-dut-stm32l073rz.c | 78 +++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 tests/uart-basic/Makefile.dut-stm32l073rz create mode 100644 tests/uart-basic/main-dut-stm32l073rz.c diff --git a/tests/uart-basic/Makefile.dut-stm32l073rz b/tests/uart-basic/Makefile.dut-stm32l073rz new file mode 100644 index 0000000..d8575d9 --- /dev/null +++ b/tests/uart-basic/Makefile.dut-stm32l073rz @@ -0,0 +1,26 @@ +# This is just a makefile. +# Consider it released into the public domain, or, where not available, +# available under your choice of BSD2clause, MIT, X11, ISC or Apache2 licenses +# Karl Palsson +BOARD = dut-stm32l073rz +PROJECT = uart-basic-$(BOARD) +BUILD_DIR = bin-$(BOARD) + +SHARED_DIR = ../../shared + +CFILES = main-$(BOARD).c +CFILES += uart-basic.c + +VPATH += $(SHARED_DIR) + +INCLUDES += $(patsubst %,-I%, . $(SHARED_DIR)) + +OPENCM3_DIR=../../libopencm3/ + +### This section can go to an arch shared rules eventually... +DEVICE=stm32l073rz +#OOCD_INTERFACE = stlink-v2 +#OOCD_TARGET = stm32l0x +OOCD_FILE = ../../openocd/openocd.$(BOARD).cfg + +include ../../rules.mk diff --git a/tests/uart-basic/main-dut-stm32l073rz.c b/tests/uart-basic/main-dut-stm32l073rz.c new file mode 100644 index 0000000..17a68da --- /dev/null +++ b/tests/uart-basic/main-dut-stm32l073rz.c @@ -0,0 +1,78 @@ +/* + * Oct 2017 Karl Palsson + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "uart-basic.h" + +#define LED_NUC_RCC RCC_GPIOA +#define LED_NUC_PORT GPIOA +#define LED_NUC_PIN GPIO5 + +void usart2_isr(void) +{ + ub_irq_handler(); +} + +static void setup_rcc_hack(void) +{ + /* FIXME L0 doesn't have rcc setup helpers (yet) */ + rcc_osc_on(RCC_HSI16); + rcc_wait_for_osc_ready(RCC_HSI16); + rcc_set_sysclk_source(RCC_HSI16); + + /* ok, we manually poked around, let the lib know */ + rcc_apb1_frequency = rcc_apb2_frequency = 16e6; +} + +static void board_init(void) +{ + rcc_periph_clock_enable(RCC_GPIOA); + gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO2 | GPIO3); + /* usart is AF4 */ + gpio_set_af(GPIOA, GPIO_AF4, GPIO2 | GPIO3); +} + +int main(void) +{ + int i; + int j = 0; + setup_rcc_hack(); + board_init(); + struct ub_hw ub = { + .uart = USART2, + .uart_nvic = NVIC_USART2_IRQ, + .uart_rcc = RCC_USART2, + }; + ub_init(&ub); + printf("hi guys!\n"); + /* green led for ticking */ + rcc_periph_clock_enable(LED_NUC_RCC); + gpio_mode_setup(LED_NUC_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, + LED_NUC_PIN); + + + while (1) { + gpio_toggle(LED_NUC_PORT, LED_NUC_PIN); + + for (i = 0; i < 0x40000; i++) { /* Wait a bit. */ + __asm__("NOP"); + } + ub_task(); + gpio_toggle(LED_NUC_PORT, LED_NUC_PIN); + for (i = 0; i < 0x40000; i++) { /* Wait a bit. */ + __asm__("NOP"); + } + } + + return 0; +} -- cgit