• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 /**
17  * @file iot_gpio_ex.h
18  *
19  * @brief Declares the extended GPIO interface functions.
20  *
21  * These functions are used for settings GPIO pulls and driver strength. \n
22  *
23  * @since 1.0
24  * @version 1.0
25  */
26 
27 #ifndef IOT_GPIO_EX_H
28 #define IOT_GPIO_EX_H
29 
30 /**
31  * @brief Enumerates GPIO pull-up or pull-down settings.
32  */
33 typedef enum {
34     /** No pull */
35     IOT_IO_PULL_NONE,
36     /** Pull-up */
37     IOT_IO_PULL_UP,
38     /** Pull-down */
39     IOT_IO_PULL_DOWN,
40     /** Maximum value */
41     IOT_IO_PULL_MAX,
42 } IotIoPull;
43 
44 /**
45  * @ingroup iot_io
46  *
47  * GPIO pin ID. CNcomment:IO硬件管脚编号。CNend
48  */
49 typedef enum {
50     IOT_IO_NAME_GPIO_0, /* <GPIO0 */
51     IOT_IO_NAME_GPIO_1, /* <GPIO1 */
52     IOT_IO_NAME_GPIO_2, /* <GPIO2 */
53     IOT_IO_NAME_GPIO_3, /* <GPIO3 */
54     IOT_IO_NAME_GPIO_4, /* <GPIO4 */
55     IOT_IO_NAME_GPIO_5, /* <GPIO5 */
56     IOT_IO_NAME_GPIO_6, /* <GPIO6 */
57     IOT_IO_NAME_GPIO_7, /* <GPIO7 */
58     IOT_IO_NAME_GPIO_8, /* <GPIO8 */
59     IOT_IO_NAME_GPIO_9, /* <GPIO9 */
60     IOT_IO_NAME_GPIO_10, /* <GPIO10 */
61     IOT_IO_NAME_GPIO_11, /* <GPIO11 */
62     IOT_IO_NAME_GPIO_12, /* <GPIO12 */
63     IOT_IO_NAME_GPIO_13, /* <GPIO13 */
64     IOT_IO_NAME_GPIO_14, /* <GPIO14 */
65     IOT_IO_NAME_SFC_CSN, /* <SFC_CSN */
66     IOT_IO_NAME_SFC_IO1, /* <SFC_IO1 */
67     IOT_IO_NAME_SFC_IO2, /* <SFC_IO2 */
68     IOT_IO_NAME_SFC_IO0, /* <SFC_IO0 */
69     IOT_IO_NAME_SFC_CLK, /* <SFC_CLK */
70     IOT_IO_NAME_SFC_IO3, /* <SFC_IO3 */
71     IOT_IO_NAME_MAX,
72 } IotIoName;
73 
74 /**
75  * @ingroup iot_io
76  *
77  * GPIO_0 pin function.CNcomment:GPIO_0管脚功能。CNend
78  */
79 typedef enum {
80     IOT_IO_FUNC_GPIO_0_GPIO,
81     IOT_IO_FUNC_GPIO_0_UART1_TXD = 2,
82     IOT_IO_FUNC_GPIO_0_SPI1_CK,
83     IOT_IO_FUNC_GPIO_0_JTAG_TDO,
84     IOT_IO_FUNC_GPIO_0_PWM3_OUT,
85     IOT_IO_FUNC_GPIO_0_I2C1_SDA,
86 } IotIoFuncGpio0;
87 
88 /**
89 * @ingroup iot_io
90 *
91 * GPIO_1 pin function.CNcomment:GPIO_1管脚功能。CNend
92 */
93 typedef enum {
94     IOT_IO_FUNC_GPIO_1_GPIO,
95     IOT_IO_FUNC_GPIO_1_UART1_RXD = 2,
96     IOT_IO_FUNC_GPIO_1_SPI1_RXD,
97     IOT_IO_FUNC_GPIO_1_JTAG_TCK,
98     IOT_IO_FUNC_GPIO_1_PWM4_OUT,
99     IOT_IO_FUNC_GPIO_1_I2C1_SCL,
100     IOT_IO_FUNC_GPIO_1_BT_FREQ,
101 } IotIoFuncGpio1;
102 
103 /**
104 * @ingroup iot_io
105 *
106 * GPIO_2 pin function.CNcomment:GPIO_2管脚功能。CNend
107 */
108 typedef enum {
109     IOT_IO_FUNC_GPIO_2_GPIO,
110     IOT_IO_FUNC_GPIO_2_UART1_RTS_N = 2,
111     IOT_IO_FUNC_GPIO_2_SPI1_TXD,
112     IOT_IO_FUNC_GPIO_2_JTAG_TRSTN,
113     IOT_IO_FUNC_GPIO_2_PWM2_OUT,
114     IOT_IO_FUNC_GPIO_2_SSI_CLK = 7,
115 } IotIoFuncGpio2;
116 
117 /**
118 * @ingroup iot_io
119 *
120 * GPIO_3 pin function.CNcomment:GPIO_3管脚功能。CNend
121 */
122 typedef enum {
123     IOT_IO_FUNC_GPIO_3_GPIO,
124     IOT_IO_FUNC_GPIO_3_UART0_TXD,
125     IOT_IO_FUNC_GPIO_3_UART1_CTS_N,
126     IOT_IO_FUNC_GPIO_3_SPI1_CSN,
127     IOT_IO_FUNC_GPIO_3_JTAG_TDI,
128     IOT_IO_FUNC_GPIO_3_PWM5_OUT,
129     IOT_IO_FUNC_GPIO_3_I2C1_SDA,
130     IOT_IO_FUNC_GPIO_3_SSI_DATA,
131 } IotIoFuncGpio3;
132 
133 /**
134 * @ingroup iot_io
135 *
136 * GPIO_4 pin function.CNcomment:GPIO_4管脚功能。CNend
137 */
138 typedef enum {
139     IOT_IO_FUNC_GPIO_4_GPIO,
140     IOT_IO_FUNC_GPIO_4_UART0_RXD = 2,
141     IOT_IO_FUNC_GPIO_4_JTAG_TMS = 4,
142     IOT_IO_FUNC_GPIO_4_PWM1_OUT,
143     IOT_IO_FUNC_GPIO_4_I2C1_SCL,
144 } IotIoFuncGpio4;
145 
146 /**
147 * @ingroup iot_io
148 *
149 * GPIO_5 pin function.CNcomment:GPIO_5管脚功能。CNend
150 */
151 typedef enum {
152     IOT_IO_FUNC_GPIO_5_GPIO,
153     IOT_IO_FUNC_GPIO_5_UART1_RXD = 2,
154     IOT_IO_FUNC_GPIO_5_SPI0_CSN,
155     IOT_IO_FUNC_GPIO_5_PWM2_OUT = 5,
156     IOT_IO_FUNC_GPIO_5_I2S0_MCLK,
157     IOT_IO_FUNC_GPIO_5_BT_STATUS,
158 } IotIoFuncGpio5;
159 
160 /**
161 * @ingroup iot_io
162 *
163 * GPIO_6 pin function.CNcomment:GPIO_6管脚功能。CNend
164 */
165 typedef enum {
166     IOT_IO_FUNC_GPIO_6_GPIO,
167     IOT_IO_FUNC_GPIO_6_UART1_TXD = 2,
168     IOT_IO_FUNC_GPIO_6_SPI0_CK,
169     IOT_IO_FUNC_GPIO_6_PWM3_OUT = 5,
170     IOT_IO_FUNC_GPIO_6_I2S0_TX,
171     IOT_IO_FUNC_GPIO_6_COEX_SWITCH,
172 } IotIoFuncGpio6;
173 
174 /**
175 * @ingroup iot_io
176 *
177 * GPIO_7 pin function.CNcomment:GPIO_7管脚功能。CNend
178 */
179 typedef enum {
180     IOT_IO_FUNC_GPIO_7_GPIO,
181     IOT_IO_FUNC_GPIO_7_UART1_CTS_N = 2,
182     IOT_IO_FUNC_GPIO_7_SPI0_RXD,
183     IOT_IO_FUNC_GPIO_7_PWM0_OUT = 5,
184     IOT_IO_FUNC_GPIO_7_I2S0_BCLK,
185     IOT_IO_FUNC_GPIO_7_BT_ACTIVE,
186 } IotIoFuncGpio7;
187 
188 /**
189 * @ingroup iot_io
190 *
191 * GPIO_8 pin function.CNcomment:GPIO_8管脚功能。CNend
192 */
193 typedef enum {
194     IOT_IO_FUNC_GPIO_8_GPIO,
195     IOT_IO_FUNC_GPIO_8_UART1_RTS_N = 2,
196     IOT_IO_FUNC_GPIO_8_SPI0_TXD,
197     IOT_IO_FUNC_GPIO_8_PWM1_OUT = 5,
198     IOT_IO_FUNC_GPIO_8_I2S0_WS,
199     IOT_IO_FUNC_GPIO_8_WLAN_ACTIVE,
200 } IotIoFuncGpio8;
201 
202 /**
203 * @ingroup iot_io
204 *
205 * GPIO_9 pin function.CNcomment:GPIO_9管脚功能。CNend
206 */
207 typedef enum {
208     IOT_IO_FUNC_GPIO_9_GPIO,
209     IOT_IO_FUNC_GPIO_9_I2C0_SCL,
210     IOT_IO_FUNC_GPIO_9_UART2_RTS_N,
211     IOT_IO_FUNC_GPIO_9_SDIO_D2,
212     IOT_IO_FUNC_GPIO_9_SPI0_TXD,
213     IOT_IO_FUNC_GPIO_9_PWM0_OUT,
214     IOT_IO_FUNC_GPIO_9_I2S0_MCLK = 7,
215 } IotIoFuncGpio9;
216 
217 /**
218 * @ingroup iot_io
219 *
220 * GPIO_10 pin function.CNcomment:GPIO_10管脚功能。CNend
221 */
222 typedef enum {
223     IOT_IO_FUNC_GPIO_10_GPIO,
224     IOT_IO_FUNC_GPIO_10_I2C0_SDA,
225     IOT_IO_FUNC_GPIO_10_UART2_CTS_N,
226     IOT_IO_FUNC_GPIO_10_SDIO_D3,
227     IOT_IO_FUNC_GPIO_10_SPI0_CK,
228     IOT_IO_FUNC_GPIO_10_PWM1_OUT,
229     IOT_IO_FUNC_GPIO_10_I2S0_TX = 7,
230 } IotIoFuncGpio10;
231 
232 /**
233 * @ingroup iot_io
234 *
235 * GPIO_11 pin function.CNcomment:GPIO_11管脚功能。CNend
236 */
237 typedef enum {
238     IOT_IO_FUNC_GPIO_11_GPIO,
239     IOT_IO_FUNC_GPIO_11_UART2_TXD = 2,
240     IOT_IO_FUNC_GPIO_11_SDIO_CMD,
241     IOT_IO_FUNC_GPIO_11_SPI0_RXD,
242     IOT_IO_FUNC_GPIO_11_PWM2_OUT,
243     IOT_IO_FUNC_GPIO_11_RF_TX_EN_EXT,
244     IOT_IO_FUNC_GPIO_11_I2S0_RX,
245 } IotIoFuncGpio11;
246 
247 /**
248 * @ingroup iot_io
249 *
250 * GPIO_12 pin function.CNcomment:GPIO_12管脚功能。CNend
251 */
252 typedef enum {
253     IOT_IO_FUNC_GPIO_12_GPIO,
254     IOT_IO_FUNC_GPIO_12_UART2_RXD = 2,
255     IOT_IO_FUNC_GPIO_12_SDIO_CLK,
256     IOT_IO_FUNC_GPIO_12_SPI0_CSN,
257     IOT_IO_FUNC_GPIO_12_PWM3_OUT,
258     IOT_IO_FUNC_GPIO_12_RF_RX_EN_EXT,
259     IOT_IO_FUNC_GPIO_12_I2S0_BCLK,
260 } IotIoFuncGpio12;
261 
262 /**
263 * @ingroup iot_io
264 *
265 * GPIO_13 pin function.CNcomment:GPIO_13管脚功能。CNend
266 */
267 typedef enum {
268     IOT_IO_FUNC_GPIO_13_SSI_DATA,
269     IOT_IO_FUNC_GPIO_13_UART0_TXD,
270     IOT_IO_FUNC_GPIO_13_UART2_RTS_N,
271     IOT_IO_FUNC_GPIO_13_SDIO_D0,
272     IOT_IO_FUNC_GPIO_13_GPIO,
273     IOT_IO_FUNC_GPIO_13_PWM4_OUT,
274     IOT_IO_FUNC_GPIO_13_I2C0_SDA,
275     IOT_IO_FUNC_GPIO_13_I2S0_WS,
276 } IotIoFuncGpio13;
277 
278 /**
279 * @ingroup iot_io
280 *
281 * GPIO_14 pin function.CNcomment:GPIO_14管脚功能。CNend
282 */
283 typedef enum {
284     IOT_IO_FUNC_GPIO_14_SSI_CLK,
285     IOT_IO_FUNC_GPIO_14_UART0_RXD,
286     IOT_IO_FUNC_GPIO_14_UART2_CTS_N,
287     IOT_IO_FUNC_GPIO_14_SDIO_D1,
288     IOT_IO_FUNC_GPIO_14_GPIO,
289     IOT_IO_FUNC_GPIO_14_PWM5_OUT,
290     IOT_IO_FUNC_GPIO_14_I2C0_SCL,
291 } IotIoFuncGpio14;
292 
293 /**
294 * @ingroup iot_io
295 *
296 * SFC_CSN pin function.CNcomment:SFC_CSN管脚功能。CNend
297 */
298 typedef enum {
299     IOT_IO_FUNC_SFC_CSN_SFC_CSN,
300     IOT_IO_FUNC_SFC_CSN_SDIO_D2,
301     IOT_IO_FUNC_SFC_CSN_GPIO9,
302     IOT_IO_FUNC_SFC_CSN_SPI0_TXD = 4,
303 } IotIoFuncSfcCsn;
304 
305 /**
306 * @ingroup iot_io
307 *
308 * SFC_DO pin function.CNcomment:SFC_DO管脚功能。CNend
309 */
310 typedef enum {
311     IOT_IO_FUNC_SFC_IO_1_SFC_DO,
312     IOT_IO_FUNC_SFC_IO_1_SDIO_D3,
313     IOT_IO_FUNC_SFC_IO_1_GPIO10,
314     IOT_IO_FUNC_SFC_IO_1_SPI0_CK = 4,
315 } IotIoFuncSfcIo1;
316 
317 /**
318 * @ingroup iot_io
319 *
320 * SFC_WPN pin function.CNcomment:SFC_WPN管脚功能。CNend
321 */
322 typedef enum {
323     IOT_IO_FUNC_SFC_IO_2_SFC_WPN,
324     IOT_IO_FUNC_SFC_IO_2_SDIO_CMD,
325     IOT_IO_FUNC_SFC_IO_2_GPIO11,
326     IOT_IO_FUNC_SFC_IO_2_RF_TX_EN_EXT,
327     IOT_IO_FUNC_SFC_IO_2_SPI0_RXD,
328 } IotIoFuncSfcIo2;
329 
330 /**
331 * @ingroup iot_io
332 *
333 * SFC_DI pin function.CNcomment:SFC_DI管脚功能。CNend
334 */
335 typedef enum {
336     IOT_IO_FUNC_SFC_IO_0_SFC_DI,
337     IOT_IO_FUNC_SFC_IO_0_SDIO_CLK,
338     IOT_IO_FUNC_SFC_IO_0_GPIO12,
339     IOT_IO_FUNC_SFC_IO_0_RF_RX_EN_EXT,
340     IOT_IO_FUNC_SFC_IO_0_SPI0_CSN,
341 } IotIoFuncSfcIo0;
342 
343 /**
344 * @ingroup iot_io
345 *
346 * SFC_CLK pin function.CNcomment:SFC_CLK管脚功能。CNend
347 */
348 typedef enum {
349     IOT_IO_FUNC_SFC_CLK_SFC_CLK,
350     IOT_IO_FUNC_SFC_CLK_SDIO_D0,
351     IOT_IO_FUNC_SFC_CLK_GPIO13,
352     IOT_IO_FUNC_SFC_CLK_SSI_DATA = 4,
353 } IotIoFuncSfcClk;
354 
355 /**
356 * @ingroup iot_io
357 *
358 * SFC_HOLDN pin function.CNcomment:SFC_HOLDN管脚功能。CNend
359 */
360 typedef enum {
361     IOT_IO_FUNC_SFC_IO_3_SFC_HOLDN,
362     IOT_IO_FUNC_SFC_IO_3_SDIO_D1,
363     IOT_IO_FUNC_SFC_IO_3_GPIO14,
364     IOT_IO_FUNC_SFC_IO_3_SSI_CLK = 4,
365 } IotIoFuncSfcIo3;
366 
367 /**
368 * @ingroup iot_io
369 *
370 * I/O drive capability.CNcomment:IO驱动能力。CNend
371 * Note: The HI_IO_NAME_GPIO_0~HI_IO_NAME_GPIO_11 and HI_IO_NAME_GPIO_13~HI_IO_NAME_GPIO_14 driver capabilities are
372 * optional.The value range is HI_IO_DRIVER_STRENGTH_0~HI_IO_DRIVER_STRENGTH_3, and the other I/O ranges are
373 * HI_IO_DRIVER_STRENGTH_0~HI_IO_DRIVER_STRENGTH_7.CNcomment:注意:HI_IO_NAME_GPIO_0~HI_IO_NAME_GPIO_11、
374 * HI_IO_NAME_GPIO_13~HI_IO_NAME_GPIO_14驱动能力可选范围是HI_IO_DRIVER_STRENGTH_0~HI_IO_DRIVER_STRENGTH_3,
375 * 其余IO范围是HI_IO_DRIVER_STRENGTH_0~HI_IO_DRIVER_STRENGTH_7。CNend
376 */
377 typedef enum {
378     IOT_IO_DRIVER_STRENGTH_0 = 0,   /* <Drive strength level 0 (highest).CNcomment:驱动能力0级,驱动能力最高CNend */
379     IOT_IO_DRIVER_STRENGTH_1,   /* <Drive strength level 1.CNcomment:驱动能力1级CNend */
380     IOT_IO_DRIVER_STRENGTH_2,   /* <Drive strength level 2.CNcomment:驱动能力2级CNend */
381     IOT_IO_DRIVER_STRENGTH_3,   /* <Drive strength level 3.CNcomment:驱动能力3级CNend */
382     IOT_IO_DRIVER_STRENGTH_4,   /* <Drive strength level 4.CNcomment:驱动能力4级CNend */
383     IOT_IO_DRIVER_STRENGTH_5,   /* <Drive strength level 5.CNcomment:驱动能力5级CNend */
384     IOT_IO_DRIVER_STRENGTH_6,   /* <Drive strength level 6.CNcomment:驱动能力6级CNend */
385     IOT_IO_DRIVER_STRENGTH_7,   /* <Drive strength level 7 (lowest).CNcomment:驱动能力7级,驱动能力最低CNend */
386     IOT_IO_DRIVER_STRENGTH_MAX,
387 } IotIoDriverStrength;
388 
389 
390 unsigned int IoSetPull(unsigned int id, IotIoPull val);
391 
392 
393 unsigned int IoSetFunc(unsigned int id, unsigned char val);
394 
395 unsigned int TaskMsleep(unsigned int ms);
396 
397 #endif