1 /******************************************************************************
2 *
3 * @brief provide commond GPIO utilities.
4 *
5 *******************************************************************************/
6 #ifndef _GPIO_H_
7 #define _GPIO_H_
8
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12
13 #include "common.h"
14 #include "stdint.h"
15
16 /******************************************************************************
17 *define gpio pin name
18 *
19 *//*! @addtogroup gpio_pin_name_list
20 * @{
21 *******************************************************************************/
22 typedef enum
23 {
24 /* in GPIOA register */
25 GPIO_PTA0 = 0, /*!< GPIO Pin PTA0 */
26 GPIO_PTA1, /*!< GPIO Pin PTA1 */
27 GPIO_PTA2, /*!< GPIO Pin PTA2 */
28 GPIO_PTA3, /*!< GPIO Pin PTA3 */
29 GPIO_PTA4, /*!< GPIO Pin PTA4 */
30 GPIO_PTA5, /*!< GPIO Pin PTA5 */
31 GPIO_PTA6, /*!< GPIO Pin PTA6 */
32 GPIO_PTA7, /*!< GPIO Pin PTA7 */
33 GPIO_PTB0, /*!< GPIO Pin PTB0 */
34 GPIO_PTB1, /*!< GPIO Pin PTB1 */
35 GPIO_PTB2, /*!< GPIO Pin PTB2 */
36 GPIO_PTB3, /*!< GPIO Pin PTB3 */
37 GPIO_PTB4, /*!< GPIO Pin PTB4 */
38 GPIO_PTB5, /*!< GPIO Pin PTB5 */
39 GPIO_PTB6, /*!< GPIO Pin PTB6 */
40 GPIO_PTB7, /*!< GPIO Pin PTB7 */
41 GPIO_PTC0, /*!< GPIO Pin PTC0 */
42 GPIO_PTC1, /*!< GPIO Pin PTC1 */
43 GPIO_PTC2, /*!< GPIO Pin PTC2 */
44 GPIO_PTC3, /*!< GPIO Pin PTC3 */
45 GPIO_PTC4, /*!< GPIO Pin PTC4 */
46 GPIO_PTC5, /*!< GPIO Pin PTC5 */
47 GPIO_PTC6, /*!< GPIO Pin PTC6 */
48 GPIO_PTC7, /*!< GPIO Pin PTC7 */
49 GPIO_PTD0, /*!< GPIO Pin PTD0 */
50 GPIO_PTD1, /*!< GPIO Pin PTD1 */
51 GPIO_PTD2, /*!< GPIO Pin PTD2 */
52 GPIO_PTD3, /*!< GPIO Pin PTD3 */
53 GPIO_PTD4, /*!< GPIO Pin PTD4 */
54 GPIO_PTD5, /*!< GPIO Pin PTD5 */
55 GPIO_PTD6, /*!< GPIO Pin PTD6 */
56 GPIO_PTD7, /*!< GPIO Pin PTD7 */
57 /* in GPIOB register */
58 GPIO_PTE0, /*!< GPIO Pin PTE0 */
59 GPIO_PTE1, /*!< GPIO Pin PTE1 */
60 GPIO_PTE2, /*!< GPIO Pin PTE2 */
61 GPIO_PTE3, /*!< GPIO Pin PTE3 */
62 GPIO_PTE4, /*!< GPIO Pin PTE4 */
63 GPIO_PTE5, /*!< GPIO Pin PTE5 */
64 GPIO_PTE6, /*!< GPIO Pin PTE6 */
65 GPIO_PTE7, /*!< GPIO Pin PTE7 */
66 GPIO_PTF0, /*!< GPIO Pin PTF0 */
67 GPIO_PTF1, /*!< GPIO Pin PTF1 */
68 GPIO_PTF2, /*!< GPIO Pin PTF2 */
69 GPIO_PTF3, /*!< GPIO Pin PTF3 */
70 GPIO_PTF4, /*!< GPIO Pin PTF4 */
71 GPIO_PTF5, /*!< GPIO Pin PTF5 */
72 GPIO_PTF6, /*!< GPIO Pin PTF6 */
73 GPIO_PTF7, /*!< GPIO Pin PTF7 */
74 GPIO_PTG0, /*!< GPIO Pin PTG0 */
75 GPIO_PTG1, /*!< GPIO Pin PTG1 */
76 GPIO_PTG2, /*!< GPIO Pin PTG2 */
77 GPIO_PTG3, /*!< GPIO Pin PTG3 */
78 GPIO_PTG4, /*!< GPIO Pin PTG4 */
79 GPIO_PTG5, /*!< GPIO Pin PTG5 */
80 GPIO_PTG6, /*!< GPIO Pin PTG6 */
81 GPIO_PTG7, /*!< GPIO Pin PTG7 */
82 GPIO_PTH0, /*!< GPIO Pin PTH0 */
83 GPIO_PTH1, /*!< GPIO Pin PTH1 */
84 GPIO_PTH2, /*!< GPIO Pin PTH2 */
85 GPIO_PTH3, /*!< GPIO Pin PTH3 */
86 GPIO_PTH4, /*!< GPIO Pin PTH4 */
87 GPIO_PTH5, /*!< GPIO Pin PTH5 */
88 GPIO_PTH6, /*!< GPIO Pin PTH6 */
89 GPIO_PTH7, /*!< GPIO Pin PTH7 */
90 /* the following pins are not in NV322 */
91 GPIO_PTI0, /*!< GPIO Pin PTI0 */
92 GPIO_PTI1, /*!< GPIO Pin PTI1 */
93 GPIO_PTI2, /*!< GPIO Pin PTI2 */
94 GPIO_PTI3, /*!< GPIO Pin PTI3 */
95 GPIO_PTI4, /*!< GPIO Pin PTI4 */
96 GPIO_PTI5, /*!< GPIO Pin PTI5 */
97 GPIO_PTI6, /*!< GPIO Pin PTI6 */
98 GPIO_PTI7, /*!< GPIO Pin PTI7 */
99 GPIO_PIN_MAX,
100 } GPIO_PinType;
101 /*! @} End of gpio_pin_name_list */
102
103 /******************************************************************************
104 *define gpio pin mask
105 *
106 *//*! @addtogroup gpio_pin_mask_list
107 * @{
108 *******************************************************************************/
109 typedef enum
110 {
111 /* in GPIOA register */
112 GPIO_PTA0_MASK = (1<<0), /*!< GPIO Pin PTA0 bit mask */
113 GPIO_PTA1_MASK = (1<<1), /*!< GPIO Pin PTA1 bit mask */
114 GPIO_PTA2_MASK = (1<<2), /*!< GPIO Pin PTA2 bit mask */
115 GPIO_PTA3_MASK = (1<<3), /*!< GPIO Pin PTA3 bit mask */
116 GPIO_PTA4_MASK = (1<<4), /*!< GPIO Pin PTA4 bit mask */
117 GPIO_PTA5_MASK = (1<<5), /*!< GPIO Pin PTA5 bit mask */
118 GPIO_PTA6_MASK = (1<<6), /*!< GPIO Pin PTA6 bit mask */
119 GPIO_PTA7_MASK = (1<<7), /*!< GPIO Pin PTA7 bit mask */
120 GPIO_PTB0_MASK = (1<<8), /*!< GPIO Pin PTB0 bit mask */
121 GPIO_PTB1_MASK = (1<<9), /*!< GPIO Pin PTB1 bit mask */
122 GPIO_PTB2_MASK = (1<<10), /*!< GPIO Pin PTB2 bit mask */
123 GPIO_PTB3_MASK = (1<<11), /*!< GPIO Pin PTB3 bit mask */
124 GPIO_PTB4_MASK = (1<<12), /*!< GPIO Pin PTB4 bit mask */
125 GPIO_PTB5_MASK = (1<<13), /*!< GPIO Pin PTB5 bit mask */
126 GPIO_PTB6_MASK = (1<<14), /*!< GPIO Pin PTB6 bit mask */
127 GPIO_PTB7_MASK = (1<<15), /*!< GPIO Pin PTB7 bit mask */
128 GPIO_PTC0_MASK = (1<<16), /*!< GPIO Pin PTC0 bit mask */
129 GPIO_PTC1_MASK = (1<<17), /*!< GPIO Pin PTC1 bit mask */
130 GPIO_PTC2_MASK = (1<<18), /*!< GPIO Pin PTC2 bit mask */
131 GPIO_PTC3_MASK = (1<<19), /*!< GPIO Pin PTC3 bit mask */
132 GPIO_PTC4_MASK = (1<<20), /*!< GPIO Pin PTC4 bit mask */
133 GPIO_PTC5_MASK = (1<<21), /*!< GPIO Pin PTC5 bit mask */
134 GPIO_PTC6_MASK = (1<<22), /*!< GPIO Pin PTC6 bit mask */
135 GPIO_PTC7_MASK = (1<<23), /*!< GPIO Pin PTC7 bit mask */
136 GPIO_PTD0_MASK = (1<<24), /*!< GPIO Pin PTD0 bit mask */
137 GPIO_PTD1_MASK = (1<<25), /*!< GPIO Pin PTD1 bit mask */
138 GPIO_PTD2_MASK = (1<<26), /*!< GPIO Pin PTD2 bit mask */
139 GPIO_PTD3_MASK = (1<<27), /*!< GPIO Pin PTD3 bit mask */
140 GPIO_PTD4_MASK = (1<<28), /*!< GPIO Pin PTD4 bit mask */
141 GPIO_PTD5_MASK = (1<<29), /*!< GPIO Pin PTD5 bit mask */
142 GPIO_PTD6_MASK = (1<<30), /*!< GPIO Pin PTD6 bit mask */
143 GPIO_PTD7_MASK = (1<<31), /*!< GPIO Pin PTD7 bit mask */
144 /* in GPIOB register */
145 GPIO_PTE0_MASK = (1<<0), /*!< GPIO Pin PTE0 bit mask */
146 GPIO_PTE1_MASK = (1<<1), /*!< GPIO Pin PTE1 bit mask */
147 GPIO_PTE2_MASK = (1<<2), /*!< GPIO Pin PTE2 bit mask */
148 GPIO_PTE3_MASK = (1<<3), /*!< GPIO Pin PTE3 bit mask */
149 GPIO_PTE4_MASK = (1<<4), /*!< GPIO Pin PTE4 bit mask */
150 GPIO_PTE5_MASK = (1<<5), /*!< GPIO Pin PTE5 bit mask */
151 GPIO_PTE6_MASK = (1<<6), /*!< GPIO Pin PTE6 bit mask */
152 GPIO_PTE7_MASK = (1<<7), /*!< GPIO Pin PTE7 bit mask */
153 GPIO_PTF0_MASK = (1<<8), /*!< GPIO Pin PTF0 bit mask */
154 GPIO_PTF1_MASK = (1<<9), /*!< GPIO Pin PTF1 bit mask */
155 GPIO_PTF2_MASK = (1<<10), /*!< GPIO Pin PTF2 bit mask */
156 GPIO_PTF3_MASK = (1<<11), /*!< GPIO Pin PTF3 bit mask */
157 GPIO_PTF4_MASK = (1<<12), /*!< GPIO Pin PTF4 bit mask */
158 GPIO_PTF5_MASK = (1<<13), /*!< GPIO Pin PTF5 bit mask */
159 GPIO_PTF6_MASK = (1<<14), /*!< GPIO Pin PTF6 bit mask */
160 GPIO_PTF7_MASK = (1<<15), /*!< GPIO Pin PTF7 bit mask */
161 GPIO_PTG0_MASK = (1<<16), /*!< GPIO Pin PTG0 bit mask */
162 GPIO_PTG1_MASK = (1<<17), /*!< GPIO Pin PTG1 bit mask */
163 GPIO_PTG2_MASK = (1<<18), /*!< GPIO Pin PTG2 bit mask */
164 GPIO_PTG3_MASK = (1<<19), /*!< GPIO Pin PTG3 bit mask */
165 GPIO_PTG4_MASK = (1<<20), /*!< GPIO Pin PTG4 bit mask */
166 GPIO_PTG5_MASK = (1<<21), /*!< GPIO Pin PTG5 bit mask */
167 GPIO_PTG6_MASK = (1<<22), /*!< GPIO Pin PTG6 bit mask */
168 GPIO_PTG7_MASK = (1<<23), /*!< GPIO Pin PTG7 bit mask */
169 GPIO_PTH0_MASK = (1<<24), /*!< GPIO Pin PTH0 bit mask */
170 GPIO_PTH1_MASK = (1<<25), /*!< GPIO Pin PTH1 bit mask */
171 GPIO_PTH2_MASK = (1<<26), /*!< GPIO Pin PTH2 bit mask */
172 GPIO_PTH3_MASK = (1<<27), /*!< GPIO Pin PTH3 bit mask */
173 GPIO_PTH4_MASK = (1<<28), /*!< GPIO Pin PTH4 bit mask */
174 GPIO_PTH5_MASK = (1<<29), /*!< GPIO Pin PTH5 bit mask */
175 GPIO_PTH6_MASK = (1<<30), /*!< GPIO Pin PTH6 bit mask */
176 GPIO_PTH7_MASK = (1<<31), /*!< GPIO Pin PTH7 bit mask */
177 /* in GPIOC register */
178 GPIO_PTI0_MASK = (1<<0), /*!< GPIO Pin PTI0 bit mask */
179 GPIO_PTI1_MASK = (1<<1), /*!< GPIO Pin PTI1 bit mask */
180 GPIO_PTI2_MASK = (1<<2), /*!< GPIO Pin PTI2 bit mask */
181 GPIO_PTI3_MASK = (1<<3), /*!< GPIO Pin PTI3 bit mask */
182 GPIO_PTI4_MASK = (1<<4), /*!< GPIO Pin PTI4 bit mask */
183 GPIO_PTI5_MASK = (1<<5), /*!< GPIO Pin PTI5 bit mask */
184 GPIO_PTI6_MASK = (1<<6), /*!< GPIO Pin PTI6 bit mask */
185 GPIO_PTI7_MASK = (1<<7), /*!< GPIO Pin PTI7 bit mask */
186 } GPIO_PinMaskType;
187 /*! @} End of gpio_pin_mask_list */
188
189
190 /******************************************************************************
191 *define gpio pin config type
192 *
193 *//*! @addtogroup gpio_pin_config_type_list
194 * @{
195 *******************************************************************************/
196 /*
197 * . Internal pullup is disabled if the pin is configured as an output
198 * . High-current drive function is disabled, if the pin is configured as an input
199 * Only PTH1/0, PTE1/0, PTD1/0, PTB5/4 support Hight-current Drive.
200 */
201 typedef enum
202 {
203 GPIO_PinOutput = 0, /*!< set pin as outout */
204 GPIO_PinInput, /*!< set pin as input */
205 GPIO_PinInput_InternalPullup, /*!< set internal pullup for input pin */
206 GPIO_PinOutput_HighCurrent, /*!< set high drive for output pin */
207 } GPIO_PinConfigType;
208 /*! @} End of gpio_pin_config_type_list */
209
210 /******************************************************************************
211 * define GPIO APIs
212 *
213 *//*! @addtogroup gpio_api_list
214 * @{
215 *******************************************************************************/
216
217 /*****************************************************************************//*!
218 * @brief Toggle the pins which are specified by u32PinMask in single cycle.
219 *
220 * @param[in] pGPIO Pointer to GPIO module, can be FGPIOA/FGPIOB.
221 * @param[in] u32PinMask Specify GPIO pin need to be toggled
222 *
223 * @return none
224 *
225 * @ Pass/ Fail criteria: none
226 *****************************************************************************/
FGPIO_Toggle(FGPIO_Type * pFGPIO,uint32_t u32PinMask)227 __STATIC_INLINE void FGPIO_Toggle(FGPIO_Type *pFGPIO, uint32_t u32PinMask)
228 {
229 pFGPIO->PTOR = u32PinMask; /* Toggle the pins specified by u32PinMask */
230 }
231
232 /*****************************************************************************//*!
233 * @brief Read input data from GPIO which is specified by pGPIO in single cycle.
234 *
235 * @param[in] pGPIO Pointer to GPIO module, can be FGPIOA/FGPIOB.
236 *
237 * @return GPIO input value unsigned int 32-bit
238 *
239 * @ Pass/ Fail criteria: none
240 *****************************************************************************/
FGPIO_Read(FGPIO_Type * pFGPIO)241 __STATIC_INLINE uint32_t FGPIO_Read(FGPIO_Type *pFGPIO)
242 {
243 return (pFGPIO->PDIR); /* Read Port Data Input Register */
244
245 }
246
247 /*****************************************************************************//*!
248 * @brief Write output data to GPIO which is specified by pGPIO in single cycle.
249 *
250 * @param[in] pGPIO Pointer to GPIO module, can be FGPIOA/FGPIOB.
251 * @param[in] u32Value value to output
252 *
253 * @return none
254 *
255 * @ Pass/ Fail criteria: none
256 *****************************************************************************/
FGPIO_Write(FGPIO_Type * pFGPIO,uint32_t u32Value)257 __STATIC_INLINE void FGPIO_Write(FGPIO_Type *pFGPIO, uint32_t u32Value)
258 {
259 pFGPIO->PDOR = u32Value; /* Write Port Ouput Data Register */
260 }
261
262 void GPIO_DeInit(GPIO_Type *pGPIO);
263 void GPIO_Init(GPIO_Type *pGPIO, uint32_t u32PinMask, GPIO_PinConfigType sGpioType);
264 void GPIO_Toggle(GPIO_Type *pGPIO, uint32_t u32PinMask);
265 uint32_t GPIO_Read(GPIO_Type *pGPIO);
266 void GPIO_Write(GPIO_Type *pGPIO, uint32_t u32Value);
267 void GPIO_PinInit(GPIO_PinType GPIO_Pin, GPIO_PinConfigType GPIO_PinConfig);
268 void GPIO_PinToggle(GPIO_PinType GPIO_Pin);
269 void GPIO_PinSet(GPIO_PinType GPIO_Pin);
270 void GPIO_PinClear(GPIO_PinType GPIO_Pin);
271 uint8_t GPIO_BitRead(GPIO_PinType GPIO_Pin);
272
273 /*! @} End of gpio_api_list */
274
275 #ifdef __cplusplus
276 }
277 #endif
278 #endif /* #ifndef _GPIO_H_ */
279