/****************************************************************************** * 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 #include "iwdg.h" #include "usart.h" #include "ff_shell.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 */ ff_init(); } /****************************************************************************** * EOF (not truncated) ******************************************************************************/