usb_clock.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "at32f403a_407.h"
  2. #include "usb_clock.h"
  3. //
  4. void usb_clock48m_select(usb_clk48_s clk_s)
  5. {
  6. if(clk_s == USB_CLK_HICK)
  7. {
  8. crm_usb_clock_source_select(CRM_USB_CLOCK_SOURCE_HICK);
  9. // enable the acc calibration ready interrupt
  10. crm_periph_clock_enable(CRM_ACC_PERIPH_CLOCK, TRUE);
  11. // update the c1\c2\c3 value
  12. acc_write_c1(7980);
  13. acc_write_c2(8000);
  14. acc_write_c3(8020);
  15. // open acc calibration
  16. acc_calibration_mode_enable(ACC_CAL_HICKTRIM, TRUE);
  17. }
  18. else
  19. {
  20. switch(system_core_clock)
  21. {
  22. /* 48MHz */
  23. case 48000000:
  24. crm_usb_clock_div_set(CRM_USB_DIV_1);
  25. break;
  26. /* 72MHz */
  27. case 72000000:
  28. crm_usb_clock_div_set(CRM_USB_DIV_1_5);
  29. break;
  30. /* 96MHz */
  31. case 96000000:
  32. crm_usb_clock_div_set(CRM_USB_DIV_2);
  33. break;
  34. /* 120MHz */
  35. case 120000000:
  36. crm_usb_clock_div_set(CRM_USB_DIV_2_5);
  37. break;
  38. /* 144MHz */
  39. case 144000000:
  40. crm_usb_clock_div_set(CRM_USB_DIV_3);
  41. break;
  42. /* 168MHz */
  43. case 168000000:
  44. crm_usb_clock_div_set(CRM_USB_DIV_3_5);
  45. break;
  46. /* 192MHz */
  47. case 192000000:
  48. crm_usb_clock_div_set(CRM_USB_DIV_4);
  49. break;
  50. default: break;
  51. }
  52. }
  53. }