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