7 #if defined (BOARD_ENVIROBOT_SC)
20 static const struct gpio_t fscm_pins[] =
88 __IO uint32_t SDCR[2];
89 __IO uint32_t SDTR[2];
93 } FMC_Bank5_6_TypeDef;
95 #define FMC_R_BASE ((uint32_t)0xA0000000)
96 #define FMC_Bank5_6 ((FMC_Bank5_6_TypeDef *) FMC_Bank5_6_R_BASE)
97 #define FMC_Bank5_6_R_BASE (FMC_R_BASE + 0x0140)
106 static void SystemInit_ExtMemCtl(
void)
108 uint32_t tmpreg = 0, timeout = 0xFFFF;
112 RCC->AHB1ENR |= 0x0000007E;
115 GPIOB->AFR[0] = 0x0CC00000;
116 GPIOB->AFR[1] = 0x00000000;
118 GPIOB->MODER = 0x00002A80;
120 GPIOB->OSPEEDR = 0x000028C0;
122 GPIOB->OTYPER = 0x00000000;
124 GPIOB->PUPDR = 0x00000100;
127 GPIOC->AFR[0] = 0x0000000C;
128 GPIOC->AFR[1] = 0x00000000;
130 GPIOC->MODER = 0x00000002;
132 GPIOC->OSPEEDR = 0x00000002;
134 GPIOC->OTYPER = 0x00000000;
136 GPIOC->PUPDR = 0x00000000;
139 GPIOD->AFR[0] = 0x000000CC;
140 GPIOD->AFR[1] = 0xCC000CCC;
142 GPIOD->MODER = 0xA02A000A;
144 GPIOD->OSPEEDR = 0xA02A000A;
146 GPIOD->OTYPER = 0x00000000;
148 GPIOD->PUPDR = 0x00000000;
151 GPIOE->AFR[0] = 0xC00000CC;
152 GPIOE->AFR[1] = 0xCCCCCCCC;
154 GPIOE->MODER = 0xAAAA800A;
156 GPIOE->OSPEEDR = 0xAAAA800A;
158 GPIOE->OTYPER = 0x00000000;
160 GPIOE->PUPDR = 0x00000000;
163 GPIOF->AFR[0] = 0x00CCCCCC;
164 GPIOF->AFR[1] = 0xCCCCC000;
166 GPIOF->MODER = 0xAA800AAA;
168 GPIOF->OSPEEDR = 0xAA800AAA;
170 GPIOF->OTYPER = 0x00000000;
172 GPIOF->PUPDR = 0x00000000;
175 GPIOG->AFR[0] = 0x00CC00CC;
176 GPIOG->AFR[1] = 0xC000000C;
178 GPIOG->MODER = 0x80020A0A;
180 GPIOG->OSPEEDR = 0x80020A0A;
182 GPIOG->OTYPER = 0x00000000;
184 GPIOG->PUPDR = 0x00000000;
189 RCC->AHB3ENR |= 0x00000001;
192 FMC_Bank5_6->SDCR[0] = 0x00002800;
193 FMC_Bank5_6->SDCR[1] = 0x000001D4;
194 FMC_Bank5_6->SDTR[0] = 0x00106000;
195 FMC_Bank5_6->SDTR[1] = 0x00010361;
199 FMC_Bank5_6->SDCMR = 0x08 | 0x01;
200 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
201 while((tmpreg != 0) && (timeout-- > 0))
203 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
210 FMC_Bank5_6->SDCMR = 0x08 | 0x02;
212 while((tmpreg != 0) && (timeout-- > 0))
214 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
218 FMC_Bank5_6->SDCMR = 0x08 | 0x03 | 0x60;
220 while((tmpreg != 0) && (timeout-- > 0))
222 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
226 FMC_Bank5_6->SDCMR = 0x08 | 0x04 | 0x00046200;
228 while((tmpreg != 0) && (timeout-- > 0))
230 tmpreg = FMC_Bank5_6->SDSR & 0x00000020;
234 tmpreg = FMC_Bank5_6->SDRTR;
235 FMC_Bank5_6->SDRTR = (tmpreg | (683 << 1));
238 tmpreg = FMC_Bank5_6->SDCR[1];
239 FMC_Bank5_6->SDCR[1] = (tmpreg & 0xFFFFFDFF);
252 SystemInit_ExtMemCtl();
259 static void load_init_external_ram(
void)
261 extern uint8_t __ext_ram_bss_start;
262 extern uint8_t __ext_ram_bss_end;
264 extern uint8_t __ext_ram_dst_start;
265 extern uint8_t __ext_ram_dst_end;
266 extern uint8_t __ext_ram_src_start;
268 memset(&__ext_ram_bss_start, 0x0, &__ext_ram_bss_end - &__ext_ram_bss_start);
269 memcpy(&__ext_ram_dst_start,&__ext_ram_src_start, &__ext_ram_dst_end - & __ext_ram_dst_start);
273 static void bsp_pwm_leds_init(uint32_t frequency, uint32_t steps, uint32_t initial)
275 const struct gpio_t pins[] =
286 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
289 RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, ENABLE);
290 RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4, DISABLE);
300 TIM4->PSC = (((
SystemClock.timer)/steps)/frequency) - 1;
305 TIM4->ARR = steps - 1;
308 TIM4->CCR1 = initial;
309 TIM4->CCR2 = initial;
323 void bsp_led_set_pwm(uint32_t
nr, uint32_t value)
334 volatile uint32_t *addr[] =
360 volatile uint32_t *addr[] =
388 static status_e bsp_buttons_init(
void)
407 return &bsp_buttons[0];
413 const struct gpio_t gpio_vbus_not = PIN_VBUS_NOT;
424 static const struct gpio_t all_pins_safe_values[] =
446 GPIO_JTMS_SWDIO_PA13,
447 GPIO_JTCK_SWCLK_PA14,
455 GPIO_JTDO_TRACESWO_PB3,
556 PIN_RESET_NOT_CAMERA,
557 PIN_RESET_NOT_SCREEN,
560 PIN_RESET_NOT_ETHERNET,
601 bsp_led_set_pwm(0, 50);
602 bsp_led_set_pwm(1, 50);
603 bsp_led_set_pwm(2, 50);
609 status = bsp_buttons_init();
623 status = bsp_init_FSMC();
630 status =
ram_test_basic((uint32_t *)EXT_SDRAM_BASE, EXT_SDRAM_SIZE);
637 load_init_external_ram();
642 #if (USE_STM32_USB_HOST_MODE || USE_STM32_USB_USE_DEVICE_MODE || USE_STM32_USB_OTG_MODE)
643 #include "stm32/usb/usb_core.h"
646 void USB_OTG_BSP_DriveVBUS(USB_OTG_CORE_HANDLE *pdev, uint8_t state)
649 const struct gpio_t gpio_vbus_not = PIN_VBUS_NOT;
653 void USB_OTG_BSP_ConfigVBUS(USB_OTG_CORE_HANDLE *pdev)
655 const struct gpio_t gpio_vbus_not = PIN_VBUS_NOT;
657 USB_OTG_BSP_DriveVBUS (pdev, 0);
This file contains all the functions prototypes for the RCC firmware library.
BSP - Board Support Package.
#define DEF_GPIOF(__PIN, __MODE)
same as DEF_GPIOA for port F
uint8_t nr
Pin number (0 for GPIOx0, ... , 3 for GPIOx3, ...)
void delay_wait_ms(uint32_t ms)
Wait for at least that time.
#define BSP_BUTTON_NR
Number of buttons.
void * memcpy(void *dest, const void *src, size_t n)
void * memset(void *dest, int n, size_t n)
#define DEF_GPIOB(__PIN, __MODE)
same as DEF_GPIOA for port B
uint8_t lightness_to_pwm(uint8_t percentage)
PWM value for driving a LED expressed as perceived percentage.
#define DEF_GPIOD(__PIN, __MODE)
same as DEF_GPIOA for port D
static void gpio_set(const struct gpio_t *gpio, uint32_t value)
Set a gpio.
static uint32_t gpio_get(const struct gpio_t *gpio)
Get gpio level.
#define DEF_GPIOA(__PIN, __MODE)
Helper for defining a pin.
void bsp_led_set(uint32_t nr, uint32_t value)
Set a led (ON or OFF)
#define DEF_GPIOG(__PIN, __MODE)
same as DEF_GPIOA for port G
void bsp_led_toggle(uint32_t nr)
toggle a led
#define BSP_PWM_LED_STEPS
Lightness correction.
#define GPIO_AF_FSMC
AF 12 selection.
This file contains all the functions prototypes for the FSMC firmware library.
#define LIGHTNESS_PWM_STEP
Number a step for a pwm using lightness_to_pwm.
#define DEF_GPIOC(__PIN, __MODE)
same as DEF_GPIOA for port C
status_e ram_test_basic(uint32_t *base, size_t size)
Quickly test a RAM region.
struct system_clock_t SystemClock
#define DEF_GPIOH(__PIN, __MODE)
same as DEF_GPIOA for port H
#define DEF_GPIOE(__PIN, __MODE)
same as DEF_GPIOA for port E
status_e gpio_setup_list(const struct gpio_t gpio[], size_t len)
Setup an array of gpio.
status_e gpio_setup(const struct gpio_t *gpio)
Setup a gpio.
#define ARRAY_SIZE(x)
Number of elements in the array.
static void gpio_toggle(const struct gpio_t *gpio)
Toggle a gpio line.
const struct gpio_t * bsp_button_gpios(void)
get buttons gpios
#define DEF_GPIOI(__PIN, __MODE)
same as DEF_GPIOA for port I
status_e bsp_init(void)
Initialize the whole board.
uint32_t bsp_button_get(uint32_t nr)
Get a button.