1 /*
2  * Copyright 2021 MindMotion Microelectronics Co., Ltd.
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 
9 #include "hal_syscfg.h"
10 
11 #define SYSCFG_EXTICR_MASK(x)   ( (0x0Fu) << ( ( (uint32_t)(x) & 0x3u ) << 2u ) ) /* mask bit for clear exti line. */
12 #define SYSCFG_EXTICR(x, y)     ( (uint32_t)( (uint32_t)(x) << ( ( (uint32_t)(y) & 0x3u ) << 2u ) ) ) /* set the data for indicated exti port and line. */
13 
SYSCFG_SetBootMemMode(SYSCFG_BootMemMode_Type mode)14 void SYSCFG_SetBootMemMode(SYSCFG_BootMemMode_Type mode)
15 {
16     SYSCFG->CFGR = ( SYSCFG->CFGR & ~ SYSCFG_CFGR_MEMMODE_MASK )
17                  | SYSCFG_CFGR_MEMMODE(mode);
18 }
19 
SYSCFG_SetFSMCPinUseMode(SYSCFG_FSMCPinUseMode_Type mode)20 void SYSCFG_SetFSMCPinUseMode(SYSCFG_FSMCPinUseMode_Type mode)
21 {
22     SYSCFG->CFGR = ( SYSCFG->CFGR & ~ SYSCFG_CFGR_FCODATAEN_MASK )
23                  | SYSCFG_CFGR_FCODATAEN(mode);
24 }
25 
SYSCFG_SetFSMCMode(SYSCFG_FSMCMode_Type mode)26 void SYSCFG_SetFSMCMode(SYSCFG_FSMCMode_Type mode)
27 {
28     SYSCFG->CFGR = ( SYSCFG->CFGR & ~ SYSCFG_CFGR_MODESEL_MASK )
29                  | SYSCFG_CFGR_MODESEL(mode);
30 }
31 
SYSCFG_SetExtIntMux(SYSCFG_EXTIPort_Type port,SYSCFG_EXTILine_Type line)32 void SYSCFG_SetExtIntMux(SYSCFG_EXTIPort_Type port, SYSCFG_EXTILine_Type line)
33 {
34     if ( line < SYSCFG_EXTILine_4)
35     {
36         SYSCFG->EXTICR1 = ( SYSCFG->EXTICR1 & ~ SYSCFG_EXTICR_MASK(line) )
37                         | ( SYSCFG_EXTICR(port, line) );
38     }
39     else if ( line < SYSCFG_EXTILine_8 )
40     {
41         SYSCFG->EXTICR2 = ( SYSCFG->EXTICR1 & ~ SYSCFG_EXTICR_MASK(line) )
42                         | ( SYSCFG_EXTICR(port, line) );
43     }
44     else if ( line < SYSCFG_EXTILine_12 )
45     {
46         SYSCFG->EXTICR3 = ( SYSCFG->EXTICR1 & ~ SYSCFG_EXTICR_MASK(line) )
47                         | ( SYSCFG_EXTICR(port, line) );
48     }
49     else
50     {
51         SYSCFG->EXTICR4 = ( SYSCFG->EXTICR1 & ~ SYSCFG_EXTICR_MASK(line) )
52                         | ( SYSCFG_EXTICR(port, line) );
53     }
54 }
55 
SYSCFG_SetI2C0PortMode(SYSCFG_I2CPortMode_Type mode)56 void SYSCFG_SetI2C0PortMode(SYSCFG_I2CPortMode_Type mode)
57 {
58     SYSCFG->CFGR2 = ( SYSCFG->CFGR2 & ~ SYSCFG_CFGR2_I2C1MODESEL_MASK )
59                   | SYSCFG_CFGR2_I2C1MODESEL(mode);
60 }
61 
SYSCFG_SetI2C1PortMode(SYSCFG_I2CPortMode_Type mode)62 void SYSCFG_SetI2C1PortMode(SYSCFG_I2CPortMode_Type mode)
63 {
64     SYSCFG->CFGR2 = ( SYSCFG->CFGR2 & ~ SYSCFG_CFGR2_I2C2MODESEL_MASK )
65                   | SYSCFG_CFGR2_I2C2MODESEL(mode);
66 }
67 
SYSCFG_SetENETPortMode(SYSCFG_ENETPortMode_Type mode)68 void SYSCFG_SetENETPortMode(SYSCFG_ENETPortMode_Type mode)
69 {
70     SYSCFG->CFGR2 = ( SYSCFG->CFGR2 & ~ SYSCFG_CFGR2_MIIRMIISEL_MASK )
71                   | SYSCFG_CFGR2_MIIRMIISEL(mode);
72 }
73 
SYSCFG_SetENETSpeedMode(SYSCFG_ENETSpeedMode_Type mode)74 void SYSCFG_SetENETSpeedMode(SYSCFG_ENETSpeedMode_Type mode)
75 {
76     SYSCFG->CFGR2 = ( SYSCFG->CFGR2 & ~ SYSCFG_CFGR2_MACSPDSEL_MASK )
77                   | SYSCFG_CFGR2_MACSPDSEL(mode);
78 }
79 
SYSCFG_EnablePVD(SYSCFG_PVDConf_Type * conf)80 void SYSCFG_EnablePVD(SYSCFG_PVDConf_Type * conf)
81 {
82     if (conf == NULL)
83     {
84         SYSCFG->PDETCSR &= ~ SYSCFG_PDETCSR_PVDE_MASK;
85     }
86     else
87     {
88         SYSCFG->PDETCSR = ( ( SYSCFG->PDETCSR & ~ ( SYSCFG_PDETCSR_PVDE_MASK
89                                               | SYSCFG_PDETCSR_PLS_MASK
90                                               | SYSCFG_PDETCSR_PVDO_MASK
91                                               ) )
92                         | SYSCFG_PDETCSR_PLS(conf->Thold)
93                         | SYSCFG_PDETCSR_PVDO(conf->Output)
94                         | SYSCFG_PDETCSR_PVDE_MASK
95                         );
96 
97     }
98 }
99 
SYSCFG_EnableVDT(SYSCFG_VDTConf_Type * conf)100 void SYSCFG_EnableVDT(SYSCFG_VDTConf_Type * conf)
101 {
102     if (conf == NULL)
103     {
104         SYSCFG->PDETCSR &= ~ SYSCFG_PDETCSR_VDTE_MASK;
105     }
106     else
107     {
108         SYSCFG->PDETCSR = ( ( SYSCFG->PDETCSR & ~ ( SYSCFG_PDETCSR_VDTE_MASK
109                                               | SYSCFG_PDETCSR_VDTLS_MASK
110                                               | SYSCFG_PDETCSR_VDTO_MASK
111                                               ) )
112                         | SYSCFG_PDETCSR_VDTLS(conf->Thold)
113                         | SYSCFG_PDETCSR_VDTO(conf->Output)
114                         | SYSCFG_PDETCSR_VDTE_MASK
115                         );
116     }
117 }
118 
SYSCFG_EnableADCCheckVBatDiv3(bool enable)119 void SYSCFG_EnableADCCheckVBatDiv3(bool enable)
120 {
121     if (enable)
122     {
123         SYSCFG->PDETCSR |= SYSCFG_PDETCSR_VBATDIV3EN_MASK;
124     }
125     else
126     {
127         SYSCFG->PDETCSR &= ~ SYSCFG_PDETCSR_VBATDIV3EN_MASK;
128     }
129 }
130 
SYSCFG_SetVOSDelayValue(uint32_t val)131 void SYSCFG_SetVOSDelayValue(uint32_t val)
132 {
133     SYSCFG->VOSDLY = val;
134 }
135 
136 /* EOF. */
137