usb.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "at32f403a_407.h"
  2. #include "usb.h"
  3. #include "usbd_core.h"
  4. #include "usbd_desc.h"
  5. #include "usbd_int.h"
  6. usbd_core_type usb_core_dev;
  7. extern usbd_class_handler usbd_rndis_cb;
  8. //
  9. void usb_init(void)
  10. {
  11. gpio_init_type gpio_initstructure;
  12. crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  13. // Setup USB switch
  14. crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);
  15. gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
  16. gpio_initstructure.gpio_pull = GPIO_PULL_NONE;
  17. gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
  18. gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  19. gpio_initstructure.gpio_pins = GPIO_PINS_9;
  20. gpio_init(GPIOE, &gpio_initstructure);
  21. gpio_bits_reset(GPIOE, GPIO_PINS_9);
  22. usb_clock48m_select(USB_CLK_HICK);
  23. crm_periph_clock_enable(CRM_USB_PERIPH_CLOCK, TRUE);
  24. nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  25. nvic_irq_enable(USBFS_L_CAN1_RX0_IRQn, 6, 0);
  26. usbd_core_init(&usb_core_dev, USB, &usbd_rndis_cb, &USR_desc, 0);
  27. usbd_connect(&usb_core_dev);
  28. }
  29. //
  30. void USBFS_L_CAN1_RX0_IRQHandler(void)
  31. {
  32. usbd_irq_handler(&usb_core_dev);
  33. }
  34. //
  35. void usb_stop(void)
  36. {
  37. crm_periph_clock_enable(CRM_USB_PERIPH_CLOCK, FALSE);
  38. nvic_irq_disable(USBFS_L_CAN1_RX0_IRQn);
  39. }