]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RX200_RX210-RSK_Renesas/RTOSDemo/Renesas-Files/hwsetup.c
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / RX200_RX210-RSK_Renesas / RTOSDemo / Renesas-Files / hwsetup.c
1 /******************************************************************************\r
2 * DISCLAIMER\r
3 \r
4 * This software is supplied by Renesas Technology Corp. and is only \r
5 * intended for use with Renesas products. No other uses are authorized.\r
6 \r
7 * This software is owned by Renesas Technology Corp. and is protected under \r
8 * all applicable laws, including copyright laws.\r
9 \r
10 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES\r
11 * REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, \r
12 * INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A \r
13 * PARTICULAR PURPOSE AND NON-INFRINGEMENT.  ALL SUCH WARRANTIES ARE EXPRESSLY \r
14 * DISCLAIMED.\r
15 \r
16 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS \r
17 * TECHNOLOGY CORP. NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE \r
18 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES \r
19 * FOR ANY REASON RELATED TO THE THIS SOFTWARE, EVEN IF RENESAS OR ITS \r
20 * AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
21 \r
22 * Renesas reserves the right, without notice, to make changes to this \r
23 * software and to discontinue the availability of this software.  \r
24 * By using this software, you agree to the additional terms and \r
25 * conditions found by accessing the following link:\r
26 * http://www.renesas.com/disclaimer\r
27 ******************************************************************************\r
28 * Copyright (C) 2008. Renesas Technology Corp., All Rights Reserved.\r
29 ******************************************************************************* \r
30 * File Name    : hwsetup.c\r
31 * Version      : 1.00\r
32 * Description  : Power up hardware initializations\r
33 ******************************************************************************\r
34 * History : DD.MM.YYYY Version Description\r
35 *         : 15.02.2010 1.00    First Release\r
36 ******************************************************************************/\r
37 \r
38 \r
39 /******************************************************************************\r
40 Includes   <System Includes> , "Project Includes"\r
41 ******************************************************************************/\r
42 #include <stdint.h>\r
43 #include "iodefine.h"\r
44 #include "rskrx210def.h"\r
45 #include "hd44780.h"  /* EZ-LCD include file */\r
46 \r
47 /******************************************************************************\r
48 Typedef definitions\r
49 ******************************************************************************/\r
50 \r
51 /******************************************************************************\r
52 Macro definitions\r
53 ******************************************************************************/\r
54 \r
55 /******************************************************************************\r
56 Imported global variables and functions (from other files)\r
57 ******************************************************************************/\r
58 \r
59 /******************************************************************************\r
60 Exported global variables and functions (to be accessed by other files)\r
61 ******************************************************************************/\r
62 \r
63 /******************************************************************************\r
64 Private global variables and functions\r
65 ******************************************************************************/\r
66 void io_set_cpg(void);\r
67 void ConfigurePortPins(void);\r
68 void EnablePeripheralModules(void);\r
69 \r
70 /******************************************************************************\r
71 * Function Name: HardwareSetup\r
72 * Description  : This function does initial setting for CPG port pins used in\r
73 *              : the Demo including the MII pins of the Ethernet PHY connection.\r
74 * Arguments    : none\r
75 * Return Value : none\r
76 ******************************************************************************/\r
77 void HardwareSetup(void)\r
78 {\r
79         /* CPG setting */\r
80         io_set_cpg();\r
81 \r
82         /* Setup the port pins */\r
83         ConfigurePortPins();\r
84 \r
85     /* Enables peripherals */\r
86     EnablePeripheralModules();\r
87 \r
88 #if INCLUDE_LCD == 1\r
89     /* Initialize display */\r
90     InitialiseDisplay();\r
91 #endif\r
92 }\r
93 \r
94 /******************************************************************************\r
95 * Function Name: EnablePeripheralModules\r
96 * Description  : Enables Peripheral Modules before use\r
97 * Arguments    : none\r
98 * Return Value : none\r
99 ******************************************************************************/\r
100 void EnablePeripheralModules(void)\r
101 {\r
102         /*  Module standby clear */\r
103     SYSTEM.MSTPCRA.BIT.MSTPA15 = 0;             /* CMT0 */\r
104 }\r
105 \r
106 /******************************************************************************\r
107 * Function Name: ConfigurePortPins\r
108 * Description  : Configures port pins.\r
109 * Arguments    : none\r
110 * Return Value : none\r
111 ******************************************************************************/\r
112 void ConfigurePortPins(void)\r
113 {\r
114 /* Port pins default to inputs. To ensure safe initialisation set the pin states\r
115 before changing the data direction registers. This will avoid any unintentional\r
116 state changes on the external ports.\r
117 Many peripheral modules will override the setting of the port registers. Ensure\r
118 that the state is safe for external devices if the internal peripheral module is\r
119 disabled or powered down. */\r
120     /* Configure LED 0-4 pin settings */\r
121     PORT1.PODR.BIT.B4 = 1; \r
122     PORT1.PODR.BIT.B5 = 1;\r
123     PORT1.PODR.BIT.B6 = 1;\r
124     PORT1.PODR.BIT.B7 = 1;\r
125 \r
126     PORT1.PDR.BIT.B4 = 1; \r
127     PORT1.PDR.BIT.B5 = 1;\r
128     PORT1.PDR.BIT.B6 = 1;\r
129     PORT1.PDR.BIT.B7 = 1;\r
130 \r
131    \r
132 \r
133 \r
134 #if INCLUDE_LCD == 1\r
135     /* Set LCD pins as outputs */\r
136     /* LCD-RS */\r
137     PORTJ.PDR.BIT.B1 = 1;\r
138     /* LCD-EN */\r
139     PORTJ.PDR.BIT.B3 = 1;\r
140     /*LCD-data */\r
141     PORTH.PDR.BYTE = 0x0F;\r
142 #endif\r
143 }\r
144 \r
145 /******************************************************************************\r
146 * Function Name: io_set_cpg\r
147 * Description  : Sets up operating speed\r
148 * Arguments    : none\r
149 * Return Value : none\r
150 ******************************************************************************/\r
151 void io_set_cpg(void)\r
152 {\r
153 /* Set CPU PLL operating frequencies. Changes to the peripheral clock will require\r
154 changes to the debugger and flash kernel BRR settings. */\r
155 \r
156         /* ==== CPG setting ==== */\r
157 \r
158         unsigned int i;\r
159 \r
160         SYSTEM.PRCR.WORD = 0xA503;                              /* Protect off                                          */\r
161 \r
162 #if (CLK_SRC_HOCO == 1) \r
163         SYSTEM.HOCOPCR.BYTE = 0x00;                             /* HOCO power supply on */\r
164         SYSTEM.HOCOCR2.BYTE = 0x03;                             /* Select - 50MHz */\r
165         SYSTEM.HOCOCR.BYTE  = 0x01;                             /* HOCO is operating */\r
166 \r
167         for(i=0; i<10; i++){                                    /* wait over 60us */\r
168         }\r
169 #else\r
170         SYSTEM.MOSCWTCR.BYTE = 0x0C;                    /* Main Clock Oscillator Wait Control Register */\r
171                                                                                         /* 65536 states                                         */\r
172                                                                                         /* wait over 2 ms  @20MHz                       */\r
173 \r
174         SYSTEM.PLLWTCR.BYTE = 0x0B;                             /* PLL Wait Control Register            */\r
175                                                                                         /* 262144 states                                        */\r
176                                                                                         /* wait over 2.1 ms  @PLL = 80Hz        */\r
177                                                                                         /*                                      (20/2x8*8)              */\r
178         \r
179         SYSTEM.PLLCR.WORD = 0x0701;                             /* x8 @PLL                                                      */\r
180                                                                                         /* Input to PLL (EXTAL in) / 2          */\r
181                                                                                         /* Therefore: \r
182                                                                                                         PLL = EXTAL / 2         \r
183                                                                                                                 = 20M / 2\r
184                                                                                                                 = 10MHz                                                                                                         \r
185                                                                                                 PLL * 8 = 80Mhz                                 */      \r
186         \r
187         SYSTEM.MOSCCR.BYTE = 0x02;                              /* EXTAL ON */\r
188                                                                                         /* External oscillation input selection */\r
189         SYSTEM.PLLCR2.BYTE = 0x00;                              /* PLL ON */\r
190         \r
191         for(i = 0; i<263; i++){                                 /* wait over 2.1ms */\r
192         }\r
193 #endif\r
194         \r
195 //      SYSTEM.SCKCR.LONG = 0x21823333;                 /* ICK=PLL/2,FCK,PCK,BCL=PLL/4 */\r
196 /************************************************************************/\r
197 /*  If setting bits individually, rather than a single long write,              */\r
198 /*      set the BCK value before that of ICK                                                            */\r
199 /************************************************************************/\r
200         SYSTEM.SCKCR.BIT.PCKD   = 3;                    /* PLL/8 = 10MHz                */\r
201         SYSTEM.SCKCR.BIT.PCKC   = 3;                    /* PLL/8 = 10MHz                */      \r
202         SYSTEM.SCKCR.BIT.PCKB   = 3;                    /* PLL/8 = 10MHz                */\r
203         SYSTEM.SCKCR.BIT.PCKA   = 3;                    /* PLL/8 = 10MHz                */\r
204         SYSTEM.SCKCR.BIT.BCK    = 3;                    /* PLL/8 = 10MHz                */\r
205         SYSTEM.SCKCR.BIT.PSTOP1 = 1;                    /* BUS CLK OUT Disabled */\r
206         SYSTEM.SCKCR.BIT.ICK    = 1;                    /* PLL/2 = 40MHz                */\r
207         SYSTEM.SCKCR.BIT.FCK    = 2;                    /* PLL/4 = 20MHz                */\r
208 \r
209         while(SYSTEM.OPCCR.BIT.OPCMTSF == 1);\r
210         SYSTEM.OPCCR.BIT.OLPCM = 0;\r
211         while(SYSTEM.OPCCR.BIT.OPCMTSF == 1);\r
212 #if (CLK_SRC_HOCO == 1) \r
213         SYSTEM.SCKCR3.WORD = 0x0100;                    /* LOCO -> HOCO */\r
214 #else\r
215         SYSTEM.SCKCR3.WORD = 0x0400;                    /* LOCO -> PLL */\r
216 #endif\r
217 }\r