mirror of https://github.com/ARMmbed/mbed-os.git
105 lines
3.1 KiB
C
105 lines
3.1 KiB
C
|
/**************************************************************************//**
|
||
|
* @file system_CMSDK_CM0.c
|
||
|
* @brief CMSIS Cortex-M0 Device Peripheral Access Layer Source File for
|
||
|
* Device CMSDK
|
||
|
* @version V3.01
|
||
|
* @date 06. March 2012
|
||
|
*
|
||
|
* @note
|
||
|
* Copyright (C) 2010-2012 ARM Limited. All rights reserved.
|
||
|
*
|
||
|
* @par
|
||
|
* ARM Limited (ARM) is supplying this software for use with Cortex-M
|
||
|
* processor based microcontrollers. This file can be freely distributed
|
||
|
* within development tools that are supporting such ARM based processors.
|
||
|
*
|
||
|
* @par
|
||
|
* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
|
||
|
* OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
|
||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
|
||
|
* ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
|
||
|
* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
|
||
|
|
||
|
#include "system_W7500x.h"
|
||
|
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
DEFINES
|
||
|
*----------------------------------------------------------------------------*/
|
||
|
//#define SYSCLK_EXTERN_OSC
|
||
|
|
||
|
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
Clock Variable definitions
|
||
|
*----------------------------------------------------------------------------*/
|
||
|
uint32_t SystemFrequency = 0; /*!< System Clock Frequency (Core Clock) */
|
||
|
uint32_t SystemCoreClock = 0; /*!< Processor Clock Frequency */
|
||
|
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
Clock functions
|
||
|
*----------------------------------------------------------------------------*/
|
||
|
void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */
|
||
|
{
|
||
|
uint8_t M,N,OD;
|
||
|
|
||
|
#ifdef SYSCLK_EXTERN_OSC
|
||
|
CRG->PLL_IFSR = CRG_PLL_IFSR_OCLK;
|
||
|
#else
|
||
|
CRG->PLL_IFSR = CRG_PLL_IFSR_RCLK;
|
||
|
#endif
|
||
|
OD = (1 << (CRG->PLL_FCR & 0x01)) * (1 << ((CRG->PLL_FCR & 0x02) >> 1));
|
||
|
N = (CRG->PLL_FCR >> 8 ) & 0x3F;
|
||
|
M = (CRG->PLL_FCR >> 16) & 0x3F;
|
||
|
|
||
|
#ifdef SYSCLK_EXTERN_OSC
|
||
|
SystemCoreClock = EXTERN_XTAL * M / N * 1 / OD;
|
||
|
#else
|
||
|
SystemCoreClock = INTERN_XTAL * M / N * 1 / OD;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
uint32_t GetSystemClock()
|
||
|
{
|
||
|
return SystemCoreClock;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Initialize the system
|
||
|
*
|
||
|
* @param none
|
||
|
* @return none
|
||
|
*
|
||
|
* @brief Setup the microcontroller system.
|
||
|
* Initialize the System.
|
||
|
*/
|
||
|
void SystemInit (void)
|
||
|
{
|
||
|
uint8_t M,N,OD;
|
||
|
|
||
|
(*((volatile uint32_t *)(W7500x_TRIM_BGT))) = (*((volatile uint32_t *)(W7500x_INFO_BGT)));
|
||
|
(*((volatile uint32_t *)(W7500x_TRIM_OSC))) = (*((volatile uint32_t *)(W7500x_INFO_OSC)));
|
||
|
|
||
|
|
||
|
// Set PLL input frequency
|
||
|
#ifdef SYSCLK_EXTERN_OSC
|
||
|
CRG->PLL_IFSR = CRG_PLL_IFSR_OCLK;
|
||
|
#else
|
||
|
CRG->PLL_IFSR = CRG_PLL_IFSR_RCLK;
|
||
|
#endif
|
||
|
OD = (1 << (CRG->PLL_FCR & 0x01)) * (1 << ((CRG->PLL_FCR & 0x02) >> 1));
|
||
|
N = (CRG->PLL_FCR >> 8 ) & 0x3F;
|
||
|
M = (CRG->PLL_FCR >> 16) & 0x3F;
|
||
|
|
||
|
#ifdef SYSCLK_EXTERN_OSC
|
||
|
SystemCoreClock = EXTERN_XTAL * M / N * 1 / OD;
|
||
|
#else
|
||
|
SystemCoreClock = INTERN_XTAL * M / N * 1 / OD;
|
||
|
#endif
|
||
|
}
|