You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
4.4 KiB
127 lines
4.4 KiB
|
|
|
|
/***************************************************************************//**
|
|
* @file A31G12x_SystemClock.c
|
|
* @brief Contains all functions support for Example Code on A31G12x
|
|
*
|
|
*
|
|
*
|
|
* @version 1.00
|
|
* @date 2020-05-29
|
|
* @author ABOV Application Team
|
|
*
|
|
* Copyright(C) 2019, ABOV Semiconductor
|
|
* All rights reserved.
|
|
*
|
|
*//****************************************************************************/
|
|
/*******************************************************************************
|
|
* A31G12x Device
|
|
*------------------------------------------------------------------------
|
|
* System Clock source | High Speend Internal oscillator
|
|
*------------------------------------------------------------------------
|
|
* SYSCLK(MHz) | 40MHz
|
|
*------------------------------------------------------------------------
|
|
* HCLK(MHz) - Core Clock | 40MHz
|
|
*------------------------------------------------------------------------
|
|
* PCLK(MHz) - Peri Clock | 40MHz
|
|
*------------------------------------------------------------------------
|
|
******************************************************************************/
|
|
|
|
#include "A31G12x_SystemClock.h"
|
|
|
|
/* Private typedef ---------------------------------------------------------- */
|
|
/* Private define ----------------------------------------------------------- */
|
|
/* Private macro ------------------------------------------------------------ */
|
|
/* Private variables -------------------------------------------------------- */
|
|
|
|
|
|
/* Private define ----------------------------------------------------------- */
|
|
|
|
// Main Clock Selection: Select only one of the following.
|
|
#define USED_HIRC /* HIRC : 40000000uL */
|
|
//#define USED_WDTRC /* WDTRC : 40000uL */
|
|
//#define USED_XMOSC /* XMOSC : 16000000uL */
|
|
//#define USED_XSOSC /* XSOSC : 32768uL */
|
|
|
|
/* Clock Out Selection ( Monitoring ) */
|
|
/*#define USED_CLKO*/
|
|
|
|
|
|
/* Private function prototypes ---------------------------------------------- */
|
|
|
|
void SystemClock_Config( void );
|
|
|
|
|
|
/* Private variables -------------------------------------------------------- */
|
|
|
|
|
|
/*-------------------------------------------------------------------------*//**
|
|
* @brief Initialize default clock for A31G12x Board
|
|
* @param None
|
|
* @return None
|
|
*//*-------------------------------------------------------------------------*/
|
|
void System_Clock_Initialization( void )
|
|
{
|
|
uint32_t i;
|
|
|
|
// enable clock source
|
|
HAL_SCU_ClockSource_Enable( CLKSRCR_HIRCEN | CLKSRCR_XMOSCEN | CLKSRCR_XSOSCEN | CLKSRCR_WDTRCEN, HIRCSEL_HIRC1 );
|
|
for( i = 0; i < 1000; i++ ); // Clock Stable Time
|
|
|
|
// select system clock
|
|
#ifdef USED_WDTRC
|
|
HAL_SCU_SystemClockDivider( WLDIV_MCLK64 | HDIV_MCLK1, SYSTDIV_HCLK1 | PDIV_HCLK1 ); // WT/LCD | HCLK, SysTick | PCLK
|
|
HAL_SCU_SystemClockChange( MCLKSEL_WDTRC );
|
|
|
|
SystemCoreClock = 40000uL; // HCLK
|
|
SystemPeriClock = 40000uL; // PCLK
|
|
#endif
|
|
|
|
#ifdef USED_XSOSC
|
|
HAL_SCU_SystemClockDivider( WLDIV_MCLK64 | HDIV_MCLK1, SYSTDIV_HCLK1 | PDIV_HCLK1 ); // WT/LCD | HCLK, SysTick | PCLK
|
|
HAL_SCU_SystemClockChange( MCLKSEL_XSOSC );
|
|
|
|
SystemCoreClock = 32768uL; // HCLK
|
|
SystemPeriClock = 32768uL; // PCLK
|
|
#endif
|
|
|
|
#ifdef USED_XMOSC
|
|
HAL_SCU_SystemClockChange( MCLKSEL_XMOSC );
|
|
HAL_SCU_SystemClockDivider( WLDIV_MCLK64 | HDIV_MCLK1, SYSTDIV_HCLK1 | PDIV_HCLK1 ); // WT/LCD | HCLK, SysTick | PCLK
|
|
|
|
SystemCoreClock = 16000000uL; // HCLK
|
|
SystemPeriClock = 16000000uL; // PCLK
|
|
#endif
|
|
|
|
#ifdef USED_HIRC
|
|
HAL_SCU_SystemClockChange( MCLKSEL_HIRC );
|
|
HAL_SCU_SystemClockDivider( WLDIV_MCLK64 | HDIV_MCLK1, SYSTDIV_HCLK1 | PDIV_HCLK1 ); // WT/LCD | HCLK, SysTick | PCLK
|
|
|
|
SystemCoreClock = 40000000uL; // HCLK
|
|
SystemPeriClock = 40000000uL; // PCLK
|
|
#endif
|
|
|
|
// disable unused clock source
|
|
//HAL_SCU_ClockSource_Disable( CLKSRCR_XMOSCEN | CLKSRCR_XSOSCEN );
|
|
|
|
// enable clock monitoring
|
|
HAL_SCU_ClockMonitoring( MACTS_SysClkChg, MONCS_MCLK );
|
|
|
|
// enable clock output
|
|
#ifdef USED_CLKO
|
|
HAL_SCU_CLKO_PinConfig();
|
|
HAL_SCU_ClockOutput( CLKOS_MCLK, POLSEL_Low, CLKODIV_SelectedClock1 );
|
|
#endif
|
|
HAL_SCU_Peripheral_ClockConfig(0x00003FuL, 0x000000L); // Enable All Ports,
|
|
}
|
|
|
|
void Systick_Initialization(uint32_t SysticTime)
|
|
{
|
|
if(SysticTime > 1000)
|
|
{
|
|
SysticTime = 1000;
|
|
}
|
|
SysTick_Config( SystemCoreClock / (1000 / SysticTime) );
|
|
}
|
|
|