diff options
Diffstat (limited to 'controller/fw/main.c')
-rw-r--r-- | controller/fw/main.c | 73 |
1 files changed, 37 insertions, 36 deletions
diff --git a/controller/fw/main.c b/controller/fw/main.c index 7359c59..846aa8c 100644 --- a/controller/fw/main.c +++ b/controller/fw/main.c @@ -1,53 +1,54 @@ -/* - * This file is part of the libopencm3 project. - * - * Copyright (C) 2009 Uwe Hermann <uwe@hermann-uwe.de> - * Copyright (C) 2011 Damjan Marion <damjan.marion@gmail.com> - * Copyright (C) 2011 Mark Panajotovic <marko@electrontube.org> - * - * 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 <stdbool.h> #include <libopencm3/stm32/rcc.h> #include <libopencm3/stm32/gpio.h> -/* Set STM32 to 168 MHz. */ +static struct spi_flash_if spif; + static void clock_setup(void) { - rcc_clock_setup_pll(&rcc_hse_8mhz_3v3[RCC_CLOCK_3V3_168MHZ]); - rcc_periph_clock_enable(RCC_GPIOA); + rcc_clock_setup_pll(&rcc_hse_8mhz_3v3[RCC_CLOCK_3V3_168MHZ]); + rcc_periph_clock_enable(RCC_GPIOA); + rcc_periph_clock_enable(RCC_GPIOB); + rcc_periph_clock_enable(RCC_SPI1); } -static void gpio_setup(void) +static void led_setup(void) { - gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO6 | GPIO7); + gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO6 | GPIO7); } -int main(void) +static void spi_flash_if_set_cs(bool val) { + if (val) + gpio_set(GPIOB, GPIO0); + else + gpio_clear(GPIOB, GPIO0); +} + +static void spi_flash_setup(void) { - int i; + gpio_mode_setup(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO3 | GPIO4 | GPIO5); /* SPI flash SCK/MISO/MOSI */ + gpio_mode_setup(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO0); /* SPI flash CS */ + gpio_set_output_options(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO0 | GPIO3 | GPIO4 | GPIO5); + gpio_set_af(GPIOB, 5, GPIO3 | GPIO4 | GPIO5); - clock_setup(); - gpio_setup(); + spi_init(&spif, SPI1, &spi_flash_if_set_cs); +} + +int main(void) +{ + clock_setup(); + led_setup(); + spi_flash_setup(); - gpio_set(GPIOA, GPIO6); + gpio_set(GPIOA, GPIO6); - while (1) { - gpio_toggle(GPIOA, GPIO6 | GPIO7); - for (i = 0; i < 6000000; i++) - __asm__("nop"); - } + while (1) { + gpio_toggle(GPIOA, GPIO6 | GPIO7); + for (int i = 0; i < 6000000; i++) + __asm__("nop"); + } - return 0; + return 0; } |