]> begriffs open source - freertos/blob - FreeRTOS/Demo/CORTEX_R4_RM48_CCS5/startup/sys_system.c
RM48 simply blinky demo working.
[freertos] / FreeRTOS / Demo / CORTEX_R4_RM48_CCS5 / startup / sys_system.c
1 /** @file system.c \r
2 *   @brief System Driver Source File\r
3 *   @date 05.November.2010\r
4 *   @version 1.01.000\r
5 *\r
6 *   This file contains:\r
7 *   - API Funcions\r
8 *   .\r
9 *   which are relevant for the System driver.\r
10 */\r
11 \r
12 /* (c) Texas Instruments 2010, All rights reserved. */\r
13 \r
14 \r
15 /* Include Files */\r
16 \r
17 #include "sys_system.h"\r
18 \r
19 \r
20 /** @fn void systemInit(void)\r
21 *   @brief Initializes System Driver\r
22 *\r
23 *   This function initializes the System driver.\r
24 *\r
25 */\r
26 \r
27 \r
28 void systemInit(void)\r
29 {\r
30     /** @b Initialize @b Flash @b Wrapper: */\r
31 \r
32     /** - Setup flash read mode, address wait states and data wait states */\r
33     flashWREG->FRDCNTL =  0x01000000U \r
34                        | (3U << 8U) \r
35                        | (1U << 4U) \r
36                        |  1U;\r
37     /** @b Initialize @b Pll: */\r
38 \r
39     /** - Setup pll control register 1:\r
40     *     - Setup reset on oscillator slip \r
41     *     - Setup bypass on pll slip\r
42     *     - Setup Pll output clock divider\r
43     *     - Setup reset on oscillator fail\r
44     *     - Setup reference clock divider \r
45     *     - Setup Pll multiplier          \r
46     */\r
47 \r
48 #if 0\r
49     /* 180Mhz */\r
50     systemREG1->PLLCTL1 =  0x00000000U \r
51                         |  0x20000000U \r
52                         | (0U << 24U) \r
53                         |  0x00000000U \r
54                         | (5U << 16U) \r
55                         | (134U << 8U);\r
56 #endif\r
57 \r
58 #if 1\r
59     /* 160Mhz */\r
60     systemREG1->PLLCTL1 =  0x00000000U\r
61                         |  0x20000000U\r
62                         | (0U << 24U)\r
63                         |  0x00000000U\r
64                         | (5U << 16U)\r
65                         | (113U << 8U);\r
66 #endif\r
67 \r
68     /** - Setup pll control register 1 \r
69     *     - Enable/Disable frequency modulation\r
70     *     - Setup spreading rate\r
71     *     - Setup bandwidth adjustment\r
72     *     - Setup internal Pll output divider\r
73     *     - Setup spreading amount\r
74     */\r
75     systemREG1->PLLCTL2 = 0x00000000U\r
76                         | (255U << 22U)\r
77                         | (7U << 12U)\r
78                         | (1U << 9U)\r
79                         |  61U;\r
80 \r
81 \r
82     /** @b Initialize @b Clock @b Tree: */\r
83 \r
84     /** - Start clock source lock */\r
85     systemREG1->CSDISCLR = 0x00000000U\r
86                          | 0x00000000U \r
87                          | 0x00000000U \r
88                          | 0x00000000U \r
89                          | 0x00000002U; \r
90 \r
91     /** - Wait for until clocks are locked */\r
92     while ((systemREG1->CSVSTAT & 0x00000002U) == 0x00); /* wait for PLL */\r
93 \r
94     /** - Setup GCLK, HCLK and VCLK clock source for normal operation, power down mode and after wakeup */\r
95     systemREG1->GHVSRC = (SYS_PLL << 24U) \r
96                        | (SYS_PLL << 16U) \r
97                        |  SYS_PLL;\r
98 \r
99     /** - Power-up all peripharals */\r
100     pcrREG->PSPWRDWNCLR0 = 0xFFFFFFFFU;\r
101     pcrREG->PSPWRDWNCLR1 = 0xFFFFFFFFU;\r
102     pcrREG->PSPWRDWNCLR2 = 0xFFFFFFFFU;\r
103     pcrREG->PSPWRDWNCLR3 = 0xFFFFFFFFU;\r
104 \r
105     /** - Setup synchronous peripheral clock dividers for VCLK1 and VCLK2 */\r
106     systemREG1->PENA      = 0U;\r
107     systemREG1->VCLKR     = 15U;\r
108     systemREG1->VCLK2R    = 1U;\r
109     systemREG1->VCLKR     = 1U;\r
110 \r
111     systemREG2->CLK2CNTRL = (1U << 8U)\r
112                           | 1U;\r
113 \r
114     /** - Setup RTICLK1 and RTICLK2 clocks */\r
115     systemREG1->RCLKSRC = (1U << 24U)\r
116                         | (SYS_VCLK << 16U) \r
117                         | (1U << 8U)  \r
118                         |  SYS_VCLK;\r
119 \r
120     /** - Setup asynchronous peripheral clock sources for AVCLK1 and AVCLK2 */\r
121     systemREG1->VCLKASRC = (SYS_FR_PLL << 8U)\r
122                          |  SYS_VCLK;\r
123 \r
124     /** - Setup asynchronous peripheral clock sources for AVCLK3 and AVCLK4 */\r
125     systemREG2->VCLKACON1 = (0U << 24U)\r
126                           | (0U << 20U)\r
127                           | (SYS_EXTERNAL2 << 16U)\r
128                           | (3U << 8U)\r
129                           | (0U << 4U)\r
130                           |  SYS_EXTERNAL;\r
131 \r
132     /** - Enable Peripherals */\r
133     systemREG1->PENA = 1U;\r
134 \r
135     /** @note: HCLK >= VCLK2 >= VCLK_sys */\r
136 }\r
137 \r