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