1 /*
2 * Copyright (c) 2006-2022, 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
11 #include "board.h"
12
FL_UART_GPIO_Init(UART_Type * UARTx)13 FL_ErrorStatus FL_UART_GPIO_Init(UART_Type *UARTx)
14 {
15 FL_ErrorStatus status = FL_FAIL;
16 FL_GPIO_InitTypeDef GPIO_InitStruct;
17 if (UARTx == UART0)
18 {
19 GPIO_InitStruct.pin = FL_GPIO_PIN_13;
20 GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
21 GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
22 GPIO_InitStruct.pull = FL_DISABLE;
23 GPIO_InitStruct.remapPin = FL_DISABLE;
24
25 status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
26
27 GPIO_InitStruct.pin = FL_GPIO_PIN_14;
28 GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
29 GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
30 GPIO_InitStruct.pull = FL_DISABLE;
31 GPIO_InitStruct.remapPin = FL_DISABLE;
32
33 status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
34 }
35 else if (UARTx == UART1)
36 {
37 GPIO_InitStruct.pin = FL_GPIO_PIN_13;
38 GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
39 GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
40 GPIO_InitStruct.pull = FL_DISABLE;
41 GPIO_InitStruct.remapPin = FL_DISABLE;
42
43 status = FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
44
45 GPIO_InitStruct.pin = FL_GPIO_PIN_14;
46 GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
47 GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
48 GPIO_InitStruct.pull = FL_DISABLE;
49 GPIO_InitStruct.remapPin = FL_DISABLE;
50
51 status = FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
52 }
53 else if (UARTx == UART4)
54 {
55 GPIO_InitStruct.pin = FL_GPIO_PIN_0;
56 GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
57 GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
58 GPIO_InitStruct.pull = FL_DISABLE;
59 GPIO_InitStruct.remapPin = FL_DISABLE;
60
61 status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
62
63 GPIO_InitStruct.pin = FL_GPIO_PIN_1;
64 GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
65 GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
66 GPIO_InitStruct.pull = FL_DISABLE;
67 GPIO_InitStruct.remapPin = FL_DISABLE;
68
69 status = FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
70 }
71 return status;
72 }
73
FL_SPI_GPIO_Init(SPI_Type * SPIx)74 FL_ErrorStatus FL_SPI_GPIO_Init(SPI_Type *SPIx)
75 {
76 FL_ErrorStatus status = FL_FAIL;
77 FL_GPIO_InitTypeDef GPIO_InitStruct;
78 if (SPIx == SPI1)
79 {
80 GPIO_InitStruct.pin = FL_GPIO_PIN_11 | FL_GPIO_PIN_10 | FL_GPIO_PIN_9;
81 GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
82 GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
83 GPIO_InitStruct.pull = FL_DISABLE;
84 GPIO_InitStruct.remapPin = FL_DISABLE;
85
86 status=FL_GPIO_Init(GPIOB, &GPIO_InitStruct);
87 }
88 else if (SPIx == SPI2)
89 {
90 GPIO_InitStruct.pin = FL_GPIO_PIN_8 | FL_GPIO_PIN_10 | FL_GPIO_PIN_9;
91 GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
92 GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
93 GPIO_InitStruct.pull = FL_DISABLE;
94 GPIO_InitStruct.remapPin = FL_DISABLE;
95
96 status=FL_GPIO_Init(GPIOC, &GPIO_InitStruct);
97 }
98
99 return status;
100 }
101
RCC_PLL_ConfigDomain_SYS(uint32_t Source,uint32_t PLL_R,uint32_t PLL_DB,uint32_t PLL_O)102 static void RCC_PLL_ConfigDomain_SYS(uint32_t Source, uint32_t PLL_R, uint32_t PLL_DB, uint32_t PLL_O)
103 {
104 MODIFY_REG(RCC->PLLCR, RCC_PLLCR_DB_Msk | RCC_PLLCR_REFPRSC_Msk | RCC_PLLCR_OSEL_Msk | RCC_PLLCR_INSEL_Msk,
105 (PLL_DB << RCC_PLLCR_DB_Pos) | PLL_R | PLL_O | Source);
106 }
107
RCHFInit(uint32_t clock)108 static void RCHFInit(uint32_t clock)
109 {
110 switch (clock)
111 {
112 case FL_RCC_RCHF_FREQUENCY_8MHZ:
113 FL_RCC_RCHF_WriteTrimValue(RCHF8M_TRIM);
114 break;
115
116 case FL_RCC_RCHF_FREQUENCY_16MHZ:
117 FL_RCC_RCHF_WriteTrimValue(RCHF16M_TRIM);
118 break;
119
120 case FL_RCC_RCHF_FREQUENCY_24MHZ:
121 FL_RCC_RCHF_WriteTrimValue(RCHF24M_TRIM);
122 break;
123
124 default:
125 FL_RCC_RCHF_WriteTrimValue(RCHF8M_TRIM);
126 break;
127 }
128
129 FL_RCC_RCHF_SetFrequency(clock);
130 }
131
SelRCHFToPLL(uint32_t rchf,uint32_t clock)132 void SelRCHFToPLL(uint32_t rchf, uint32_t clock)
133 {
134 uint32_t div = FL_RCC_PLL_PSC_DIV8;
135
136 if (clock > 64)
137 {
138 return;
139 }
140
141 RCHFInit(rchf);
142
143 switch (rchf)
144 {
145 case FL_RCC_RCHF_FREQUENCY_16MHZ:
146 div = FL_RCC_PLL_PSC_DIV16;
147 break;
148
149 case FL_RCC_RCHF_FREQUENCY_24MHZ:
150 div = FL_RCC_PLL_PSC_DIV24;
151 break;
152
153 default:
154 break;
155 }
156
157 if (clock <= 24)
158 {
159 FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_0CYCLE);
160 }
161
162 else
163 {
164 if ((clock > 24) && (clock <= 48))
165 {
166 FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_1CYCLE);
167 }
168
169 else
170 {
171 FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_1CYCLE);
172 }
173 }
174
175 RCC_PLL_ConfigDomain_SYS(FL_RCC_PLL_CLK_SOURCE_RCHF, div, clock, FL_RCC_PLL_OUTPUT_X1);
176 FL_RCC_PLL_Enable();
177
178 while (FL_RCC_IsActiveFlag_PLLReady() != FL_SET);
179
180 FL_RCC_SetAHBPrescaler(FL_RCC_AHBCLK_PSC_DIV1);
181 FL_RCC_SetAPB1Prescaler(FL_RCC_APB1CLK_PSC_DIV1);
182 FL_RCC_SetAPB2Prescaler(FL_RCC_APB2CLK_PSC_DIV1);
183 FL_RCC_SetSystemClockSource(FL_RCC_SYSTEM_CLK_SOURCE_PLL);
184 }
185