From 1480c6ee4b2281eec35602f1d2e1b14ee5c7a87f Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Tue, 22 Sep 2015 01:19:49 +0000 Subject: [PATCH] tests: gadget0: add stm32l1 target As with F103 generic, there's no readily available L1 board with USB device A custom LED is used to track boot process, but otherwise this should be portable to any L1 board, except for the openocd configuration file. Tests pass straight away, which is good, as it uses the existing f103 usb driver. --- tests/gadget-zero/Makefile.stm32l1-generic | 42 +++++++++++ tests/gadget-zero/main-stm32l1-generic.c | 69 +++++++++++++++++++ tests/gadget-zero/openocd.stm32l1-generic.cfg | 15 ++++ tests/gadget-zero/test_gadget0.py | 1 + 4 files changed, 127 insertions(+) create mode 100644 tests/gadget-zero/Makefile.stm32l1-generic create mode 100644 tests/gadget-zero/main-stm32l1-generic.c create mode 100644 tests/gadget-zero/openocd.stm32l1-generic.cfg diff --git a/tests/gadget-zero/Makefile.stm32l1-generic b/tests/gadget-zero/Makefile.stm32l1-generic new file mode 100644 index 00000000..7c0641d5 --- /dev/null +++ b/tests/gadget-zero/Makefile.stm32l1-generic @@ -0,0 +1,42 @@ +## +## This file is part of the libopencm3 project. +## +## This library is free software: you can redistribute it and/or modify +## it under the terms of the GNU Lesser General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This library 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 Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public License +## along with this library. If not, see . +## + +BOARD = stm32l1-generic +PROJECT = usb-gadget0-$(BOARD) +BUILD_DIR = bin-$(BOARD) + +SHARED_DIR = ../shared + +CFILES = main-$(BOARD).c +CFILES += usb-gadget0.c trace.c trace_stdio.c + +VPATH += $(SHARED_DIR) + +INCLUDES += $(patsubst %,-I%, . $(SHARED_DIR)) + +OPENCM3_DIR=../.. + +### This section can go to an arch shared rules eventually... +LDSCRIPT = ../../lib/stm32/l1/stm32l15xxb.ld +OPENCM3_LIB = opencm3_stm32l1 +OPENCM3_DEFS = -DSTM32L1 +ARCH_FLAGS = -mthumb -mcpu=cortex-m3 +#OOCD_INTERFACE = jlink +#OOCD_TARGET = stm32l1x +OOCD_FILE = openocd.stm32l1-generic.cfg + +include ../rules.mk diff --git a/tests/gadget-zero/main-stm32l1-generic.c b/tests/gadget-zero/main-stm32l1-generic.c new file mode 100644 index 00000000..751fe3dc --- /dev/null +++ b/tests/gadget-zero/main-stm32l1-generic.c @@ -0,0 +1,69 @@ +/* + * This file is part of the libopencm3 project. + * + * Copyright (C) 2015 Karl Palsson + * + * This library is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This library 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + */ + +#include +#include +#include +#include + +#include +#include "usb-gadget0.h" + +#define ER_DEBUG +#ifdef ER_DEBUG +#define ER_DPRINTF(fmt, ...) \ + do { printf(fmt, ## __VA_ARGS__); } while (0) +#else +#define ER_DPRINTF(fmt, ...) \ + do { } while (0) +#endif + +const clock_scale_t this_clock_config = + { /* 32MHz PLL from 8MHz HSE */ + .pll_source = RCC_CFGR_PLLSRC_HSE_CLK, + .pll_mul = RCC_CFGR_PLLMUL_MUL12, + .pll_div = RCC_CFGR_PLLDIV_DIV3, + .hpre = RCC_CFGR_HPRE_SYSCLK_NODIV, + .ppre1 = RCC_CFGR_PPRE1_HCLK_NODIV, + .ppre2 = RCC_CFGR_PPRE2_HCLK_NODIV, + .voltage_scale = RANGE1, + .flash_config = FLASH_ACR_LATENCY_1WS, + .apb1_frequency = 32000000, + .apb2_frequency = 32000000, + }; + + +int main(void) +{ + rcc_clock_setup_pll(&this_clock_config); + /* LED on custom board for boot progress */ + rcc_periph_clock_enable(RCC_GPIOB); + gpio_mode_setup(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO1); + gpio_set(GPIOB, GPIO1); + + usbd_device *usbd_dev = gadget0_init(&stm32f103_usb_driver, "stm32l1-generic"); + + ER_DPRINTF("bootup complete\n"); + gpio_clear(GPIOB, GPIO1); + while (1) { + usbd_poll(usbd_dev); + } + +} + diff --git a/tests/gadget-zero/openocd.stm32l1-generic.cfg b/tests/gadget-zero/openocd.stm32l1-generic.cfg new file mode 100644 index 00000000..09b44eab --- /dev/null +++ b/tests/gadget-zero/openocd.stm32l1-generic.cfg @@ -0,0 +1,15 @@ +# l1 generic, using a l4 disco board +source [find interface/stlink-v2-1.cfg] +set WORKAREASIZE 0x2000 +source [find target/stm32l1.cfg] + +hla_serial "066DFF495351885087171826" # My l4 disco + +# Serial of my l1 disco used as stlink here. +#hla_serial "S?l\x06H?WQ%\x10\x18?" # My l1 disco + +tpiu config internal swodump.stm32l1-generic.log uart off 32000000 + +# Uncomment to reset on connect, for grabbing under WFI et al +reset_config srst_only srst_nogate +# reset_config srst_only srst_nogate connect_assert_srst diff --git a/tests/gadget-zero/test_gadget0.py b/tests/gadget-zero/test_gadget0.py index 226ecb8b..6c22ae50 100644 --- a/tests/gadget-zero/test_gadget0.py +++ b/tests/gadget-zero/test_gadget0.py @@ -8,6 +8,7 @@ import unittest DUT_SERIAL = "stm32f4disco" #DUT_SERIAL = "stm32f103-generic" +#DUT_SERIAL = "stm32l1-generic" class find_by_serial(object): def __init__(self, serial):