tests: gadget0: Add stm32l053 disco support

Much more complicated clock setup, but tests all pass once you get past that
step.
This commit is contained in:
Karl Palsson 2015-10-06 00:50:52 +00:00
parent f1d8a7ef04
commit e7ea622037
4 changed files with 167 additions and 0 deletions

View File

@ -0,0 +1,43 @@
##
## 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 <http://www.gnu.org/licenses/>.
##
BOARD = stm32l053disco
PROJECT = usb-gadget0-$(BOARD)
BUILD_DIR = bin-$(BOARD)
SHARED_DIR = ../shared
CFILES = main-$(BOARD).c
CFILES += usb-gadget0.c
VPATH += $(SHARED_DIR)
INCLUDES += $(patsubst %,-I%, . $(SHARED_DIR))
OPENCM3_DIR=../..
### This section can go to an arch shared rules eventually...
LDSCRIPT = ../../lib/stm32/l0/stm32l0xx8.ld
OPENCM3_LIB = opencm3_stm32l0
OPENCM3_DEFS = -DSTM32L0
#FP_FLAGS ?= -mfloat-abi=hard -mfpu=fpv4-sp-d16
ARCH_FLAGS = -mthumb -mcpu=cortex-m0plus $(FP_FLAGS)
#OOCD_INTERFACE = stlink-v2-1
#OOCD_TARGET = stm32l0
OOCD_FILE = openocd.stm32l053disco.cfg
include ../rules.mk

View File

@ -0,0 +1,109 @@
/*
* This file is part of the libopencm3 project.
*
* Copyright (C) 2015 Karl Palsson <karlp@tweak.net.au>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#include <libopencm3/cm3/nvic.h>
#include <libopencm3/stm32/crs.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/syscfg.h>
#include <stdio.h>
#include "usb-gadget0.h"
// no trace on cm0 #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
#include "trace.h"
void trace_send_blocking8(int stimulus_port, char c) {
(void)stimulus_port;
(void)c;
}
#if 0
void rcc_clock_setup_in_hsi16_out_32mhz() {
rcc_osc_on(HSI16);
rcc_set_hpre(RCC_CFGR_HPRE_NODIV);
rcc_set_ppre1(RCC_CFGR_PPRE1_NODIV);
rcc_set_ppre2(RCC_CFGR_PPRE2_NODIV);
rcc_wait_for_osc_ready(HSI16);
rcc_peripheral_enable_clock(RCC_PWR);
pwr_set_vos_scale(RANGE1);
/* Flash wait states too. */
/*
* rcc_set_pll_configuration(clock->pll_source, clock->pll_mul,
clock->pll_div);
*/
/* Enable PLL oscillator and wait for it to stabilize. */
rcc_osc_on(PLL);
rcc_wait_for_osc_ready(PLL);
rcc_set_sysclk_source(PLL);
rcc_apb1_frequency = 32000000;
rcc_ahb_frequency = 32000000;
}
#endif
int main(void)
{
/* LED for boot progress */
rcc_periph_clock_enable(RCC_GPIOA);
gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO5);
gpio_set(GPIOA, GPIO5);
/* jump up to 16mhz, leave PLL setup for later. */
rcc_osc_on(HSI16);
rcc_wait_for_osc_ready(HSI16);
rcc_set_sysclk_source(HSI16);
/* HSI48 needs the vrefint turned on */
rcc_periph_clock_enable(RCC_SYSCFG);
SYSCFG_CFGR3 |= SYSCFG_CFGR3_ENREF_HSI48 | SYSCFG_CFGR3_EN_VREFINT;
while(!(SYSCFG_CFGR3 & SYSCFG_CFGR3_REF_HSI48_RDYF));
/* For USB, but can't use HSI48 as a sysclock on L0 */
crs_autotrim_usb_enable();
rcc_set_hsi48_source_rc48();
rcc_osc_on(HSI48);
rcc_wait_for_osc_ready(HSI48);
usbd_device *usbd_dev = gadget0_init(&st_usbfs_v2_usb_driver, "stm32l053disco");
ER_DPRINTF("bootup complete\n");
gpio_clear(GPIOA, GPIO5);
while (1) {
usbd_poll(usbd_dev);
}
}

View File

@ -0,0 +1,14 @@
source [find interface/stlink-v2-1.cfg]
set WORKAREASIZE 0x1000
source [find target/stm32l0.cfg]
# serial of my l053 disco board.
hla_serial "0670FF484849785087085514"
# no trace on cm0
#tpiu config internal swodump.stm32f4disco.log uart off 168000000
# 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

View File

@ -10,6 +10,7 @@ DUT_SERIAL = "stm32f4disco"
#DUT_SERIAL = "stm32f103-generic"
#DUT_SERIAL = "stm32l1-generic"
#DUT_SERIAL = "stm32f072disco"
#DUT_SERIAL = "stm32l053disco"
class find_by_serial(object):
def __init__(self, serial):