diff --git a/Makefile b/Makefile index ad8246b..8c689ec 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,8 @@ CFLAGS += -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes CFLAGS += -Os LDFLAGS += -Os +-include source/Makefile + obj-y += source/bitops.o obj-y += source/main.o diff --git a/source/Makefile b/source/Makefile new file mode 100644 index 0000000..a07da71 --- /dev/null +++ b/source/Makefile @@ -0,0 +1 @@ +-include source/platform/Makefile diff --git a/source/drivers/stm32f0_spi.c b/source/drivers/stm32f0_spi.c index 1e76118..59f5378 100644 --- a/source/drivers/stm32f0_spi.c +++ b/source/drivers/stm32f0_spi.c @@ -2,7 +2,6 @@ #include #include -#include #include #include #include @@ -18,18 +17,6 @@ static struct spi_ops stm32f0_spi_ops = { static void stm32f0_spi_init(void) { - /* Set up clocks for SPI 1 */ - //rcc_clock_setup_in_hsi_out_48mhz(); - //rcc_periph_clock_enable(RCC_GPIOA); - rcc_periph_clock_enable(RCC_GPIOB); - rcc_periph_clock_enable(RCC_SPI1); - - /* Set up GPIOs for SPI 1 */ - gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO4); - gpio_set(GPIOA, GPIO4); - gpio_mode_setup(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO3 | GPIO4 | GPIO5); - gpio_set_af(GPIOB, GPIO_AF0, GPIO3 | GPIO4 | GPIO5); - spi_set_master_mode(SPI1); spi_set_baudrate_prescaler(SPI1, SPI_CR1_BR_FPCLK_DIV_64); spi_set_clock_polarity_0(SPI1); diff --git a/source/drivers/usart_console.c b/source/drivers/usart_console.c index e29a947..ef7122b 100644 --- a/source/drivers/usart_console.c +++ b/source/drivers/usart_console.c @@ -1,6 +1,4 @@ #define _GNU_SOURCE -#include -#include #include #include #include @@ -151,10 +149,6 @@ static int usart_init(struct usart_console *console) if (usart_get_irq_no(&irq_no, console->dev) < 0) return -1; - /* Set up clocks for USART 1 */ - rcc_periph_clock_enable(RCC_GPIOA); - rcc_periph_clock_enable(RCC_USART1); - usart_set_baudrate(console->dev, 115200); usart_set_databits(console->dev, 8); usart_set_parity(console->dev, USART_PARITY_NONE); diff --git a/source/main.c b/source/main.c index 8b8ab8b..6d6dbf1 100644 --- a/source/main.c +++ b/source/main.c @@ -1,10 +1,14 @@ #include #include +#include +#include #include int main(void) { + rcc_init(); + gpio_init(); console_init(); printf("TBM-dev (built on " __DATE__ ")\n"); cmd_loop("tbm # "); diff --git a/source/platform/Makefile b/source/platform/Makefile new file mode 100644 index 0000000..09f2a89 --- /dev/null +++ b/source/platform/Makefile @@ -0,0 +1 @@ +-include source/platform/$(TARGET)/Makefile diff --git a/source/platform/stm32f0/Makefile b/source/platform/stm32f0/Makefile new file mode 100644 index 0000000..6bea991 --- /dev/null +++ b/source/platform/stm32f0/Makefile @@ -0,0 +1,2 @@ +obj-y += source/platform/stm32f0/gpio.o +obj-y += source/platform/stm32f0/rcc.o diff --git a/source/platform/stm32f0/gpio.c b/source/platform/stm32f0/gpio.c new file mode 100644 index 0000000..31d10a1 --- /dev/null +++ b/source/platform/stm32f0/gpio.c @@ -0,0 +1,26 @@ +#include + +#include + +int gpio_init(void) +{ + /* Set up GPIOs for SPI 1 */ + gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO4); + gpio_set(GPIOA, GPIO4); + gpio_mode_setup(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO3 | GPIO4 | GPIO5); + gpio_set_af(GPIOB, GPIO_AF0, GPIO3 | GPIO4 | GPIO5); + + /* Set up GPIOs for user console (USART 1) */ + gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO9 | GPIO10); + gpio_set_af(GPIOA, GPIO_AF1, GPIO9 | GPIO10); + + /* Set up GPIOs for admin console (USART 2) */ + gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO2 | GPIO3); + gpio_set_af(GPIOA, GPIO_AF1, GPIO2 | GPIO3); + + return 0; +} + +void gpio_cleanup(void) +{ +} diff --git a/source/platform/stm32f0/rcc.c b/source/platform/stm32f0/rcc.c new file mode 100644 index 0000000..43347f3 --- /dev/null +++ b/source/platform/stm32f0/rcc.c @@ -0,0 +1,18 @@ +#include + +#include + +int rcc_init(void) +{ + rcc_periph_clock_enable(RCC_GPIOA); + rcc_periph_clock_enable(RCC_GPIOB); + rcc_periph_clock_enable(RCC_SPI1); + rcc_periph_clock_enable(RCC_USART1); + rcc_periph_clock_enable(RCC_USART2); + + return 0; +} + +void rcc_cleanup(void) +{ +}