board.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-08-27 Jiao first version
  9. */
  10. #include "board.h"
  11. FL_ErrorStatus FL_UART_GPIO_Init(UART_Type *UARTx)
  12. {
  13. FL_ErrorStatus status = FL_FAIL;
  14. FL_GPIO_InitTypeDef GPIO_InitStruct;
  15. if (UARTx == UART0)
  16. {
  17. GPIO_InitStruct.pin = FL_GPIO_PIN_13;
  18. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  19. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  20. GPIO_InitStruct.pull = FL_DISABLE;
  21. GPIO_InitStruct.remapPin = FL_DISABLE;
  22. status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  23. GPIO_InitStruct.pin = FL_GPIO_PIN_14;
  24. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  25. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  26. GPIO_InitStruct.pull = FL_DISABLE;
  27. GPIO_InitStruct.remapPin = FL_DISABLE;
  28. status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  29. }
  30. else if (UARTx == UART1)
  31. {
  32. GPIO_InitStruct.pin = FL_GPIO_PIN_13;
  33. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  34. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  35. GPIO_InitStruct.pull = FL_DISABLE;
  36. GPIO_InitStruct.remapPin = FL_DISABLE;
  37. status = FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  38. GPIO_InitStruct.pin = FL_GPIO_PIN_14;
  39. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  40. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  41. GPIO_InitStruct.pull = FL_DISABLE;
  42. GPIO_InitStruct.remapPin = FL_DISABLE;
  43. status = FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  44. }
  45. else if (UARTx == UART4)
  46. {
  47. GPIO_InitStruct.pin = FL_GPIO_PIN_0;
  48. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  49. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  50. GPIO_InitStruct.pull = FL_DISABLE;
  51. GPIO_InitStruct.remapPin = FL_DISABLE;
  52. status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  53. GPIO_InitStruct.pin = FL_GPIO_PIN_1;
  54. GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
  55. GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  56. GPIO_InitStruct.pull = FL_DISABLE;
  57. GPIO_InitStruct.remapPin = FL_DISABLE;
  58. status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  59. }
  60. return status;
  61. }
  62. static void RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLL_R, uint32_t PLL_DB, uint32_t PLL_O)
  63. {
  64. MODIFY_REG(RCC->PLLCR, RCC_PLLCR_DB_Msk | RCC_PLLCR_REFPRSC_Msk | RCC_PLLCR_OSEL_Msk | RCC_PLLCR_INSEL_Msk,
  65. (PLL_DB << RCC_PLLCR_DB_Pos) | PLL_R | PLL_O | Source);
  66. }
  67. static void RCHFInit(uint32_t clock)
  68. {
  69. switch (clock)
  70. {
  71. case FL_RCC_RCHF_FREQUENCY_8MHZ:
  72. FL_RCC_RCHF_WriteTrimValue(RCHF8M_TRIM);
  73. break;
  74. case FL_RCC_RCHF_FREQUENCY_16MHZ:
  75. FL_RCC_RCHF_WriteTrimValue(RCHF16M_TRIM);
  76. break;
  77. case FL_RCC_RCHF_FREQUENCY_24MHZ:
  78. FL_RCC_RCHF_WriteTrimValue(RCHF24M_TRIM);
  79. break;
  80. default:
  81. FL_RCC_RCHF_WriteTrimValue(RCHF8M_TRIM);
  82. break;
  83. }
  84. FL_RCC_RCHF_SetFrequency(clock);
  85. }
  86. void SelRCHFToPLL(uint32_t rchf, uint32_t clock)
  87. {
  88. uint32_t div = FL_RCC_PLL_PSC_DIV8;
  89. if (clock > 64)
  90. {
  91. return;
  92. }
  93. RCHFInit(rchf);
  94. switch (rchf)
  95. {
  96. case FL_RCC_RCHF_FREQUENCY_16MHZ:
  97. div = FL_RCC_PLL_PSC_DIV16;
  98. break;
  99. case FL_RCC_RCHF_FREQUENCY_24MHZ:
  100. div = FL_RCC_PLL_PSC_DIV24;
  101. break;
  102. default:
  103. break;
  104. }
  105. if (clock <= 24)
  106. {
  107. FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);
  108. }
  109. else
  110. {
  111. if ((clock > 24) && (clock <= 48))
  112. {
  113. FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_1CYCLE);
  114. }
  115. else
  116. {
  117. FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_1CYCLE);
  118. }
  119. }
  120. RCC_PLL_ConfigDomain_SYS(FL_RCC_PLL_CLK_SOURCE_RCHF, div, clock, FL_RCC_PLL_OUTPUT_X1);
  121. FL_RCC_PLL_Enable();
  122. while (FL_RCC_IsActiveFlag_PLLReady() != FL_SET);
  123. FL_RCC_SetAHBPrescaler(FL_RCC_AHBCLK_PSC_DIV1);
  124. FL_RCC_SetAPB1Prescaler(FL_RCC_APB1CLK_PSC_DIV1);
  125. FL_RCC_SetAPB2Prescaler(FL_RCC_APB2CLK_PSC_DIV1);
  126. FL_RCC_SetSystemClockSource(FL_RCC_SYSTEM_CLK_SOURCE_PLL);
  127. }