diff options
Diffstat (limited to 'libmaple/usb/usb.c')
-rw-r--r-- | libmaple/usb/usb.c | 30 |
1 files changed, 5 insertions, 25 deletions
diff --git a/libmaple/usb/usb.c b/libmaple/usb/usb.c index 5c4c35a..173673e 100644 --- a/libmaple/usb/usb.c +++ b/libmaple/usb/usb.c @@ -36,6 +36,7 @@ #include "gpio.h" #include "usb_hardware.h" #include "delay.h" +#include "nvic.h" #include "usb_config.h" #include "usb_callbacks.h" @@ -111,9 +112,9 @@ void usb_cdcacm_enable(gpio_dev *disc_dev, uint8 disc_bit) { } void usb_cdcacm_disable(gpio_dev *disc_dev, uint8 disc_bit) { - // These are just guesses about how to do this - // TODO: real disable function - usbDsbISR(); + // These are just guesses about how to do this, but it seems to work. + // TODO: verify this with USB spec + nvic_irq_disable(NVIC_USB_LP_CAN_RX0); gpio_write_bit(disc_dev, disc_bit, 1); } @@ -218,27 +219,6 @@ RESULT usbPowerOff(void) { return USB_SUCCESS; } - -// These two functions (usbEnbISR/usbDsbISR) are implementented in ST style, -// and at least the DsbISR doesn't seem to work? -void usbEnbISR(void) { - NVIC_InitTypeDef NVIC_InitStructure; - NVIC_InitStructure.NVIC_IRQChannel = USB_LP_IRQ; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelCmd = TRUE; - nvicInit(&NVIC_InitStructure); -} - -void usbDsbISR(void) { - NVIC_InitTypeDef NVIC_InitStructure; - NVIC_InitStructure.NVIC_IRQChannel = USB_LP_IRQ; - NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; - NVIC_InitStructure.NVIC_IRQChannelCmd = FALSE; - nvicInit(&NVIC_InitStructure); -} - /* overloaded ISR routine, this is the main usb ISR */ void __irq_usb_lp_can_rx0(void) { wIstr = _GetISTR(); @@ -321,7 +301,7 @@ if (wIstr & ISTR_CTR & wInterrupt_Mask) { void usbWaitReset(void) { delay_us(RESET_DELAY); - systemHardReset(); + nvic_sys_reset(); } /* This low-level send bytes function is NON-BLOCKING; blocking behavior, with |