]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_R4_RM48_TMS570_CCS5/startup/sys_system.c
Slow configured clock in the RM48 and TMS570 demos to 50MHz.
[freertos] / FreeRTOS / Demo / CORTEX_R4_RM48_TMS570_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 #define startupCPU_100MHZ 1\r
20 \r
21 void systemInit(void)\r
22 {\r
23     /** @b Initialize @b Flash @b Wrapper: */\r
24 \r
25     /** - Setup flash read mode, address wait states and data wait states */\r
26 #if     startupCPU_100MHZ == 1\r
27         /* 100MHz */\r
28     flashWREG->FRDCNTL =  0x01000000U\r
29                        | (2U << 8U)\r
30                        | (0U << 4U)\r
31                        |  1U;\r
32 #else\r
33     /* 180MHz */\r
34     flashWREG->FRDCNTL =  0x01000000U \r
35                        | (3U << 8U) \r
36                        | (1U << 4U) \r
37                        |  1U;\r
38 #endif\r
39 \r
40 #if 0\r
41     /** - Setup flash bank power modes */\r
42     flashWREG->FBFALLBACK = 0x05050000\r
43                           | (SYS_ACTIVE << 14U)\r
44                           | (SYS_SLEEP << 12U)\r
45                           | (SYS_SLEEP << 10U)\r
46                           | (SYS_SLEEP << 8U)\r
47                           | (SYS_SLEEP << 6U)\r
48                           | (SYS_SLEEP << 4U)\r
49                           | (SYS_ACTIVE << 2U)\r
50                           |  SYS_ACTIVE;\r
51 \r
52     /** @b Initialize @b Lpo: */\r
53     {\r
54         unsigned trim = *(volatile unsigned short *)0xF00801B4;\r
55 \r
56         if (trim != 0xFFFF)\r
57         {\r
58             systemREG1->LPOMONCTL = (1U << 24U)\r
59                                   | (0U << 16U)\r
60                                   | trim;\r
61         }\r
62         else\r
63         {\r
64             systemREG1->LPOMONCTL = (1U << 24U)\r
65                                   | (0U << 16U)\r
66                                   | (systemREG1->LPOMONCTL & 0xFFFF);\r
67         }\r
68     }\r
69 #endif\r
70 \r
71     /** @b Initialize @b Pll: */\r
72 \r
73     /** - Setup pll control register 1:\r
74     *     - Setup reset on oscillator slip \r
75     *     - Setup bypass on pll slip\r
76     *     - Setup Pll output clock divider\r
77     *     - Setup reset on oscillator fail\r
78     *     - Setup reference clock divider \r
79     *     - Setup Pll multiplier          \r
80     */\r
81 \r
82 #if     startupCPU_100MHZ == 1\r
83         /* 100MHz */\r
84     systemREG1->PLLCTL1 =  0x00000000U\r
85                         |  0x20000000U\r
86                         | (0U << 24U)\r
87                         |  0x00000000U\r
88                         | (5U << 16U)\r
89                         | (74U << 8U);\r
90 #else\r
91     /* 180Mhz */\r
92     systemREG1->PLLCTL1 =  0x00000000U \r
93                         |  0x20000000U \r
94                         | (0U << 24U) \r
95                         |  0x00000000U \r
96                         | (5U << 16U) \r
97                         | (134U << 8U);\r
98 #endif\r
99 \r
100     /** - Setup pll control register 1 \r
101     *     - Enable/Disable frequency modulation\r
102     *     - Setup spreading rate\r
103     *     - Setup bandwidth adjustment\r
104     *     - Setup internal Pll output divider\r
105     *     - Setup spreading amount\r
106     */\r
107     systemREG1->PLLCTL2 = 0x00000000U\r
108                         | (255U << 22U)\r
109                         | (7U << 12U)\r
110                         | (1U << 9U)\r
111                         |  61U;\r
112 \r
113     /** @b Initialize @b Clock @b Tree: */\r
114 \r
115     /** - Start clock source lock */\r
116     systemREG1->CSDISCLR = 0x00000000U\r
117                          | 0x00000000U \r
118                          | 0x00000000U \r
119                          | 0x00000000U \r
120                          | 0x00000002U; \r
121 \r
122     /** - Wait for until clocks are locked */\r
123     while ((systemREG1->CSVSTAT & 0x00000002U) == 0x00); /* wait for PLL */\r
124 \r
125     /** - Setup GCLK, HCLK and VCLK clock source for normal operation, power down mode and after wakeup */\r
126     systemREG1->GHVSRC = (SYS_PLL << 24U) \r
127                        | (SYS_PLL << 16U) \r
128                        |  SYS_PLL;\r
129 \r
130     /** - Power-up all peripharals */\r
131     pcrREG->PSPWRDWNCLR0 = 0xFFFFFFFFU;\r
132     pcrREG->PSPWRDWNCLR1 = 0xFFFFFFFFU;\r
133     pcrREG->PSPWRDWNCLR2 = 0xFFFFFFFFU;\r
134     pcrREG->PSPWRDWNCLR3 = 0xFFFFFFFFU;\r
135 \r
136     /** - Setup synchronous peripheral clock dividers for VCLK1 and VCLK2 */\r
137     systemREG1->PENA      = 0U;\r
138     systemREG1->VCLKR     = 15U;\r
139     systemREG1->VCLK2R    = 1U;\r
140     systemREG1->VCLKR     = 1U;\r
141 \r
142     systemREG2->CLK2CNTRL = (1U << 8U)\r
143                           | 1U;\r
144 \r
145     /** - Setup RTICLK1 and RTICLK2 clocks */\r
146     /* 90MHz (180Mhz/2) */\r
147     systemREG1->RCLKSRC = (1U << 24U)\r
148                         | (SYS_VCLK << 16U)\r
149                         | (1U << 8U)  \r
150                         |  SYS_VCLK;\r
151 \r
152 #if 0\r
153     /** - Setup asynchronous peripheral clock sources for AVCLK1 and AVCLK2 */\r
154     systemREG1->VCLKASRC = (SYS_FR_PLL << 8U)\r
155                          |  SYS_VCLK;\r
156 \r
157     /** - Setup asynchronous peripheral clock sources for AVCLK3 and AVCLK4 */\r
158     systemREG2->VCLKACON1 = (0U << 24U)\r
159                           | (0U << 20U)\r
160                           | (SYS_EXTERNAL2 << 16U)\r
161                           | (3U << 8U)\r
162                           | (0U << 4U)\r
163                           |  SYS_EXTERNAL;\r
164 #endif\r
165 \r
166     /** - Enable Peripherals */\r
167     systemREG1->PENA = 1U;\r
168 \r
169     /** @note: HCLK >= VCLK2 >= VCLK_sys */\r
170 }\r
171 \r