소스 검색

F730Z8: Fix board init to initialise all unused pins and enable GPIOE clock.
Rename Ultra730 to F7 lightning

Keir Fraser 4 년 전
부모
커밋
614278c168
5개의 변경된 파일71개의 추가작업 그리고 15개의 파일을 삭제
  1. 1 1
      inc/stm32/f7.h
  2. 66 10
      src/board.c
  3. 2 2
      src/floppy_f7.c
  4. 1 1
      src/stm32f7.c
  5. 1 1
      src/usb/hw_dwc_otg.c

+ 1 - 1
inc/stm32/f7.h

@@ -91,7 +91,7 @@ void gpio_set_af(GPIO gpio, unsigned int pin, unsigned int af);
 enum {
     F7SM_basic = 0,
     F7SM_ambertronic_f7_plus = 1,
-    F7SM_ultra730 = 2
+    F7SM_lightning = 2
 };
 
 /*

+ 66 - 10
src/board.c

@@ -28,19 +28,75 @@ static void gpio_pull_up_pins(GPIO gpio, uint16_t mask)
     }
 }
 
-void board_init(void)
+#if STM32F == 1
+
+static void mcu_board_init(void)
 {
-    /* Pull up all unused pins. */
-    if (STM32F == 1) {
-        gpio_pull_up_pins(gpioa, 0xe1fe); /* PA1-8,13-15 */
-        gpio_pull_up_pins(gpiob, 0x0027); /* PB0-2,5 */
-        gpio_pull_up_pins(gpioc, 0xffff); /* PC0-15 */
-    } else if (STM32F == 7) {
-        gpio_pull_up_pins(gpioa, 0x9930); /* PA4-5,8,11-12,15 */
-        gpio_pull_up_pins(gpiob, 0x23f8); /* PB3-9,13 */
-        gpio_pull_up_pins(gpioc, 0xffe7); /* PC0-2,5-15 */
+    gpio_pull_up_pins(gpioa, 0xe1fe); /* PA1-8,13-15 */
+    gpio_pull_up_pins(gpiob, 0x0027); /* PB0-2,5 */
+    gpio_pull_up_pins(gpioc, 0xffff); /* PC0-15 */
+}
+
+#elif STM32F == 7
+
+static void mcu_board_init(void)
+{
+    uint16_t a = 0x9930; /* PA4-5,8,11-12,15 */
+    uint16_t b = 0x23f8; /* PB3-9,13 */
+    uint16_t c = 0xffe7; /* PC0-2,5-15 */
+    uint16_t d = 0xffff; /* PD0-15 */
+    uint16_t e = 0xffff; /* PE0-15 */
+    uint16_t f = 0xffff; /* PF0-15 */
+    uint16_t g = 0xffff; /* PG0-15 */
+    uint16_t h = 0xffff; /* PH0-15 */
+    uint16_t i = 0xffff; /* PI0-15 */
+    uint32_t ahb1enr = rcc->ahb1enr;
+
+    switch (gw_info.hw_submodel) {
+    case F7SM_basic:
+        break;
+    case F7SM_ambertronic_f7_plus:
+        break;
+    case F7SM_lightning:
+        /* Uses PE12 and PE13 for extra drive outputs. */
+        ahb1enr |= RCC_AHB1ENR_GPIOEEN;
+        break;
     }
 
+    /* Enable all GPIO bank register clocks to configure unused pins. */
+    rcc->ahb1enr |= (RCC_AHB1ENR_GPIOAEN |
+                     RCC_AHB1ENR_GPIOBEN |
+                     RCC_AHB1ENR_GPIOCEN |
+                     RCC_AHB1ENR_GPIODEN |
+                     RCC_AHB1ENR_GPIOEEN |
+                     RCC_AHB1ENR_GPIOFEN |
+                     RCC_AHB1ENR_GPIOGEN |
+                     RCC_AHB1ENR_GPIOHEN |
+                     RCC_AHB1ENR_GPIOIEN);
+    peripheral_clock_delay();
+
+    gpio_pull_up_pins(gpioa, a);
+    gpio_pull_up_pins(gpiob, b);
+    gpio_pull_up_pins(gpioc, c);
+    gpio_pull_up_pins(gpiod, d);
+    gpio_pull_up_pins(gpioe, e);
+    gpio_pull_up_pins(gpiof, f);
+    gpio_pull_up_pins(gpiog, g);
+    gpio_pull_up_pins(gpioh, h);
+    gpio_pull_up_pins(gpioi, i);
+
+    /* Unused GPIO banks can have their clocks disabled again. They will 
+     * statically hold their configuration state. */
+    peripheral_clock_delay();
+    rcc->ahb1enr = ahb1enr;
+}
+
+#endif
+
+void board_init(void)
+{
+    mcu_board_init();
+
 #ifdef NDEBUG
     /* Pull up unused debug pins (A9,A10 = serial console). */
     gpio_pull_up_pins(gpioa, (1u<<9) | (1u<<10));

+ 2 - 2
src/floppy_f7.c

@@ -83,7 +83,7 @@ const static struct user_pin _user_pins_F7SM_ambertronic_f7_plus[] = {
     { 2, _B, 12, _OD }, /* board bug: B12 isn't buffered */
     { 4, _C,  6, _PP },
     { 0,  0,  0, _PP } };
-const static struct user_pin _user_pins_F7SM_ultra730[] = {
+const static struct user_pin _user_pins_F7SM_lightning[] = {
     { 2, _B, 12, _PP },
     { 4, _E, 15, _PP },
     { 6, _E, 14, _PP },
@@ -91,7 +91,7 @@ const static struct user_pin _user_pins_F7SM_ultra730[] = {
 const static struct user_pin *user_pins, *_user_pins[] = {
     [F7SM_basic]               = _user_pins_F7SM_basic,
     [F7SM_ambertronic_f7_plus] = _user_pins_F7SM_ambertronic_f7_plus,
-    [F7SM_ultra730]            = _user_pins_F7SM_ultra730
+    [F7SM_lightning]           = _user_pins_F7SM_lightning
 };
 
 static GPIO gpio_from_id(uint8_t id)

+ 1 - 1
src/stm32f7.c

@@ -74,7 +74,7 @@ static void board_id_init(void)
 
 static void clock_init(void)
 {
-    unsigned int hse = (gw_info.hw_submodel == F7SM_ultra730) ? 16 : 8;
+    unsigned int hse = (gw_info.hw_submodel == F7SM_lightning) ? 16 : 8;
 
     /* Disable all peripheral clocks except the essentials before enabling 
      * Over-drive mode (see note in RM0431, p102). We still need access to RAM

+ 1 - 1
src/usb/hw_dwc_otg.c

@@ -156,7 +156,7 @@ void hw_usb_init(void)
 
     /* Determine which PHY we use based on hardware submodel ID. */
     switch (gw_info.hw_submodel) {
-    case F7SM_ultra730:
+    case F7SM_lightning:
         conf_iface = IFACE_HS_EMBEDDED;
         break;
     default: