blob: 2ef0f8cb45e25f9d78628760816823fc7b64f113 [file] [log] [blame]
/*******************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only
* intended for use with Renesas products. No other uses are authorized. This
* software is owned by Renesas Electronics Corporation 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
* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
* ANY REASON RELATED TO 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
*******************************************************************************/
/*
* cgc.c
*
* Created on: 01 Oct 2011
* Author: RJW
* Reneses Electronics Europe Ltd
*/
/******************************************************************************
System Includes
******************************************************************************/
/******************************************************************************
User Includes
******************************************************************************/
#include "iodefine.h"
#include "cgc.h"
/*****************************************************************************/
/* */
/* Configure the CGC (Clock Generation Circuit) of the RX630 using the */
/* using the 7 STEPS specified in cgc.h */
/* */
/*****************************************************************************/
/******************************************************************************
Function : InitCGC
Description : Initialises the CGC registers based upon the settings
made in file cgc.h
Argument : none
Return value : none
******************************************************************************/
void InitCGC(void)
{
unsigned long i;
#if (ENABLE_SUB)
SYSTEM.SOSCCR.BYTE = 0x00; /* Sub-clock oscillator ON */
#else
SYSTEM.SOSCCR.BYTE = 0x01; /* Sub-clock oscillator OFF */
#endif
#if (ENABLE_HOCO)
SYSTEM.HOCOPCR.BYTE = 0x00; /* HOCO PSU ON */
SYSTEM.HOCOCR.BYTE = 0x00; /* HOCO ON */
#else
SYSTEM.HOCOPCR.BYTE = 0x01; /* HOCO PSU OFF */
SYSTEM.HOCOCR.BYTE = 0x01; /* HOCO OFF */
#endif
#if (ENABLE_MAIN)
SYSTEM.MOSCWTCR.BYTE = 0x0e; /* Main Clock Oscillator Wait Control Register */
/* 262144 states */
SYSTEM.MOSCCR.BYTE = 0x00; /* EXTAL ON */
#else
SYSTEM.MOSCCR.BYTE = 0x01; /* EXTAL OFF */
#endif
#if (ENABLE_PLL)
SYSTEM.MOSCWTCR.BYTE = 0x0e; /* Main Clock Oscillator Wait Control Register */
/* 262144 states */
SYSTEM.MOSCCR.BYTE = 0x00; /* EXTAL ON */
SYSTEM.PLLWTCR.BYTE = 0x0e; /* PLL Wait Control Register */
/* 2097152 states */
SYSTEM.PLLCR2.BYTE = 0x01; /* PLL OFF */
#if (PLL_INPUT_FREQ_DIV == 1)
SYSTEM.PLLCR.BIT.PLIDIV = 0;
#elif (PLL_INPUT_FREQ_DIV == 2)
SYSTEM.PLLCR.BIT.PLIDIV = 1;
#elif (PLL_INPUT_FREQ_DIV == 4)
SYSTEM.PLLCR.BIT.PLIDIV = 2;
#else
SYSTEM.PLLCR.BIT.PLIDIV = 0;
#endif
SYSTEM.PLLCR.BIT.STC = (PLL_MUL - 1);
/* External oscillation input selection */
SYSTEM.PLLCR2.BYTE = 0x00; /* PLL ON */
#else
SYSTEM.PLLCR2.BYTE = 0x01; /* PLL OFF */
#endif
for(i = 0; i<2500; i++) /* Wait for stabilisation of */
{ /* HOCO, LOCO, PLL and main clock */
} /* = 20ms */
/* (2500 x 1/125kHz = 20ms) */
SYSTEM.SCKCR.LONG = FCLK_SCKCR |
ICLK_SCKCR |
PSTOP1_SCKCR |
BCLK_SCKCR |
PCLK1215_SCKCR |
PCLKB_SCKCR |
PCLK47_SCKCR |
PCLK03_SCKCR ;
SYSTEM.SCKCR2.WORD = UCK_SCKCR2 |
IEBCK_SCKCR2 ;
SYSTEM.SCKCR3.WORD = CLK_SOURCE;
}