From 655014ac9cb39fdce73bd8cab1956489fdae2ec8 Mon Sep 17 00:00:00 2001 From: Piotr Esden-Tempski Date: Thu, 24 Jun 2021 14:59:54 -0700 Subject: [PATCH] native: hw rev 5 has the usb vbus sense pin on PA15. We had to move the pin to free up the SPI SCLK pin. --- src/platforms/native/platform.c | 38 ++++++++++++++++++++++++++------- src/platforms/native/platform.h | 8 +++++++ 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/platforms/native/platform.c b/src/platforms/native/platform.c index 879ad0e..c5f345a 100644 --- a/src/platforms/native/platform.c +++ b/src/platforms/native/platform.c @@ -343,7 +343,18 @@ void platform_request_boot(void) void exti15_10_isr(void) { - if (gpio_get(USB_VBUS_PORT, USB_VBUS_PIN)) { + uint32_t usb_vbus_port; + uint16_t usb_vbus_pin; + + if (platform_hwversion() < 5) { + usb_vbus_port = USB_VBUS_PORT; + usb_vbus_pin = USB_VBUS_PIN; + } else { + usb_vbus_port = USB_VBUS5_PORT; + usb_vbus_pin = USB_VBUS5_PIN; + } + + if (gpio_get(usb_vbus_port, usb_vbus_pin)) { /* Drive pull-up high if VBUS connected */ gpio_set_mode(USB_PU_PORT, GPIO_MODE_OUTPUT_10_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, USB_PU_PIN); @@ -353,24 +364,35 @@ void exti15_10_isr(void) GPIO_CNF_INPUT_FLOAT, USB_PU_PIN); } - exti_reset_request(USB_VBUS_PIN); + exti_reset_request(usb_vbus_pin); } static void setup_vbus_irq(void) { + uint32_t usb_vbus_port; + uint16_t usb_vbus_pin; + + if (platform_hwversion() < 5) { + usb_vbus_port = USB_VBUS_PORT; + usb_vbus_pin = USB_VBUS_PIN; + } else { + usb_vbus_port = USB_VBUS5_PORT; + usb_vbus_pin = USB_VBUS5_PIN; + } + nvic_set_priority(USB_VBUS_IRQ, IRQ_PRI_USB_VBUS); nvic_enable_irq(USB_VBUS_IRQ); - gpio_set(USB_VBUS_PORT, USB_VBUS_PIN); + gpio_set(usb_vbus_port, usb_vbus_pin); gpio_set(USB_PU_PORT, USB_PU_PIN); - gpio_set_mode(USB_VBUS_PORT, GPIO_MODE_INPUT, - GPIO_CNF_INPUT_PULL_UPDOWN, USB_VBUS_PIN); + gpio_set_mode(usb_vbus_port, GPIO_MODE_INPUT, + GPIO_CNF_INPUT_PULL_UPDOWN, usb_vbus_pin); /* Configure EXTI for USB VBUS monitor */ - exti_select_source(USB_VBUS_PIN, USB_VBUS_PORT); - exti_set_trigger(USB_VBUS_PIN, EXTI_TRIGGER_BOTH); - exti_enable_request(USB_VBUS_PIN); + exti_select_source(usb_vbus_pin, usb_vbus_port); + exti_set_trigger(usb_vbus_pin, EXTI_TRIGGER_BOTH); + exti_enable_request(usb_vbus_pin); exti15_10_isr(); } diff --git a/src/platforms/native/platform.h b/src/platforms/native/platform.h index 87ce5ea..24c0db5 100644 --- a/src/platforms/native/platform.h +++ b/src/platforms/native/platform.h @@ -61,6 +61,8 @@ int usbuart_debug_write(const char *buf, size_t len); * USB cable pull-up: PA8 * USB VBUS detect: PB13 -- New on mini design. * Enable pull up for compatibility. + * Hardware 4 and older. (we needed the pin for SPI on 5) + * PA15 -- Hardware 5 and newer. * Force DFU mode button: PB12 */ @@ -96,10 +98,16 @@ int usbuart_debug_write(const char *buf, size_t len); #define USB_PU_PORT GPIOA #define USB_PU_PIN GPIO8 +// For HW Rev 4 and older #define USB_VBUS_PORT GPIOB #define USB_VBUS_PIN GPIO13 +// IRQ stays the same for all hw revisions. #define USB_VBUS_IRQ NVIC_EXTI15_10_IRQ +// For HW Rev 5 and newer +#define USB_VBUS5_PORT GPIOA +#define USB_VBUS5_PIN GPIO15 + #define LED_PORT GPIOB #define LED_PORT_UART GPIOB #define LED_0 GPIO2