1 /********************************** (C) COPYRIGHT *******************************
2 * File Name          : CH57x_gpio.c
3 * Author             : WCH
4 * Version            : V1.0
5 * Date               : 2018/12/15
6 * Description
7 *******************************************************************************/
8 
9 #include "CH57x_common.h"
10 
11 
12 /*******************************************************************************
13 * Function Name  : GPIOA_ModeCfg
14 * Description    : GPIOA端口引脚模式配置
15 * Input          : pin:  PA0-PA15
16                     GPIO_Pin_0 - GPIO_Pin_15
17                    mode:
18                     GPIO_ModeIN_Floating  -  浮空输入
19                     GPIO_ModeIN_PU        -  上拉输入
20                     GPIO_ModeIN_PD        -  下拉输入
21                     GPIO_ModeOut_PP_5mA   -  推挽输出最大5mA
22                     GPIO_ModeOut_PP_20mA  -  推挽输出最大20mA
23 * Return         : None
24 *******************************************************************************/
GPIOA_ModeCfg(UINT32 pin,GPIOModeTypeDef mode)25 void GPIOA_ModeCfg( UINT32 pin, GPIOModeTypeDef mode )
26 {
27     switch(mode)
28     {
29         case GPIO_ModeIN_Floating:
30             R32_PA_PD_DRV &= ~pin;
31             R32_PA_PU     &= ~pin;
32             R32_PA_DIR    &= ~pin;
33             break;
34 
35         case GPIO_ModeIN_PU:
36             R32_PA_PD_DRV &= ~pin;
37             R32_PA_PU     |= pin;
38             R32_PA_DIR    &= ~pin;
39             break;
40 
41         case GPIO_ModeIN_PD:
42             R32_PA_PD_DRV |= pin;
43             R32_PA_PU     &= ~pin;
44             R32_PA_DIR    &= ~pin;
45             break;
46 
47         case GPIO_ModeOut_PP_5mA:
48             R32_PA_PD_DRV &= ~pin;
49             R32_PA_DIR    |= pin;
50             break;
51 
52         case GPIO_ModeOut_PP_20mA:
53             R32_PA_PD_DRV |= pin;
54             R32_PA_DIR    |= pin;
55             break;
56 
57         default:
58             break;
59     }
60 }
61 
62 /*******************************************************************************
63 * Function Name  : GPIOB_ModeCfg
64 * Description    : GPIOB端口引脚模式配置
65 * Input          : pin:  PB0-PB23
66                     GPIO_Pin_0 - GPIO_Pin_23
67                    mode:
68                     GPIO_ModeIN_Floating  -  浮空输入
69                     GPIO_ModeIN_PU        -  上拉输入
70                     GPIO_ModeIN_PD        -  下拉输入
71                     GPIO_ModeOut_PP_5mA   -  推挽输出最大5mA
72                     GPIO_ModeOut_PP_20mA  -  推挽输出最大20mA
73 * Return         : None
74 *******************************************************************************/
GPIOB_ModeCfg(UINT32 pin,GPIOModeTypeDef mode)75 void GPIOB_ModeCfg( UINT32 pin, GPIOModeTypeDef mode )
76 {
77     switch(mode)
78     {
79         case GPIO_ModeIN_Floating:
80             R32_PB_PD_DRV &= ~pin;
81             R32_PB_PU     &= ~pin;
82             R32_PB_DIR    &= ~pin;
83             break;
84 
85         case GPIO_ModeIN_PU:
86             R32_PB_PD_DRV &= ~pin;
87             R32_PB_PU     |= pin;
88             R32_PB_DIR    &= ~pin;
89             break;
90 
91         case GPIO_ModeIN_PD:
92             R32_PB_PD_DRV |= pin;
93             R32_PB_PU     &= ~pin;
94             R32_PB_DIR    &= ~pin;
95             break;
96 
97         case GPIO_ModeOut_PP_5mA:
98             R32_PB_PD_DRV &= ~pin;
99             R32_PB_DIR    |= pin;
100             break;
101 
102         case GPIO_ModeOut_PP_20mA:
103             R32_PB_PD_DRV |= pin;
104             R32_PB_DIR    |= pin;
105             break;
106 
107         default:
108             break;
109     }
110 }
111 
112 /*******************************************************************************
113 * Function Name  : GPIOA_ITModeCfg
114 * Description    : GPIOA引脚中断模式配置
115 * Input          : pin:  PA0-PA15
116                     GPIO_Pin_0 - GPIO_Pin_15
117                    mode:
118                     GPIO_ITMode_LowLevel   -  低电平触发
119                     GPIO_ITMode_HighLevel  -  高电平触发
120                     GPIO_ITMode_FallEdge   -  下降沿触发
121                     GPIO_ITMode_RiseEdge   -  上升沿触发
122 * Return         : None
123 *******************************************************************************/
GPIOA_ITModeCfg(UINT32 pin,GPIOITModeTpDef mode)124 void GPIOA_ITModeCfg( UINT32 pin, GPIOITModeTpDef mode )
125 {
126     switch( mode )
127     {
128         case GPIO_ITMode_LowLevel:      // 低电平触发
129             R16_PA_INT_MODE &= ~pin;
130             R32_PA_CLR |= pin;
131             break;
132 
133         case GPIO_ITMode_HighLevel:     // 高电平触发
134             R16_PA_INT_MODE &= ~pin;
135             R32_PA_OUT |= pin;
136             break;
137 
138         case GPIO_ITMode_FallEdge:      // 下降沿触发
139             R16_PA_INT_MODE |= pin;
140             R32_PA_CLR |= pin;
141             break;
142 
143         case GPIO_ITMode_RiseEdge:      // 上升沿触发
144             R16_PA_INT_MODE |= pin;
145             R32_PA_OUT |= pin;
146             break;
147 
148         default :
149             break;
150     }
151     R16_PA_INT_IF = pin;
152     R16_PA_INT_EN |= pin;
153 }
154 
155 /*******************************************************************************
156 * Function Name  : GPIOB_ITModeCfg
157 * Description    : GPIOB引脚中断模式配置
158 * Input          : pin:  PB0-PB15
159                     GPIO_Pin_0 - GPIO_Pin_15
160                    mode:
161                     GPIO_ITMode_LowLevel   -  低电平触发
162                     GPIO_ITMode_HighLevel  -  高电平触发
163                     GPIO_ITMode_FallEdge   -  下降沿触发
164                     GPIO_ITMode_RiseEdge   -  上升沿触发
165 * Return         : None
166 *******************************************************************************/
GPIOB_ITModeCfg(UINT32 pin,GPIOITModeTpDef mode)167 void GPIOB_ITModeCfg( UINT32 pin, GPIOITModeTpDef mode )
168 {
169     switch( mode )
170     {
171         case GPIO_ITMode_LowLevel:      // 低电平触发
172             R16_PB_INT_MODE &= ~pin;
173             R32_PB_CLR |= pin;
174             break;
175 
176         case GPIO_ITMode_HighLevel:     // 高电平触发
177             R16_PB_INT_MODE &= ~pin;
178             R32_PB_OUT |= pin;
179             break;
180 
181         case GPIO_ITMode_FallEdge:      // 下降沿触发
182             R16_PB_INT_MODE |= pin;
183             R32_PB_CLR |= pin;
184             break;
185 
186         case GPIO_ITMode_RiseEdge:      // 上升沿触发
187             R16_PB_INT_MODE |= pin;
188             R32_PB_OUT |= pin;
189             break;
190 
191         default :
192             break;
193     }
194     R16_PB_INT_IF = pin;
195     R16_PB_INT_EN |= pin;
196 }
197 
198 
199 /*******************************************************************************
200 * Function Name  : GPIOPinRemap
201 * Description    : 外设功能引脚映射
202 * Input          : s:
203                     ENABLE  - 引脚映射
204                     DISABLE - 默认引脚
205                    perph:
206                     RB_PIN_SPI0   -  SPI0:  PA12/PA13/PA14/PA15 -> PB12/PB13/PB14/PB15
207                     RB_PIN_UART3  -  UART3: PA4/PA5 ->  PB20/PB21
208                     RB_PIN_UART2  -  UART2: PA6/PA7 ->  PB22/PB23
209                     RB_PIN_UART1  -  UART1: PA8/PA9 ->  PB8/PB9
210                     RB_PIN_UART0  -  UART0: PB4/PB7 ->  PA15/PA14
211                     RB_PIN_TMR3   -  TMR3:  PA2 ->  PB18
212                     RB_PIN_TMR2   -  TMR2:  PA11 ->  PB11
213                     RB_PIN_TMR1   -  TMR1:  PA10 ->  PB10
214                     RB_PIN_TMR0   -  TMR0:  PA3 ->  PB19
215 * Return         : None
216 *******************************************************************************/
GPIOPinRemap(UINT8 s,UINT16 perph)217 void GPIOPinRemap( UINT8 s, UINT16 perph )
218 {
219     if( s )     R16_PIN_ALTERNATE |= perph;
220     else        R16_PIN_ALTERNATE &= ~perph;
221 }
222 
223 /*******************************************************************************
224 * Function Name  : GPIOAGPPCfg
225 * Description    : 模拟外设GPIO引脚功能控制
226 * Input          : s:
227                     ENABLE  - 打开模拟外设功能,关闭数字功能
228                     DISABLE - 启用数字功能,关闭模拟外设功能
229                    perph:
230                     RB_PIN_ADC0_1_IE      -  ADC0-1通道
231                     RB_PIN_ADC2_3_IE      -  ADC2-3通道
232                     RB_PIN_ADC4_5_IE      -  ADC4-5通道
233                     RB_PIN_ADC6_7_IE      -  ADC6-7通道
234                     RB_PIN_ADC8_9_IE      -  ADC8-9通道
235                     RB_PIN_ADC10_11_IE    -  ADC10-11通道
236                     RB_PIN_ADC12_13_IE    -  ADC12-13通道
237                     RB_PIN_XT32K_IE       -  外部32K引脚
238                     RB_PIN_USB_IE         -  USB功能信号引脚
239                     RB_PIN_ETH_IE         -  以太网功能信号引脚
240                     RB_PIN_SEG0_3_IE      -  LCD控制器SEG0-3驱动引脚
241                     RB_PIN_SEG4_7_IE      -  LCD控制器SEG4-7驱动引脚
242                     RB_PIN_SEG8_11_IE     -  LCD控制器SEG8-11驱动引脚
243                     RB_PIN_SEG12_15_IE    -  LCD控制器SEG12-15驱动引脚
244                     RB_PIN_SEG16_19_IE    -  LCD控制器SEG16-19驱动引脚
245                     RB_PIN_SEG20_23_IE    -  LCD控制器SEG20-23驱动引脚
246 * Return         : None
247 *******************************************************************************/
GPIOAGPPCfg(UINT8 s,UINT16 perph)248 void GPIOAGPPCfg( UINT8 s, UINT16 perph )
249 {
250     if( s )     R16_PIN_ANALOG_IE |= perph;
251     else        R16_PIN_ANALOG_IE &= ~perph;
252 }
253