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