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