1 /*******************************************************************************
2 * Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved.
3 *
4 * This software is owned and published by:
5 * Huada Semiconductor Co.,Ltd ("HDSC").
6 *
7 * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
8 * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
9 *
10 * This software contains source code for use with HDSC
11 * components. This software is licensed by HDSC to be adapted only
12 * for use in systems utilizing HDSC components. HDSC shall not be
13 * responsible for misuse or illegal use of this software for devices not
14 * supported herein. HDSC is providing this software "AS IS" and will
15 * not be responsible for issues arising from incorrect user implementation
16 * of the software.
17 *
18 * Disclaimer:
19 * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
20 * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
21 * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
22 * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
23 * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
24 * WARRANTY OF NONINFRINGEMENT.
25 * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
26 * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
27 * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
28 * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
29 * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
30 * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
31 * SAVINGS OR PROFITS,
32 * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
33 * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
34 * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
35 * FROM, THE SOFTWARE.
36 *
37 * This software may be replicated in part or whole for the licensed use,
38 * with the restriction that this Disclaimer and Copyright notice must be
39 * included with each copy of this software, whether used in part or whole,
40 * at all times.
41 */
42 /******************************************************************************/
43 /** \file system_hc32l136.c
44  **
45  ** System clock initialization.
46  ** @link SampleGroup Some description @endlink
47  **
48  **   - 2019-03-01  1.0  Lux First version.
49  **
50  ******************************************************************************/
51 
52 /******************************************************************************/
53 /* Include files                                                              */
54 /******************************************************************************/
55 #include "base_types.h"
56 #include "hc32l19x.h"
57 #include "system_hc32l19x.h"
58 #include "hc32l196_sysctrl.h"
59 
60 /**
61  ******************************************************************************
62  ** System Clock Frequency (Core Clock) Variable according CMSIS
63  ******************************************************************************/
64 uint32_t SystemCoreClock = 4000000;
65 
66 
67 //add clock source.
SystemCoreClockUpdate(void)68 void SystemCoreClockUpdate (void) // Update SystemCoreClock variable
69 {
70     SystemCoreClock = Sysctrl_GetHClkFreq();
71 }
72 
73 /**
74  ******************************************************************************
75  ** \brief  对MCU未引出IO端口进行默认配置.
76  **
77  ** \param  none
78  ** \return none
79  ******************************************************************************/
_InitHidePin(void)80 static void _InitHidePin(void)
81 {
82     uint32_t tmpReg = M0P_SYSCTRL->PERI_CLKEN0;
83 
84 	M0P_SYSCTRL->PERI_CLKEN0_f.GPIO = 1;
85 
86 #if defined(HC32L19xPxxx)	      //100PIN MCU
87 	M0P_GPIO->PFADS &= 0xFF4F;  ///< PF04/PF05/PF07配置为数字端口
88 
89     M0P_GPIO->PFDIR	|= 0x00B0;  ///< PF04/PF05/PF07配置为端口输入
90 
91 	M0P_GPIO->PFPU  |= 0x00B0;  ///< PF04/PF05/PF07配置为上拉
92 
93 #elif defined(HC32L19xMxxx)     //80PIN MCU
94 	M0P_GPIO->PDADS &= 0x0F1F;  ///< PD05~07/PD12~15配置为数字端口
95 	M0P_GPIO->PEADS &= 0x783C;  ///< PE00/PE01/PE06~10/PE15配置为数字端口
96 	M0P_GPIO->PFADS &= 0xF9F3;  ///< PF02/PF03/PF09/PF10配置为数字端口
97 
98     M0P_GPIO->PDDIR	|= 0xF0E0;  ///< PD05~07/PD12~15配置为端口输入
99 	M0P_GPIO->PEDIR	|= 0x87C3;  ///< PE00/PE01/PE06~10/PE15配置为端口输入
100 	M0P_GPIO->PFDIR	|= 0x060C;  ///< PF02/PF03/PF09/PF10配置为数字端口
101 
102 
103 	M0P_GPIO->PDPU  |= 0xF0E0;  ///< PD05~07/PD12~15配置为上拉
104 	M0P_GPIO->PEPU  |= 0x87C3;  ///< PE00/PE01/PE06~10/PE15配置为上拉
105 	M0P_GPIO->PFPU  |= 0x060C;  ///< PF02/PF03/PF09/PF10配置为数字端口
106 
107 #elif defined(HC32L19xKxxx)     //64PIN MCU
108 	M0P_GPIO->PDADS &= 0x0004;  ///< PD00/PD01/PD03~15配置为数字端口
109 	M0P_GPIO->PEADS &= 0x0000;  ///< PE00~15配置为数字端口
110 	M0P_GPIO->PFADS &= 0xF9F3;  ///< PF02/PF03/PF09/PF10配置为数字端口
111 
112 	M0P_GPIO->PDDIR	|= 0xFFFB;  ///< PD00/PD01/PD03~15配置为端口输入
113 	M0P_GPIO->PEDIR	|= 0xFFFF;  ///< PE00~15配置为端口输入
114 	M0P_GPIO->PFDIR	|= 0x060C;  ///< PF02/PF03/PF09/PF10配置为数字端口
115 
116 	M0P_GPIO->PDPU  |= 0xFFFB;  ///< PD00/PD01/PD03~15配置为上拉
117 	M0P_GPIO->PEPU  |= 0xFFFF;  ///< PE00~15配置为上拉
118 	M0P_GPIO->PFPU  |= 0x060C;  ///< PF02/PF03/PF09/PF10配置为数字端口
119 
120 #elif defined(HC32L19xJxxx)     //48PIN MCU
121 	M0P_GPIO->PCADS &= 0xE000;  ///< PC00~12配置为数字端口
122 	M0P_GPIO->PDADS &= 0x0000;  ///< PD00~15配置为数字端口
123 	M0P_GPIO->PEADS &= 0x0000;  ///< PE00~15配置为数字端口
124 	M0P_GPIO->PFADS &= 0xF9C3;  ///< PF02~05/PF09/PF10配置为数字端口
125 
126 	M0P_GPIO->PCDIR	|= 0x1FFF;  ///< PC00~12配置为端口输入
127 	M0P_GPIO->PDDIR	|= 0xFFFF;  ///< PD00~15配置为端口输入
128 	M0P_GPIO->PEDIR	|= 0xFFFF;  ///< PE00~15配置为端口输入
129 	M0P_GPIO->PFDIR	|= 0x063C;  ///< PF02~05/PF09/PF10配置为数字端口
130 
131 
132 	M0P_GPIO->PCPU  |= 0x1FFF;  ///< PC00~12配置为上拉
133 	M0P_GPIO->PDPU  |= 0xFFFF;  ///< PD00~15配置为上拉
134     M0P_GPIO->PEPU  |= 0xFFFF;  ///< PE00~15配置为上拉
135 	M0P_GPIO->PFPU  |= 0x063C;  ///< PF02~05/PF09/PF10配置为数字端口
136 
137 #elif defined(HC32L19xFxxx)     //32PIN MCU
138 	M0P_GPIO->PAADS &= 0xFFF4;  ///< PA00/PA01/PA03配置为数字端口
139 	M0P_GPIO->PBADS &= 0x08FB;  ///< PB02/PB08~10/PB12~15配置为数字端口
140 	M0P_GPIO->PCADS &= 0xC000;  ///< PC00~13配置为数字端口
141 	M0P_GPIO->PDADS &= 0x0000;  ///< PD00~15配置为数字端口
142 	M0P_GPIO->PEADS &= 0x0000;  ///< PE00~15配置为数字端口
143     M0P_GPIO->PFADS &= 0xF903;  ///< PF02~07/PF09/PF10配置为数字端口
144 
145 	M0P_GPIO->PADIR	|= 0x000B;  ///< PA00/PA01/PA03配置为端口输入
146 	M0P_GPIO->PBDIR	|= 0xF704;  ///< PB02/PB08~10/PB12~15配置为端口输入
147 	M0P_GPIO->PCDIR	|= 0x3FFF;  ///< PC00~13配置为端口输入
148 	M0P_GPIO->PDDIR	|= 0xFFFF;  ///< PD00~15配置为端口输入
149 	M0P_GPIO->PEDIR	|= 0xFFFF;  ///< PE00~15配置为端口输入
150 	M0P_GPIO->PFDIR	|= 0x06FC;  ///< PF02~07/PF09/PF10配置为数字端口
151 
152 	M0P_GPIO->PAPU  |= 0x000B;  ///< PA00/PA01/PA03配置为上拉
153 	M0P_GPIO->PBPU  |= 0xF704;  ///< PB02/PB08~10/PB12~15配置为上拉
154 	M0P_GPIO->PCPU  |= 0x3FFF;  ///< PC00~13配置为上拉
155 	M0P_GPIO->PDPU  |= 0xFFFF;  ///< PD00~15配置为上拉
156 	M0P_GPIO->PEPU  |= 0xFFFF;  ///< PE00~15配置为上拉
157 	M0P_GPIO->PFPU  |= 0x06FC;  ///< PF02~07/PF09/PF10配置为数字端口
158 
159 #endif
160 
161 	M0P_SYSCTRL->PERI_CLKEN0 = tmpReg;
162 }
163 
164 /**
165  ******************************************************************************
166  ** \brief  Setup the microcontroller system. Initialize the System and update
167  ** the SystemCoreClock variable.
168  **
169  ** \param  none
170  ** \return none
171  ******************************************************************************/
SystemInit(void)172 void SystemInit(void)
173 {
174     M0P_SYSCTRL->RCL_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C22ul)));
175     M0P_SYSCTRL->RCH_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C08ul)));
176     SystemCoreClockUpdate();
177 	_InitHidePin();
178 }
179 
180