Version 0.10
[gnuk/gnuk.git] / src / usb_lld.c
1 #include "ch.h"
2 #include "hal.h"
3 #include "usb_lld.h"
4
5 extern void USB_Istr (void);
6
7 CH_IRQ_HANDLER (Vector90) {
8   CH_IRQ_PROLOGUE();
9   chSysLockFromIsr();
10
11   USB_Istr();
12
13   chSysUnlockFromIsr();
14   CH_IRQ_EPILOGUE();
15 }
16
17 void usb_lld_init (void) {
18   RCC->APB1ENR |= RCC_APB1ENR_USBEN;
19   NVICEnableVector (USB_LP_CAN1_RX0_IRQn,
20                     CORTEX_PRIORITY_MASK (STM32_USB_IRQ_PRIORITY));
21   /*
22    * Note that we also have other IRQ(s):
23    *    USB_HP_CAN1_TX_IRQn (for double-buffered or isochronous)
24    *    USBWakeUp_IRQn (suspend/resume)
25    */
26   RCC->APB1RSTR = RCC_APB1RSTR_USBRST;
27   RCC->APB1RSTR = 0;
28 }