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