8051-ELL库  beta 1.1.6
8051-ELL library API Document Center
STC8x_GPIO.h
浏览该文件的文档.
1 /*-----------------------------------------------------------------------
2 | FILE DESCRIPTION |
3 -----------------------------------------------------------------------*/
4 /*----------------------------------------------------------------------
5  - File name : STC8x_GPIO.h
6  - Author : zeweni
7  - Update date : 2020.04.24
8  - Copyright(C) : 2020-2021 zeweni. All rights reserved.
9 -----------------------------------------------------------------------*/
10 /*------------------------------------------------------------------------
11 | COPYRIGHT NOTICE |
12 ------------------------------------------------------------------------*/
13 /*
14  * Copyright (C) 2021, zeweni (17870070675@163.com)
15 
16  * This file is part of 8051 ELL low-layer libraries.
17 
18  * 8051 ELL low-layer libraries is free software: you can redistribute
19  * it and/or modify it under the terms of the Apache-2.0 License.
20 
21  * 8051 ELL low-layer libraries is distributed in the hope that it will
22  * be useful,but WITHOUT ANY WARRANTY; without even the implied warranty
23  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24  * Apache-2.0 License for more details.
25 
26  * You should have received a copy of the Apache-2.0 License.8051 ELL
27  * low-layer libraries. If not, see <http://www.apache.org/licenses/>.
28 **/
29 /*-----------------------------------------------------------------------
30 | INCLUDES |
31 -----------------------------------------------------------------------*/
32 #ifndef __STC8x_GPIO_H_
33 #define __STC8x_GPIO_H_
34 
35 /*--------------------------------------------------------
36 | @Description: ELL library core |
37 --------------------------------------------------------*/
38 #include "ELL_CORE.h"
39 
40 /*--------------------------------------------------------
41 | @Description: STC8x MCU Register |
42 --------------------------------------------------------*/
43 
44 #if (PER_LIB_MCU_MUODEL == STC8Ax)
45  #include "STC8Ax_REG.h"
46 #elif (PER_LIB_MCU_MUODEL == STC8Cx)
47  #include "STC8Cx_REG.h"
48 #elif (PER_LIB_MCU_MUODEL == STC8Fx)
49  #include "STC8Fx_REG.h"
50 #elif (PER_LIB_MCU_MUODEL == STC8Gx)
51  #include "STC8Gx_REG.h"
52 #elif (PER_LIB_MCU_MUODEL == STC8Hx)
53  #include "STC8Hx_REG.h"
54 #endif
55 
56 /*-----------------------------------------------------------------------
57 | DATA |
58 -----------------------------------------------------------------------*/
59 
60 
61 #ifndef PER_LIB_MCU_MUODEL
64  #define PER_LIB_MCU_MUODEL STC8Ax
65 #endif
66 
67 
68 #ifndef PER_LIB_GPIO_CTRL
71  #define PER_LIB_GPIO_CTRL 1
72 #endif
73 
74 
75 #ifndef PER_LIB_GPIO_INIT_CTRL
78  #define PER_LIB_GPIO_INIT_CTRL 1
79 #endif
80 
81 
82 #ifndef PER_LIB_GPIO_NVIC_CTRL
85  #define PER_LIB_GPIO_NVIC_CTRL 1
86 #endif
87 
88 
89 #ifndef PER_LIB_GPIO_WORK_CTRL
92  #define PER_LIB_GPIO_WORK_CTRL 1
93 #endif
94 
95 
96 /*--------------------------------------------------------
97 | @Description: GPIO Pin define |
98 --------------------------------------------------------*/
99 
107 #define GPIO_P0 0
108 #define GPIO_P1 1
109 #define GPIO_P2 2
110 #define GPIO_P3 3
111 #define GPIO_P4 4
112 #define GPIO_P5 5
113 #define GPIO_P6 6
114 #define GPIO_P7 7
126 #define Pin_0 0x01
127 #define Pin_1 0x02
128 #define Pin_2 0x04
129 #define Pin_3 0x08
130 #define Pin_4 0x10
131 #define Pin_5 0x20
132 #define Pin_6 0x40
133 #define Pin_7 0x80
134 #define Pin_Low 0x0F
135 #define Pin_High 0xF0
136 #define Pin_All 0xFF
142 typedef enum
143 {
144  EXTI_Tri_Edge = 0x00,
145  EXTI_Tri_Falling = 0x01
147 
148 /*-----------------------------------------------------------------------
149 | API FUNCTION |
150 -----------------------------------------------------------------------*/
151 
152 
153 
154 
155 #if (PER_LIB_GPIO_CTRL == 1)
156 
157  #if (PER_LIB_GPIO_INIT_CTRL == 1)
170  #define GPIO_MODE_WEAK_PULL(gpio_x,pin) \
171  do{ \
172  Px_M1(gpio_x) &= ~(pin); Px_M0(gpio_x) &= ~(pin); \
173  }while(0)
174 
175 
187  #define GPIO_MODE_IN_FLOATING(gpio_x,pin) \
188  do{ \
189  Px_M1(gpio_x) |= (pin); Px_M0(gpio_x) &= ~(pin); \
190  }while(0)
191 
192 
204  #define GPIO_MODE_OUT_OD(gpio_x,pin) \
205  do{ \
206  Px_M1(gpio_x) |= (pin); Px_M0(gpio_x) |= (pin); \
207  }while(0)
208 
209 
221  #define GPIO_MODE_OUT_PP(gpio_x,pin) \
222  do{ \
223  Px_M1(gpio_x) &= ~(pin); Px_M0(gpio_x) |= (pin); \
224  }while(0)
225 
226 
238  #define GPIO_PULL_UP_ENABLE(gpio_x,pin) \
239  do{ \
240  EAXFR_ENABLE(); \
241  Px_PU(gpio_x) |= (pin); \
242  EAXFR_DISABLE(); \
243  }while(0)
244 
245 
257  #define GPIO_PULL_UP_DISABLE(gpio_x,pin) \
258  do{ \
259  EAXFR_ENABLE(); \
260  Px_PU(gpio_x) &= ~(pin); \
261  EAXFR_DISABLE(); \
262  }while(0)
263 
264 
276  #define GPIO_ST_ENABLE(gpio_x,pin) \
277  do{ \
278  EAXFR_ENABLE(); \
279  Px_NCS(gpio_x) |= (pin); \
280  EAXFR_DISABLE(); \
281  }while(0)
282 
283 
295  #define GPIO_ST_DISABLE(gpio_x,pin) \
296  do{ \
297  EAXFR_ENABLE(); \
298  Px_NCS(gpio_x) &= ~(pin); \
299  EAXFR_DISABLE(); \
300  }while(0)
301 
302 
314  #define GPIO_SPEED_LOW(gpio_x,pin) \
315  do{ \
316  EAXFR_ENABLE(); \
317  Px_SR(gpio_x) |= (pin); \
318  EAXFR_DISABLE(); \
319  }while(0)
320 
321 
333  #define GPIO_SPEED_HIGH(gpio_x,pin) \
334  do{ \
335  EAXFR_ENABLE(); \
336  Px_SR(gpio_x) &= ~(pin); \
337  EAXFR_DISABLE(); \
338  }while(0)
339 
340 
352  #define GPIO_DRIVE_MEDIUM(gpio_x,pin) \
353  do{ \
354  EAXFR_ENABLE(); \
355  Px_DR(gpio_x) |= (pin); \
356  EAXFR_DISABLE(); \
357  }while(0)
358 
359 
371  #define GPIO_DRIVE_HIGH(gpio_x,pin) \
372  do{ \
373  EAXFR_ENABLE(); \
374  Px_DR(gpio_x) &= ~(pin); \
375  EAXFR_DISABLE(); \
376  }while(0)
377 
378  #endif
379 
380  #if (PER_LIB_GPIO_WORK_CTRL == 1)
381 
393  #define GPIO_FLIP_PIN_LEVEL(gpio_x,pin) \
394  do{ \
395  GPIO_Px(gpio_x) ^= pin; \
396  }while(0)
397 
398  #endif
399 
400  #if (PER_LIB_GPIO_NVIC_CTRL == 1)
401 
412 
413 
424 
425 
434 
435 
444 
445 
455 
456 
462  #define NVIC_EXTI0_CTRL(run) do{EX0 = run;}while(0)
463 
464 
470  #define NVIC_EXTI1_CTRL(run) do{EX1 = run;}while(0)
471 
472 
478  #define NVIC_EXTI2_CTRL(run) do{INTCLKO = (INTCLKO & 0xEF) | (run << 4);}while(0)
479 
480 
486  #define NVIC_EXTI0_PRI(pri) \
487  do{ \
488  IPH = (IPH & 0xFE) | ((pri & 0x02) >> 1); \
489  IP = (IP & 0xFE) | (pri & 0x01); \
490  }while(0)
491 
492 
498  #define NVIC_EXTI1_PRI(pri) \
499  do{ \
500  IPH = (IPH & 0xFB) | ((pri & 0x02) << 1); \
501  IP = (IP & 0xFB) | ((pri & 0x01) << 2); \
502  }while(0)
503 
509  #define NVIC_EXTI4_PRI(pri) \
510  do{ \
511  IP2H = (IPH & 0xEF) | ((pri & 0x02) << 3); \
512  IP2 = (IP & 0xEF) | ((pri & 0x01) << 4); \
513  }while(0)
514 
520  #define NVIC_EXTI3_CTRL(run) do{INTCLKO = (INTCLKO & 0xDF) | (run << 5);}while(0)
521 
522 
528  #define NVIC_EXTI4_CTRL(run) do{INTCLKO = (INTCLKO & 0xBF) | (run << 6);}while(0)
529 
530  #endif
531 
532 #endif
533 /*-----------------------------------------------------------------------
534 | END OF FLIE. (C) COPYRIGHT zeweni |
535 -----------------------------------------------------------------------*/
536 #endif
NVICPri_Type
Definition: ELL_CORE.h:99
BOOL
Definition: ELL_CORE.h:50
FSCSTATE
Definition: ELL_CORE.h:65
FSCSTATE NVIC_EXTI2_Init(BOOL run)
外部中断2中断初始化函数,固定下降沿触发。
FSCSTATE NVIC_EXTI4_Init(NVICPri_Type pri, BOOL run)
外部中断4中断初始化函数,固定下降沿触发。
FSCSTATE NVIC_EXTI1_Init(EXTITri_Type triMode, NVICPri_Type pri, BOOL run)
外部中断1中断初始化函数。
FSCSTATE NVIC_EXTI0_Init(EXTITri_Type triMode, NVICPri_Type pri, BOOL run)
外部中断0中断初始化函数。
EXTITri_Type
外部中断触发方式枚举体。
Definition: STC8x_GPIO.h:143
@ EXTI_Tri_Edge
Definition: STC8x_GPIO.h:144
@ EXTI_Tri_Falling
Definition: STC8x_GPIO.h:145
FSCSTATE NVIC_EXTI3_Init(BOOL run)
外部中断3中断初始化函数,固定下降沿触发。