main.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include "at32f403a_407.h"
  2. #include "at32f403a_407_board.h"
  3. #include "at32f403a_407_clock.h"
  4. #include "common_config.h"
  5. //#include "at32_emac.h"
  6. #include "FreeRTOS.h"
  7. #include "task.h"
  8. #include "queue.h"
  9. #include "semphr.h"
  10. #include "usb_eth.h"
  11. #include <stdio.h>
  12. #include <stdbool.h>
  13. #include <string.h>
  14. void init_task(void *argument);
  15. void usb_clock48m_select(usb_clk48_s clk_s);
  16. //
  17. int main(void)
  18. {
  19. nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  20. system_clock_config();
  21. at32_board_init();
  22. usb_clock48m_select(USB_CLK_HEXT);
  23. crm_periph_clock_enable(CRM_USB_PERIPH_CLOCK, TRUE);
  24. uart_print_init(115200);
  25. printf("\n\n\n\nMetrolog M3 [FW %s] loading....\r\n\n", VERSION);
  26. //
  27. //usb_init();
  28. /*
  29. taskENTER_CRITICAL();
  30. xTaskCreate(init_task, "init_task", 10*configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  31. taskEXIT_CRITICAL();
  32. vTaskStartScheduler();
  33. */
  34. while (1) {}
  35. }
  36. void init_task(void *argument)
  37. {
  38. static uint32_t cnt = 0;
  39. printf("\n\n\n\nMetrolog M3 [FW %s] loading....\r\n\n", VERSION);
  40. //
  41. usb_eth_init();
  42. /*
  43. for (;;)
  44. {
  45. printf("%u\r\n", cnt++);
  46. vTaskDelay(1000);
  47. }
  48. */
  49. // -----------------------------------------------------------------------------
  50. vTaskDelete(NULL);
  51. taskYIELD();
  52. }
  53. //
  54. void usb_clock48m_select(usb_clk48_s clk_s)
  55. {
  56. if(clk_s == USB_CLK_HICK)
  57. {
  58. crm_usb_clock_source_select(CRM_USB_CLOCK_SOURCE_HICK);
  59. /* enable the acc calibration ready interrupt */
  60. crm_periph_clock_enable(CRM_ACC_PERIPH_CLOCK, TRUE);
  61. /* update the c1\c2\c3 value */
  62. acc_write_c1(7980);
  63. acc_write_c2(8000);
  64. acc_write_c3(8020);
  65. /* open acc calibration */
  66. acc_calibration_mode_enable(ACC_CAL_HICKTRIM, TRUE);
  67. }
  68. else
  69. {
  70. switch(system_core_clock)
  71. {
  72. /* 48MHz */
  73. case 48000000:
  74. crm_usb_clock_div_set(CRM_USB_DIV_1);
  75. break;
  76. /* 72MHz */
  77. case 72000000:
  78. crm_usb_clock_div_set(CRM_USB_DIV_1_5);
  79. break;
  80. /* 96MHz */
  81. case 96000000:
  82. crm_usb_clock_div_set(CRM_USB_DIV_2);
  83. break;
  84. /* 120MHz */
  85. case 120000000:
  86. crm_usb_clock_div_set(CRM_USB_DIV_2_5);
  87. break;
  88. /* 144MHz */
  89. case 144000000:
  90. crm_usb_clock_div_set(CRM_USB_DIV_3);
  91. break;
  92. /* 168MHz */
  93. case 168000000:
  94. crm_usb_clock_div_set(CRM_USB_DIV_3_5);
  95. break;
  96. /* 192MHz */
  97. case 192000000:
  98. crm_usb_clock_div_set(CRM_USB_DIV_4);
  99. break;
  100. default:
  101. break;
  102. }
  103. }
  104. }