aboutsummaryrefslogtreecommitdiff
path: root/src/platforms/native/platform.c
diff options
context:
space:
mode:
authorUwe Bonnes2013-01-13 19:15:16 +0100
committerUwe Bonnes2013-01-21 11:02:43 +0100
commit04415582bd19c3a33b938f88594b9c4d79b41d18 (patch)
treec3d40bc7f51fab4e5ba38250f55195c0b0faf32e /src/platforms/native/platform.c
parent533608a2f4b2e0c19cb2f696fc491908ec980812 (diff)
cdcacm: move non-constant parts to platform.[hc]
Diffstat (limited to 'src/platforms/native/platform.c')
-rw-r--r--src/platforms/native/platform.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/platforms/native/platform.c b/src/platforms/native/platform.c
index 0f8b78a..8ded81a 100644
--- a/src/platforms/native/platform.c
+++ b/src/platforms/native/platform.c
@@ -26,6 +26,7 @@
#include <libopencm3/cm3/systick.h>
#include <libopencm3/cm3/scb.h>
#include <libopencm3/cm3/nvic.h>
+#include <libopencm3/stm32/exti.h>
#include <libopencm3/stm32/usart.h>
#include <libopencm3/usb/usbd.h>
#include <libopencm3/stm32/f1/adc.h>
@@ -262,3 +263,44 @@ const char *platform_target_voltage(void)
return ret;
}
+
+void assert_boot_pin(void)
+{
+ gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_2_MHZ,
+ GPIO_CNF_OUTPUT_PUSHPULL, GPIO12);
+ gpio_clear(GPIOB, GPIO12);
+}
+
+void exti15_10_isr(void)
+{
+ 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);
+ } else {
+ /* Allow pull-up to float if VBUS disconnected */
+ gpio_set_mode(USB_PU_PORT, GPIO_MODE_INPUT,
+ GPIO_CNF_INPUT_FLOAT, USB_PU_PIN);
+ }
+
+ exti_reset_request(USB_VBUS_PIN);
+}
+
+void setup_vbus_irq(void)
+{
+ 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_PU_PORT, USB_PU_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);
+
+ exti15_10_isr();
+}