1 /**
2   ******************************************************************************
3   * @file    lib_gpio.h
4   * @author  Application Team
5   * @version V4.4.0
6   * @date    2018-09-27
7   * @brief   GPIO library.
8   ******************************************************************************
9   * @attention
10   *
11   ******************************************************************************
12   */
13 #ifndef __LIB_GPIO_H
14 #define __LIB_GPIO_H
15 
16 #ifdef __cplusplus
17  extern "C" {
18 #endif
19 
20 #include "target.h"
21 
22 typedef struct
23 {
24   uint32_t GPIO_Pin;
25   uint32_t GPIO_Mode;
26 } GPIO_InitType;
27 
28 /**
29   * @brief Bit_State_enumeration
30   */
31 typedef enum {
32     Bit_RESET = 0,
33     Bit_SET
34 } BitState;
35 
36 //GPIO_Pin
37 #define GPIO_Pin_0                 ((uint16_t)0x0001)
38 #define GPIO_Pin_1                 ((uint16_t)0x0002)
39 #define GPIO_Pin_2                 ((uint16_t)0x0004)
40 #define GPIO_Pin_3                 ((uint16_t)0x0008)
41 #define GPIO_Pin_4                 ((uint16_t)0x0010)
42 #define GPIO_Pin_5                 ((uint16_t)0x0020)
43 #define GPIO_Pin_6                 ((uint16_t)0x0040)
44 #define GPIO_Pin_7                 ((uint16_t)0x0080)
45 #define GPIO_Pin_8                 ((uint16_t)0x0100)
46 #define GPIO_Pin_9                 ((uint16_t)0x0200)
47 #define GPIO_Pin_10                ((uint16_t)0x0400)
48 #define GPIO_Pin_11                ((uint16_t)0x0800)
49 #define GPIO_Pin_12                ((uint16_t)0x1000)
50 #define GPIO_Pin_13                ((uint16_t)0x2000)
51 #define GPIO_Pin_14                ((uint16_t)0x4000)
52 #define GPIO_Pin_15                ((uint16_t)0x8000)
53 #define GPIO_Pin_All               ((uint16_t)0xFFFF)
54 //GPIO_Mode
55 #define GPIO_Mode_INPUT           (0xCU)
56 #define GPIO_Mode_OUTPUT_CMOS     (0x2U)
57 #define GPIO_Mode_OUTPUT_OD       (0x3U)
58 #define GPIO_Mode_INOUT_OD        (0xBU)
59 #define GPIO_Mode_INOUT_CMOS      (0xAU)
60 #define GPIO_Mode_FORBIDDEN       (0x4U)
61 
62 //GPIO AF
63 #define GPIOB_AF_PLLHDIV     IOB_SEL_SEL1
64 #define GPIOB_AF_OSC         IOB_SEL_SEL6
65 #define GPIOB_AF_PLLLOUT     IOB_SEL_SEL2
66 #define GPIOE_AF_CMP1O       IOE_SEL_SEL7
67 
68 //PMUIO AF
69 #define PMUIO7_AF_PLLDIV     PMU_IOASEL_SEL7
70 #define PMUIO_AF_CMP2O       PMU_IOASEL_SEL6
71 #define PMUIO3_AF_PLLDIV     PMU_IOASEL_SEL3
72 #define PMUIO_AF_Msk        (PMUIO7_AF_PLLDIV | PMUIO_AF_CMP2O | PMUIO3_AF_PLLDIV)
73 
74 //GPIO pin remap
75 #define GPIO_REMAP_I2C       IO_MISC_I2CIOC
76 
77 //PLLDIV
78 #define  GPIO_PLLDIV_1            IO_MISC_PLLHDIV_1
79 #define  GPIO_PLLDIV_2            IO_MISC_PLLHDIV_2
80 #define  GPIO_PLLDIV_4            IO_MISC_PLLHDIV_4
81 #define  GPIO_PLLDIV_8            IO_MISC_PLLHDIV_8
82 #define  GPIO_PLLDIV_16           IO_MISC_PLLHDIV_16
83 
84 /* Private macros ------------------------------------------------------------*/
85 #define IS_GPIO_PIN(__PIN__)  ((((__PIN__) & GPIO_Pin_All) != 0UL) &&\
86                                (((__PIN__) & ~GPIO_Pin_All) == 0UL))
87 
88 #define IS_GPIO_PINR(__PINR__)  (((__PINR__) == GPIO_Pin_0) ||\
89                                  ((__PINR__) == GPIO_Pin_1) ||\
90                                  ((__PINR__) == GPIO_Pin_2) ||\
91                                  ((__PINR__) == GPIO_Pin_3) ||\
92                                  ((__PINR__) == GPIO_Pin_4) ||\
93                                  ((__PINR__) == GPIO_Pin_5) ||\
94                                  ((__PINR__) == GPIO_Pin_6) ||\
95                                  ((__PINR__) == GPIO_Pin_7) ||\
96                                  ((__PINR__) == GPIO_Pin_8) ||\
97                                  ((__PINR__) == GPIO_Pin_9) ||\
98                                  ((__PINR__) == GPIO_Pin_10) ||\
99                                  ((__PINR__) == GPIO_Pin_11) ||\
100                                  ((__PINR__) == GPIO_Pin_12) ||\
101                                  ((__PINR__) == GPIO_Pin_13) ||\
102                                  ((__PINR__) == GPIO_Pin_14) ||\
103                                  ((__PINR__) == GPIO_Pin_15))
104 
105 #define IS_GPIO_MODE(__MODE__)  (((__MODE__) ==  GPIO_Mode_INPUT)       ||\
106                                  ((__MODE__) ==  GPIO_Mode_OUTPUT_CMOS) ||\
107                                  ((__MODE__) ==  GPIO_Mode_OUTPUT_OD)   ||\
108                                  ((__MODE__) ==  GPIO_Mode_INOUT_OD)    ||\
109                                  ((__MODE__) ==  GPIO_Mode_INOUT_CMOS)  ||\
110                                  ((__MODE__) ==  GPIO_Mode_FORBIDDEN))
111 
112 #define IS_GPIO_BITVAL(__BITVAL__)  (((__BITVAL__) == 1U) || ((__BITVAL__) == 0U))
113 
114 #define IS_GPIO_GPIOAF(__GPIOAF__)  (((__GPIOAF__) == GPIOB_AF_PLLHDIV) ||\
115                                      ((__GPIOAF__) == GPIOB_AF_OSC)     ||\
116                                      ((__GPIOAF__) == GPIOE_AF_CMP1O)   ||\
117                                      ((__GPIOAF__) == GPIOB_AF_PLLLOUT))
118 
119 #define IS_GPIO_PMUIOAF(__PMUIOAF__)  ((((__PMUIOAF__) & PMUIO_AF_Msk) != 0U) &&\
120                                        (((__PMUIOAF__) & ~PMUIO_AF_Msk) == 0U))
121 
122 #define IS_GPIO_REMAP(__REMAP__)  ((__REMAP__) == GPIO_REMAP_I2C)
123 
124 #define IS_GPIO_PLLDIV(__PLLDIV__)  (((__PLLDIV__) == GPIO_PLLDIV_1) ||\
125                                      ((__PLLDIV__) == GPIO_PLLDIV_2) ||\
126                                      ((__PLLDIV__) == GPIO_PLLDIV_4) ||\
127                                      ((__PLLDIV__) == GPIO_PLLDIV_8) ||\
128                                      ((__PLLDIV__) == GPIO_PLLDIV_16))
129 
130 /* Exported Functions ------------------------------------------------------- */
131 /* GPIO Exported Functions Group1:
132                                    Initialization and functions --------------*/
133 void GPIOBToF_Init(GPIO_TypeDef *GPIOx, GPIO_InitType *InitStruct);
134 void GPIOA_Init(GPIOA_TypeDef *GPIOx, GPIO_InitType *InitStruct);
135 /* GPIO Exported Functions Group2:
136                                    Read input data ---------------------------*/
137 uint8_t GPIOBToF_ReadInputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
138 uint8_t GPIOA_ReadInputDataBit(GPIOA_TypeDef *GPIOx, uint16_t GPIO_Pin);
139 uint16_t GPIOBToF_ReadInputData(GPIO_TypeDef* GPIOx);
140 uint16_t GPIOA_ReadInputData(GPIOA_TypeDef* GPIOx);
141 /* GPIO Exported Functions Group3:
142                                    Read output data --------------------------*/
143 uint8_t GPIOBToF_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
144 uint8_t GPIOA_ReadOutputDataBit(GPIOA_TypeDef* GPIOx, uint16_t GPIO_Pin);
145 uint16_t GPIOBToF_ReadOutputData(GPIO_TypeDef* GPIOx);
146 uint16_t GPIOA_ReadOutputData(GPIOA_TypeDef* GPIOx);
147 /* GPIO Exported Functions Group4:
148                                    Write output data -------------------------*/
149 void GPIOBToF_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
150 void GPIOA_SetBits(GPIOA_TypeDef* GPIOx, uint16_t GPIO_Pin);
151 void GPIOBToF_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
152 void GPIOA_ResetBits(GPIOA_TypeDef* GPIOx, uint16_t GPIO_Pin);
153 void GPIOBToF_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint8_t val);
154 void GPIOA_WriteBit(GPIOA_TypeDef* GPIOx, uint16_t GPIO_Pin, uint8_t val);
155 void GPIOBToF_Write(GPIO_TypeDef* GPIOx, uint16_t val);
156 void GPIOA_Write(GPIOA_TypeDef* GPIOx, uint16_t val);
157 /* GPIO Exported Functions Group5:
158                                    IO AF configure ---------------------------*/
159 void GPIOBToF_AFConfig(GPIO_TypeDef* GPIOx, uint32_t GPIO_AFx, uint8_t NewState);
160 void GPIOA_AFConfig(uint32_t PMUIO_AFx, uint8_t NewState);
161 /* GPIO Exported Functions Group6:
162                                    IO Remap configure ------------------------*/
163 void GPIO_PinRemapConfig(uint32_t GPIO_Remap, uint8_t NewState);
164 /* GPIO Exported Functions Group7:
165                                    Others ------------------------------------*/
166 void GPIO_PLLDIV_Config(uint32_t Divider);
167 void GPIOA_NoDeg_Cmd( uint16_t GPIO_Pin, uint8_t NewState);
168 
169 #ifdef __cplusplus
170 }
171 #endif
172 
173 #endif  /* __LIB_GPIO_H */
174 
175 /*********************************** END OF FILE ******************************/
176