| /****************************************************************************** | |
| * DISCLAIMER | |
| * This software is supplied by Renesas Technology Corp. and is only | |
| * intended for use with Renesas products. No other uses are authorized. | |
| * This software is owned by Renesas Technology Corp. and is protected under | |
| * all applicable laws, including copyright laws. | |
| * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES | |
| * REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, | |
| * INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A | |
| * PARTICULAR PURPOSE AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY | |
| * DISCLAIMED. | |
| * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS | |
| * TECHNOLOGY CORP. NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE | |
| * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES | |
| * FOR ANY REASON RELATED TO THE THIS SOFTWARE, EVEN IF RENESAS OR ITS | |
| * AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. | |
| * Renesas reserves the right, without notice, to make changes to this | |
| * software and to discontinue the availability of this software. | |
| * By using this software, you agree to the additional terms and | |
| * conditions found by accessing the following link: | |
| * http://www.renesas.com/disclaimer | |
| ****************************************************************************** | |
| * Copyright (C) 2008. Renesas Technology Corp., All Rights Reserved. | |
| ******************************************************************************* | |
| * File Name : hwsetup.c | |
| * Version : 1.00 | |
| * Description : Power up hardware initializations | |
| ****************************************************************************** | |
| * History : DD.MM.YYYY Version Description | |
| * : 15.02.2010 1.00 First Release | |
| ******************************************************************************/ | |
| /****************************************************************************** | |
| Includes <System Includes> , "Project Includes" | |
| ******************************************************************************/ | |
| #include <stdint.h> | |
| #include "iodefine.h" | |
| #include "rskrx210def.h" | |
| #include "hd44780.h" /* EZ-LCD include file */ | |
| /****************************************************************************** | |
| Typedef definitions | |
| ******************************************************************************/ | |
| /****************************************************************************** | |
| Macro definitions | |
| ******************************************************************************/ | |
| /****************************************************************************** | |
| Imported global variables and functions (from other files) | |
| ******************************************************************************/ | |
| /****************************************************************************** | |
| Exported global variables and functions (to be accessed by other files) | |
| ******************************************************************************/ | |
| /****************************************************************************** | |
| Private global variables and functions | |
| ******************************************************************************/ | |
| void io_set_cpg(void); | |
| void ConfigurePortPins(void); | |
| void EnablePeripheralModules(void); | |
| /****************************************************************************** | |
| * Function Name: HardwareSetup | |
| * Description : This function does initial setting for CPG port pins used in | |
| * : the Demo including the MII pins of the Ethernet PHY connection. | |
| * Arguments : none | |
| * Return Value : none | |
| ******************************************************************************/ | |
| void HardwareSetup(void) | |
| { | |
| /* CPG setting */ | |
| io_set_cpg(); | |
| /* Setup the port pins */ | |
| ConfigurePortPins(); | |
| /* Enables peripherals */ | |
| EnablePeripheralModules(); | |
| #if INCLUDE_LCD == 1 | |
| /* Initialize display */ | |
| InitialiseDisplay(); | |
| #endif | |
| } | |
| /****************************************************************************** | |
| * Function Name: EnablePeripheralModules | |
| * Description : Enables Peripheral Modules before use | |
| * Arguments : none | |
| * Return Value : none | |
| ******************************************************************************/ | |
| void EnablePeripheralModules(void) | |
| { | |
| /* Module standby clear */ | |
| SYSTEM.MSTPCRA.BIT.MSTPA15 = 0; /* CMT0 */ | |
| } | |
| /****************************************************************************** | |
| * Function Name: ConfigurePortPins | |
| * Description : Configures port pins. | |
| * Arguments : none | |
| * Return Value : none | |
| ******************************************************************************/ | |
| void ConfigurePortPins(void) | |
| { | |
| /* Port pins default to inputs. To ensure safe initialisation set the pin states | |
| before changing the data direction registers. This will avoid any unintentional | |
| state changes on the external ports. | |
| Many peripheral modules will override the setting of the port registers. Ensure | |
| that the state is safe for external devices if the internal peripheral module is | |
| disabled or powered down. */ | |
| /* Configure LED 0-4 pin settings */ | |
| PORT1.PODR.BIT.B4 = 1; | |
| PORT1.PODR.BIT.B5 = 1; | |
| PORT1.PODR.BIT.B6 = 1; | |
| PORT1.PODR.BIT.B7 = 1; | |
| PORT1.PDR.BIT.B4 = 1; | |
| PORT1.PDR.BIT.B5 = 1; | |
| PORT1.PDR.BIT.B6 = 1; | |
| PORT1.PDR.BIT.B7 = 1; | |
| #if INCLUDE_LCD == 1 | |
| /* Set LCD pins as outputs */ | |
| /* LCD-RS */ | |
| PORTJ.PDR.BIT.B1 = 1; | |
| /* LCD-EN */ | |
| PORTJ.PDR.BIT.B3 = 1; | |
| /*LCD-data */ | |
| PORTH.PDR.BYTE = 0x0F; | |
| #endif | |
| } | |
| /****************************************************************************** | |
| * Function Name: io_set_cpg | |
| * Description : Sets up operating speed | |
| * Arguments : none | |
| * Return Value : none | |
| ******************************************************************************/ | |
| void io_set_cpg(void) | |
| { | |
| /* Set CPU PLL operating frequencies. Changes to the peripheral clock will require | |
| changes to the debugger and flash kernel BRR settings. */ | |
| /* ==== CPG setting ==== */ | |
| unsigned int i; | |
| SYSTEM.PRCR.WORD = 0xA503; /* Protect off */ | |
| #if (CLK_SRC_HOCO == 1) | |
| SYSTEM.HOCOPCR.BYTE = 0x00; /* HOCO power supply on */ | |
| SYSTEM.HOCOCR2.BYTE = 0x03; /* Select - 50MHz */ | |
| SYSTEM.HOCOCR.BYTE = 0x01; /* HOCO is operating */ | |
| for(i=0; i<10; i++){ /* wait over 60us */ | |
| } | |
| #else | |
| SYSTEM.MOSCWTCR.BYTE = 0x0C; /* Main Clock Oscillator Wait Control Register */ | |
| /* 65536 states */ | |
| /* wait over 2 ms @20MHz */ | |
| SYSTEM.PLLWTCR.BYTE = 0x0B; /* PLL Wait Control Register */ | |
| /* 262144 states */ | |
| /* wait over 2.1 ms @PLL = 80Hz */ | |
| /* (20/2x8*8) */ | |
| SYSTEM.PLLCR.WORD = 0x0701; /* x8 @PLL */ | |
| /* Input to PLL (EXTAL in) / 2 */ | |
| /* Therefore: | |
| PLL = EXTAL / 2 | |
| = 20M / 2 | |
| = 10MHz | |
| PLL * 8 = 80Mhz */ | |
| SYSTEM.MOSCCR.BYTE = 0x02; /* EXTAL ON */ | |
| /* External oscillation input selection */ | |
| SYSTEM.PLLCR2.BYTE = 0x00; /* PLL ON */ | |
| for(i = 0; i<263; i++){ /* wait over 2.1ms */ | |
| } | |
| #endif | |
| // SYSTEM.SCKCR.LONG = 0x21823333; /* ICK=PLL/2,FCK,PCK,BCL=PLL/4 */ | |
| /************************************************************************/ | |
| /* If setting bits individually, rather than a single long write, */ | |
| /* set the BCK value before that of ICK */ | |
| /************************************************************************/ | |
| SYSTEM.SCKCR.BIT.PCKD = 3; /* PLL/8 = 10MHz */ | |
| SYSTEM.SCKCR.BIT.PCKC = 3; /* PLL/8 = 10MHz */ | |
| SYSTEM.SCKCR.BIT.PCKB = 3; /* PLL/8 = 10MHz */ | |
| SYSTEM.SCKCR.BIT.PCKA = 3; /* PLL/8 = 10MHz */ | |
| SYSTEM.SCKCR.BIT.BCK = 3; /* PLL/8 = 10MHz */ | |
| SYSTEM.SCKCR.BIT.PSTOP1 = 1; /* BUS CLK OUT Disabled */ | |
| SYSTEM.SCKCR.BIT.ICK = 1; /* PLL/2 = 40MHz */ | |
| SYSTEM.SCKCR.BIT.FCK = 2; /* PLL/4 = 20MHz */ | |
| while(SYSTEM.OPCCR.BIT.OPCMTSF == 1); | |
| SYSTEM.OPCCR.BIT.OLPCM = 0; | |
| while(SYSTEM.OPCCR.BIT.OPCMTSF == 1); | |
| #if (CLK_SRC_HOCO == 1) | |
| SYSTEM.SCKCR3.WORD = 0x0100; /* LOCO -> HOCO */ | |
| #else | |
| SYSTEM.SCKCR3.WORD = 0x0400; /* LOCO -> PLL */ | |
| #endif | |
| } |