1 /*
2 * Copyright (c) 2006-2021, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2018-02-08 RT-Thread the first version
9 */
10
rt_low_level_init(void)11 void rt_low_level_init(void)
12 {
13 volatile unsigned int *addr;
14 volatile unsigned int time;
15 int i;
16
17 //change cpu clk source to 24M
18 addr = (unsigned int *)(0x01c20000 + 0x050);
19 *addr = 0x10000;
20 //init cpu pll clk 408M
21 addr = (unsigned int *)(0x01c20000 + 0x000);
22 *addr = 0x80001000;
23 time = 0xffff;
24 while ((!(*addr & (0x1 << 28))) && (time--));
25 //change cpu clk source to pll
26 if (time > 0)
27 {
28 addr = (unsigned int *)(0x01c20000 + 0x050);
29 *addr = 0x20000;
30 }
31
32 //init periph pll clk:600M
33 //init ahb pll clk:200M
34 //init apb pll clk:100M
35 addr = (unsigned int *)(0x01c20000 + 0x028);
36 if (*addr & (0x1 << 31))
37 return;
38
39 addr = (unsigned int *)(0x01c20000 + 0x200);
40 *addr = 0x1ff;
41 addr = (unsigned int *)(0x01c20000 + 0x204);
42 *addr = 0x1ff;
43
44 addr = (unsigned int *)(0x01c20000 + 0x028);
45 *addr |= (0x1 << 31);
46 while (!(*addr & (0x1 << 28)));
47
48 addr = (unsigned int *)(0x01c20000 + 0x054);
49 *addr = (0x0 << 16) | (0x3 << 12) | (0x0 << 8) | (0x2 << 6) | (0x0 << 4);
50
51 //init gpio config
52 for (i = 0; i < 6; i++)
53 {
54 if (i == 1)
55 continue;// not config gpio B
56
57 addr = (unsigned int *)(0x01c20800 + i * 0x24 + 0x00);
58 *addr = 0x77777777;
59 addr = (unsigned int *)(0x01c20800 + i * 0x24 + 0x04);
60 *addr = 0x77777777;
61 addr = (unsigned int *)(0x01c20800 + i * 0x24 + 0x08);
62 *addr = 0x77777777;
63 addr = (unsigned int *)(0x01c20800 + i * 0x24 + 0x0C);
64 *addr = 0x77777777;
65 }
66 }
67
68