184 lines
6.7 KiB
C
184 lines
6.7 KiB
C
/******************************************************************************
|
|
* Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved.
|
|
*
|
|
* This software is owned and published by:
|
|
* Huada Semiconductor Co.,Ltd ("HDSC").
|
|
*
|
|
* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
|
|
* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
|
|
*
|
|
* This software contains source code for use with HDSC
|
|
* components. This software is licensed by HDSC to be adapted only
|
|
* for use in systems utilizing HDSC components. HDSC shall not be
|
|
* responsible for misuse or illegal use of this software for devices not
|
|
* supported herein. HDSC is providing this software "AS IS" and will
|
|
* not be responsible for issues arising from incorrect user implementation
|
|
* of the software.
|
|
*
|
|
* Disclaimer:
|
|
* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
|
|
* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
|
|
* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
|
|
* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
|
|
* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
|
|
* WARRANTY OF NONINFRINGEMENT.
|
|
* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
|
|
* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
|
|
* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
|
|
* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
|
|
* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
|
|
* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
|
|
* SAVINGS OR PROFITS,
|
|
* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
|
* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
|
|
* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
|
|
* FROM, THE SOFTWARE.
|
|
*
|
|
* This software may be replicated in part or whole for the licensed use,
|
|
* with the restriction that this Disclaimer and Copyright notice must be
|
|
* included with each copy of this software, whether used in part or whole,
|
|
* at all times.
|
|
*/
|
|
/******************************************************************************/
|
|
/** \file main.c
|
|
**
|
|
** A detailed description is available at
|
|
** @link Sample Group Some description @endlink
|
|
**
|
|
** - 2019-03-26 1.0 Lux First version for Device Driver Library of Module.
|
|
**
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* Include files
|
|
******************************************************************************/
|
|
#include <stdio.h>
|
|
#include "iwdg.h"
|
|
#include "usart.h"
|
|
#include "can.h"
|
|
#include "device_param.h"
|
|
|
|
/******************************************************************************
|
|
* Local pre-processor symbols/macros ('#define')
|
|
******************************************************************************/
|
|
/*******************************************************************************
|
|
* Local pre-processor symbols/macros ('#define')
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* Local type definitions ('typedef')
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
* Local function prototypes ('static')
|
|
******************************************************************************/
|
|
|
|
/*******************************************************************************
|
|
* Local variable definitions ('static')
|
|
******************************************************************************/
|
|
|
|
/*******************************************************************************
|
|
* Local function prototypes ('static')
|
|
******************************************************************************/
|
|
|
|
|
|
/*******************************************************************************
|
|
* Function implementation - global ('extern') and local ('static')
|
|
******************************************************************************/
|
|
|
|
/**
|
|
* @brief BSP clock initialize.
|
|
* Set board system clock to PLLH@240MHz
|
|
* Flash: 5 wait
|
|
* SRAM_HS: 1 wait
|
|
* SRAM1_2_3_4_B: 2 wait
|
|
* PCLK0: 240MHz
|
|
* PCLK1: 120MHz
|
|
* PCLK2: 60MHz
|
|
* PCLK3: 60MHz
|
|
* PCLK4: 120MHz
|
|
* EXCLK: 120MHz
|
|
* HCLK: 240MHz
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
void BSP_CLK_Init(void)
|
|
{
|
|
stc_clk_sysclk_cfg_t stcSysClkCfg;
|
|
stc_clk_xtal_cfg_t stcXtalCfg;
|
|
stc_clk_mpll_cfg_t stcMpllCfg;
|
|
stc_sram_config_t stcSramConfig;
|
|
|
|
MEM_ZERO_STRUCT(stcSysClkCfg);
|
|
MEM_ZERO_STRUCT(stcXtalCfg);
|
|
MEM_ZERO_STRUCT(stcMpllCfg);
|
|
MEM_ZERO_STRUCT(stcSramConfig);
|
|
|
|
/* Set bus clk div. */
|
|
stcSysClkCfg.enHclkDiv = ClkSysclkDiv1; // 200MHz
|
|
stcSysClkCfg.enExclkDiv = ClkSysclkDiv2; // 84MHz
|
|
|
|
stcSysClkCfg.enPclk0Div = ClkSysclkDiv1; // 200MHz
|
|
stcSysClkCfg.enPclk1Div = ClkSysclkDiv2; // 100MHz
|
|
stcSysClkCfg.enPclk2Div = ClkSysclkDiv4; // 50MHz
|
|
stcSysClkCfg.enPclk3Div = ClkSysclkDiv4; // 50MHz
|
|
stcSysClkCfg.enPclk4Div = ClkSysclkDiv2; // 100MHz
|
|
CLK_SysClkConfig(&stcSysClkCfg);
|
|
|
|
/* Config Ext Xtal and Enable Ext Xtal */
|
|
stcXtalCfg.enMode = ClkXtalModeExtClk;
|
|
stcXtalCfg.enDrv = ClkXtalMidDrv;
|
|
stcXtalCfg.enFastStartup = Disable;
|
|
CLK_XtalConfig(&stcXtalCfg);
|
|
CLK_XtalCmd(Enable);
|
|
|
|
/* MPLL config (Ext XTAL / pllmDiv * plln / PllpDiv = 200M). */
|
|
/* MPLL config (16M / 2 * 50 / 2 = 200M) */
|
|
stcMpllCfg.pllmDiv = 2ul; // XTAL 16M / 2
|
|
stcMpllCfg.plln = 50ul; // 8M * 50 = 400M
|
|
stcMpllCfg.PllpDiv = 2ul; // MLLP = 200M
|
|
stcMpllCfg.PllqDiv = 2ul; // MLLQ = 200M
|
|
stcMpllCfg.PllrDiv = 2ul; // MLLR = 200M
|
|
CLK_SetPllSource(ClkPllSrcXTAL);
|
|
CLK_MpllConfig(&stcMpllCfg);
|
|
|
|
/* sram init include read/write wait cycle setting */
|
|
stcSramConfig.u8SramIdx = Sram12Idx | Sram3Idx | SramHsIdx | SramRetIdx;
|
|
stcSramConfig.enSramRC = SramCycle2;
|
|
stcSramConfig.enSramWC = SramCycle2;
|
|
SRAM_Init(&stcSramConfig);
|
|
|
|
/* flash read wait cycle setting */
|
|
EFM_Unlock();
|
|
EFM_SetLatency(EFM_LATENCY_4);
|
|
EFM_Lock();
|
|
|
|
/* Enable MPLL. */
|
|
CLK_MpllCmd(Enable);
|
|
|
|
/* Wait MPLL ready. */
|
|
while(Set != CLK_GetFlagStatus(ClkFlagMPLLRdy))
|
|
{
|
|
;
|
|
}
|
|
|
|
/* Switch driver ability */
|
|
PWC_HS2HP();
|
|
/* Switch system clock source to MPLL. */
|
|
CLK_SetSysClkSource(CLKSysSrcMPLL);
|
|
}
|
|
|
|
void BSP_Init(void)
|
|
{
|
|
BSP_CLK_Init();
|
|
IWDG_Init();
|
|
|
|
#ifdef CONSOLE_DEBUG
|
|
debug_usart_init();
|
|
#endif /* CONSOLE_DEBUG */
|
|
}
|
|
|
|
/******************************************************************************
|
|
* EOF (not truncated)
|
|
******************************************************************************/
|