]> git.sur5r.net Git - freertos/blob - Demo/RX200_RX210-RSK_Renesas/RTOSDemo/Renesas-Files/hwsetup.c
Add an RX210 demo project.
[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 "r_ether.h"\r
45 #include "rskrx62ndef.h"\r
46 #include "hd44780.h"  /* EZ-LCD include file */\r
47 \r
48 /******************************************************************************\r
49 Typedef definitions\r
50 ******************************************************************************/\r
51 \r
52 /******************************************************************************\r
53 Macro definitions\r
54 ******************************************************************************/\r
55 \r
56 /******************************************************************************\r
57 Imported global variables and functions (from other files)\r
58 ******************************************************************************/\r
59 \r
60 /******************************************************************************\r
61 Exported global variables and functions (to be accessed by other files)\r
62 ******************************************************************************/\r
63 \r
64 /******************************************************************************\r
65 Private global variables and functions\r
66 ******************************************************************************/\r
67 void io_set_cpg(void);\r
68 void ConfigurePortPins(void);\r
69 void EnablePeripheralModules(void);\r
70 \r
71 /******************************************************************************\r
72 * Function Name: HardwareSetup\r
73 * Description  : This function does initial setting for CPG port pins used in\r
74 *              : the Demo including the MII pins of the Ethernet PHY connection.\r
75 * Arguments    : none\r
76 * Return Value : none\r
77 ******************************************************************************/\r
78 void HardwareSetup(void)\r
79 {\r
80         /* CPG setting */\r
81         io_set_cpg();\r
82 \r
83         /* Setup the port pins */\r
84         ConfigurePortPins();\r
85 \r
86     /* Enables peripherals */\r
87     EnablePeripheralModules();\r
88 \r
89 #if INCLUDE_LCD == 1\r
90     /* Initialize display */\r
91     InitialiseDisplay();\r
92 #endif\r
93 }\r
94 \r
95 /******************************************************************************\r
96 * Function Name: EnablePeripheralModules\r
97 * Description  : Enables Peripheral Modules before use\r
98 * Arguments    : none\r
99 * Return Value : none\r
100 ******************************************************************************/\r
101 void EnablePeripheralModules(void)\r
102 {\r
103         /*  Module standby clear */\r
104 //      SYSTEM.MSTPCRB.BIT.MSTPB15 = 0;                         /* EtherC, EDMAC */\r
105     SYSTEM.MSTPCRA.BIT.MSTPA15 = 0;             /* CMT0 */\r
106 }\r
107 \r
108 /******************************************************************************\r
109 * Function Name: ConfigurePortPins\r
110 * Description  : Configures port pins.\r
111 * Arguments    : none\r
112 * Return Value : none\r
113 ******************************************************************************/\r
114 void ConfigurePortPins(void)\r
115 {\r
116 /* Port pins default to inputs. To ensure safe initialisation set the pin states\r
117 before changing the data direction registers. This will avoid any unintentional\r
118 state changes on the external ports.\r
119 Many peripheral modules will override the setting of the port registers. Ensure\r
120 that the state is safe for external devices if the internal peripheral module is\r
121 disabled or powered down. */\r
122 #if(0)\r
123         /* ==== MII/RMII Pins setting ==== */\r
124         /*--------------------------------------*/\r
125         /*    Port Function Control Register    */\r
126         /*--------------------------------------*/\r
127 #if ETH_MODE_SEL == ETH_MII_MODE\r
128         /*      EE=1, PHYMODE=1, ENETE3=1, ENETE2=0, ENETE1=1, ENETE0=0 (Ethernet)      */\r
129         IOPORT.PFENET.BYTE = 0x9A;\r
130 #endif  /*      ETH_MODE_SEL    */\r
131 #if ETH_MODE_SEL == ETH_RMII_MODE\r
132         /*      EE=1, PHYMODE=0, ENETE3=0, ENETE2=0, ENETE1=1, ENETE0=0 (Ethernet)      */\r
133         IOPORT.PFENET.BYTE = 0x82;\r
134 #endif  /*      ETH_MODE_SEL    */\r
135         /*-------------------------------------------*/\r
136         /*    Input Buffer Control Register (ICR)    */\r
137         /*-------------------------------------------*/\r
138 #if ETH_MODE_SEL == ETH_MII_MODE\r
139         /*      P54=1 Set ET_LINKSTA input      */\r
140         PORT5.ICR.BIT.B4 = 1;\r
141         /*      P71=1 Set ET_MDIO input */\r
142         PORT7.ICR.BIT.B1 = 1;\r
143         /*      P74=1 Set ET_ERXD1 input        */\r
144         PORT7.ICR.BIT.B4 = 1;\r
145         /*      P75=1 Set ET_ERXD0 input        */\r
146         PORT7.ICR.BIT.B5 = 1;\r
147         /*      P76=1 Set ET_RX_CLK input       */\r
148         PORT7.ICR.BIT.B6 = 1;\r
149         /*      P77=1 Set ET_RX_ER input        */\r
150         PORT7.ICR.BIT.B7 = 1;\r
151         /*      P83=1 Set ET_CRS input  */\r
152         PORT8.ICR.BIT.B3 = 1;\r
153         /*      PC0=1 Set ET_ERXD3 input        */\r
154         PORTC.ICR.BIT.B0 = 1;\r
155         /*      PC1=1 Set ET_ERXD2 input        */\r
156         PORTC.ICR.BIT.B1 = 1;\r
157         /*      PC2=1 Set ET_RX_DV input        */\r
158         PORTC.ICR.BIT.B2 = 1;\r
159         /*      PC4=1 Set EX_TX_CLK input       */\r
160         PORTC.ICR.BIT.B4 = 1;\r
161         /*      PC7=1 Set ET_COL input  */\r
162         PORTC.ICR.BIT.B7 = 1;\r
163 #endif  /*      ETH_MODE_SEL    */\r
164 #if ETH_MODE_SEL == ETH_RMII_MODE\r
165         /*      P54=1 Set ET_LINKSTA input      */\r
166         PORT5.ICR.BIT.B4 = 1;\r
167         /*      P71=1 Set ET_MDIO input */\r
168         PORT7.ICR.BIT.B1 = 1;\r
169         /* P74=1 Set RMII_RXD1 input    */\r
170         PORT7.ICR.BIT.B4 = 1;\r
171         /* P75=1 Set RMII_RXD0 input    */\r
172         PORT7.ICR.BIT.B5 = 1;\r
173         /* P76=1 Set REF50CLK input     */\r
174         PORT7.ICR.BIT.B6 = 1;\r
175         /* P77=1 Set RMII_RX_ER input   */\r
176         PORT7.ICR.BIT.B7 = 1;\r
177         /* P83=1 Set RMII_CRS_DV input  */\r
178         PORT8.ICR.BIT.B3 = 1;\r
179 #endif  /*      ETH_MODE_SEL    */\r
180 #endif\r
181     /* Configure LED 0-4 pin settings */\r
182     PORT1.PODR.BIT.B4 = 1; \r
183     PORT1.PODR.BIT.B5 = 1;\r
184     PORT1.PODR.BIT.B6 = 1;\r
185     PORT1.PODR.BIT.B7 = 1;\r
186 \r
187     PORT1.PDR.BIT.B4 = 1; \r
188     PORT1.PDR.BIT.B5 = 1;\r
189     PORT1.PDR.BIT.B6 = 1;\r
190     PORT1.PDR.BIT.B7 = 1;\r
191 \r
192    \r
193 \r
194 \r
195 #if INCLUDE_LCD == 1\r
196     /* Set LCD pins as outputs */\r
197     /* LCD-RS */\r
198     PORTJ.PDR.BIT.B1 = 1;\r
199     /* LCD-EN */\r
200     PORTJ.PDR.BIT.B3 = 1;\r
201     /*LCD-data */\r
202     PORTH.PDR.BYTE = 0x0F;\r
203 #endif\r
204 }\r
205 \r
206 /******************************************************************************\r
207 * Function Name: io_set_cpg\r
208 * Description  : Sets up operating speed\r
209 * Arguments    : none\r
210 * Return Value : none\r
211 ******************************************************************************/\r
212 void io_set_cpg(void)\r
213 {\r
214 /* Set CPU PLL operating frequencies. Changes to the peripheral clock will require\r
215 changes to the debugger and flash kernel BRR settings. */\r
216 \r
217         /* ==== CPG setting ==== */\r
218 //      SYSTEM.SCKCR.LONG = 0x00020100; /* Clockin = 12MHz */\r
219 //                                                                      /* I Clock = 96MHz, B Clock = 24MHz, */\r
220 //                                                                      /* P Clock = 48MHz */\r
221 \r
222         unsigned int i;\r
223 \r
224         SYSTEM.PRCR.WORD = 0xA503;                                              /* Protect on */\r
225 \r
226 //      SYSTEM.SOSCCR.BYTE = 0x01;                              /* stop sub-clock */\r
227                                                 /* delete when you use sub-clock */\r
228         \r
229 //      SYSTEM.HOCOPCR.BYTE = 0x01;                             /* HOCO power supply off */\r
230                                                 /* delete when you use HOCO */\r
231 \r
232         SYSTEM.MOSCWTCR.BYTE = 0x0D;                    /* 131072 state */\r
233                                                                                         /* wait over 10ms  @12.5MHz */\r
234 \r
235         SYSTEM.PLLWTCR.BYTE = 0x0E;                             /* 2097152 state */\r
236                                                 /* wait over 12ms  @PLL=100MHz(12.5MHz*8) */\r
237         \r
238 //      SYSTEM.PLLCR.WORD = 0x0902;                             /* x10 @PLL */\r
239                                                                                         /* Input to PLL (EXTAL in) / 2 */\r
240         \r
241 //      SYSTEM.MOSCCR.BYTE = 0x02;                              /* EXTAL ON */\r
242                                                                                         /* External oscillation input selection */\r
243 //      SYSTEM.PLLCR2.BYTE = 0x00;                              /* PLL ON */\r
244         \r
245 //      for(i = 0;i< 0x168;i++)                         /* wait over 12ms */\r
246 //      {\r
247 //  }\r
248         \r
249 //      SYSTEM.SCKCR.LONG = 0x21022222;                 /* ICK=PLL/2,FCK,PCK,BCL=PLL/4 */\r
250 //      SYSTEM.SCKCR3.WORD = 0x0400;                    /* LOCO -> PLL */\r
251 \r
252     \r
253     /*************************************************************************/\r
254     /* Using HOCO set to 50MHz to run device                                 */ \r
255     /* ICLK = 50MHz                                                          */ \r
256     /* PCLKD (12ADC) = 50MHz                                                 */ \r
257     /* All other clocks = CLK / 2 = 25MHz                                    */ \r
258     /*************************************************************************/\r
259     \r
260     SYSTEM.HOCOCR2.BYTE = 0x03;                     /* 50MHz        */\r
261     SYSTEM.SCKCR.LONG = 0x10811110;                     \r
262     SYSTEM.SCKCR3.WORD = 0x0100;                        /* LOCO -> HOCO */\r
263 }\r
264 \r