1 /****************************************************************************** 2 * @file sl_si91x_gpio_common.h 3 ******************************************************************************* 4 * # License 5 * <b>Copyright 2024 Silicon Laboratories Inc. www.silabs.com</b> 6 ******************************************************************************* 7 * 8 * SPDX-License-Identifier: Zlib 9 * 10 * The licensor of this software is Silicon Laboratories Inc. 11 * 12 * This software is provided 'as-is', without any express or implied 13 * warranty. In no event will the authors be held liable for any damages 14 * arising from the use of this software. 15 * 16 * Permission is granted to anyone to use this software for any purpose, 17 * including commercial applications, and to alter it and redistribute it 18 * freely, subject to the following restrictions: 19 * 20 * 1. The origin of this software must not be misrepresented; you must not 21 * claim that you wrote the original software. If you use this software 22 * in a product, an acknowledgment in the product documentation would be 23 * appreciated but is not required. 24 * 2. Altered source versions must be plainly marked as such, and must not be 25 * misrepresented as being the original software. 26 * 3. This notice may not be removed or altered from any source distribution. 27 * 28 ******************************************************************************/ 29 #ifndef SL_SI91X_GPIO_COMMONH 30 #define SL_SI91X_GPIO_COMMONH 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 //// Includes 37 /// 38 #include "si91x_device.h" 39 /***************************************************************************/ /** 40 * @addtogroup GPIO 41 * @ingroup SI91X_PERIPHERAL_APIS 42 * @{ 43 * 44 ******************************************************************************/ 45 /******************************************************************************* 46 *************************** Defines / Macros ******************************** 47 ******************************************************************************/ 48 #define PAD_REG_BASE 0x46004000UL ///< PAD configuration register base address 49 #define NPSS_INT_BASE 0x12080000UL ///< UULP INTR base address 50 #define ULP_PAD_REG_BASE 0x2404A000UL ///< ULP PAD configuration base address 51 52 #define GPIO ((EGPIO_Type *)EGPIO_BASE) ///< MCU HP base address 53 #define ULP_GPIO ((EGPIO_Type *)EGPIO1_BASE) ///< MCU ULP base address 54 #define UULP_GPIO_FSM ((MCU_FSM_Type *)MCU_FSM_BASE) ///< SLEEP FSM base address 55 #define UULP_GPIO ((MCU_RET_Type *)MCU_RET_BASE) ///< MCU retention base address 56 57 #define PAD_REG(x) ((PAD_CONFIG_Type *)(PAD_REG_BASE + (4 * x))) ///< PAD configuration register for GPIO_n(n = 0 t0 63) 58 #define ULP_PAD_CONFIG0_REG ((ULP_PAD_CONFIG_Type0 *)(ULP_PAD_REG_BASE + 0x0)) ///< ULP PAD configuration register 0 59 #define ULP_PAD_CONFIG1_REG ((ULP_PAD_CONFIG_Type1 *)(ULP_PAD_REG_BASE + 0x4)) ///< ULP PAD configuration register 1 60 #define ULP_PAD_CONFIG2_REG ((ULP_PAD_CONFIG_Type2 *)(ULP_PAD_REG_BASE + 0x8)) ///< ULP PAD configuration register 2 61 62 #define UULP_PAD_CONFIG_REG(x) \ 63 ((UULP_PAD_CONFIG_Type *)(0x2404861C + 4 * x)) ///< UULP V_bat PAD configuration base address 64 #define PADSELECTION \ 65 (*(volatile uint32_t *)(0x41300000 + 0x610)) ///< PAD selection (0 to 21) A value of 1 on this gives control to M4SS 66 #define PADSELECTION_1 \ 67 (*(volatile uint32_t *)(0x41300000 + 0x618)) ///< PAD selection (22 to 33) A value of 1 on this gives control to M4SS 68 #define HOST_PADS_GPIO_MODE (*(volatile uint32_t *)(0x46008000 + 0x44)) ///< MISC host base address 69 #define ULP_PAD_CONFIG_REG (*(volatile uint32_t *)(0x2404A008)) ///< ULP PAD register 70 71 #define GPIO_NPSS_INTERRUPT_MASK_SET_REG \ 72 (*(volatile uint32_t *)(NPSS_INT_BASE + 0x00)) ///< NPSS mask set register base address 73 #define GPIO_NPSS_INTERRUPT_MASK_CLR_REG \ 74 (*(volatile uint32_t *)(NPSS_INT_BASE + 0x04)) ///< NPSS mask clear register base address 75 #define GPIO_NPSS_INTERRUPT_CLEAR_REG \ 76 (*(volatile uint32_t *)(NPSS_INT_BASE + 0x08)) ///< NPSS clear register base address 77 #define GPIO_NPSS_INTERRUPT_STATUS_REG \ 78 (*(volatile uint32_t *)(NPSS_INT_BASE + 0x0C)) ///< NPSS status register base address 79 #define GPIO_NPSS_GPIO_CONFIG_REG \ 80 (*(volatile uint32_t *)(NPSS_INT_BASE + 0x10)) ///< NPSS GPIO configuration register base address 81 #define UULP_GPIO_STATUS (*(volatile uint32_t *)(NPSS_INT_BASE + 0x14)) ///< UULP GPIO status base address 82 #define GPIO_25_30_CONFIG_REG (*(volatile uint32_t *)(0X46008000 + 0x0C)) ///< GPIO(25-30) pin configuration register 83 84 #define CLR 0 85 #define SET 1 86 87 #define SL_DEBUG_ASSERT 88 89 #define NIBBLE_SHIFT 4 ///< Nibble shift for interrupt 90 #define BYTE_SHIFT 8 ///< Byte shift for interrupt 91 #define WORD_SHIFT 16 ///< Word shift for interrupt 92 #define LSB_WORD_MASK 0x00FF ///< GPIO LSB word mask 93 #define LSB_NIBBLE_MASK 0x0F ///< GPIO LSB nibble mask 94 95 #define MAX_GPIO_PORT_PIN 16 ///< GPIO maximum port pins 96 #define HOST_PAD 12 ///< GPIO Host PAD 97 98 #define GPIO_PA_COUNT 16 ///< GPIO port A maximum pins 99 #define GPIO_PB_COUNT 16 ///< GPIO port B maximum pins 100 #define GPIO_PC_COUNT 16 ///< GPIO port C maximum pins 101 #define GPIO_PD_COUNT 9 ///< GPIO port D maximum pins 102 #define GPIO_PE_COUNT 12 ///< GPIO port E maximum pins 103 104 #define GPIO_PA_MASK 0xFFFFUL ///< GPIO port A mask 105 #define GPIO_PB_MASK 0xFFFFUL ///< GPIO port B mask 106 #define GPIO_PC_MASK 0xFFFFUL ///< GPIO port C mask 107 #define GPIO_PD_MASK 0x01FFUL ///< GPIO port D mask 108 109 #define SL_PERIPHERAL_CLK M4CLK ///< GPIO instance clock 110 111 #define UNUSED_VAR(expr) ((void)(expr)) 112 113 #define GPIO_PA_PIN_MAX_VALIDATE 75 ///< GPIO port A maximum pins to validate 114 #define GPIO_PB_PIN_MAX_VALIDATE 59 ///< GPIO port B maximum pins to validate 115 #define GPIO_PC_PIN_MAX_VALIDATE 43 ///< GPIO port C maximum pins to validate 116 #define GPIO_PD_PIN_MAX_VALIDATE 27 ///< GPIO port D maximum pins to validate 117 118 #ifdef SL_DEBUG_ASSERT 119 #define SL_GPIO_ASSERT(expr) ((expr) ? (void)0U : sl_assert_failed((uint8_t *)__FILE__, __LINE__)) 120 #else 121 #define SL_GPIO_ASSERT(expr) ((void)(expr)) 122 #endif 123 124 #define SL_GPIO_VALIDATE_STRENGTH(strength) (strength > 3 ? 0 : 1) ///< Validate driver strength 125 #define SL_GPIO_VALIDATE_PARAMETER(value) (value > 1 ? 0 : 1) ///< Validate GPIO parameters 126 #define SL_GPIO_VALIDATE_DISABLE_STATE(disable_state) (disable_state > 3 ? 0 : 1) ///< Validate driver disable state 127 #define SL_GPIO_VALIDATE_PAD(pad_num) ((pad_num > 34) && (pad_num < 1) ? 0 : 1) ///< Validate GPIO HP pad selection 128 #define SL_GPIO_VALIDATE_PIN(pin_num) ((pin_num > 63) ? 0 : 1) ///< Validate GPIO HP pin number 129 #define SL_GPIO_VALIDATE_FLAG(flag) ((flag > 0x0F) ? 0 : 1) ///< Validate GPIO flags 130 #define SL_GPIO_VALIDATE_ULP_INTR(ulp_intr) ((ulp_intr > 12) ? 0 : 1) ///< Validate ULP interrupts 131 #define SL_GPIO_VALIDATE_ULP_PIN(pin_num) ((pin_num > 12) ? 0 : 1) ///< Validate ULP pins 132 #define SL_GPIO_VALIDATE_UULP_PIN(pin_num) ((pin_num) > 5 ? 0 : 1) ///< Validate UULP pins 133 #define SL_GPIO_VALIDATE_MODE_PARAMETER(mode) ((mode) > 10 ? 0 : 1) ///< Validate UULP, ULP mode 134 #define SL_GPIO_VALIDATE_UULP_INTR(interrupt) ((interrupt) > 16 ? 0 : 1) ///< Validate UULP interrupt 135 #define SL_GPIO_VALIDATE_PORT(port) ((port) > 5 ? 0 : 1) ///< Validate GPIO port 136 #define SL_GPIO_VALIDATE_MODE(mode) ((mode) > 15 ? 0 : 1) ///< Validate GPIO mode 137 #define SL_GPIO_VALIDATE_INTR(interrupt) ((interrupt > 8) ? 0 : 1) ///< Validate GPIO interrupt 138 ///< Validate GPIO port and pin 139 #define SL_GPIO_NDEBUG_PORT_PIN(port, pin) \ 140 (port == 0 ? ((pin > GPIO_PA_PIN_MAX_VALIDATE) ? 0 : 1) \ 141 : port == 1 ? ((pin > GPIO_PB_PIN_MAX_VALIDATE) ? 0 : 1) \ 142 : port == 2 ? ((pin > GPIO_PC_PIN_MAX_VALIDATE) ? 0 : 1) \ 143 : port == 3 ? ((pin > GPIO_PD_PIN_MAX_VALIDATE) ? 0 : 1) \ 144 : 0) 145 ///< Validate GPIO host pad port and pin 146 #define SL_GPIO_VALIDATE_HOST_PIN(port, pin) \ 147 (port == SL_GPIO_PORT_A ? (((pin >= HOST_PAD_MIN) && (pin <= HOST_PAD_MAX)) ? TRUE : FALSE) \ 148 : port == SL_GPIO_PORT_B ? (((pin >= GPIO_PIN_NUMBER9) && (pin <= GPIO_PIN_NUMBER14)) ? TRUE : FALSE) \ 149 : FALSE) 150 #define SL_GPIO_VALIDATE_ULP_PORT_PIN(port, pin) (port == 4 ? ((pin > 11) ? 0 : 1) : 0) ///< Validate ULP port and pin 151 #define SL_GPIO_VALIDATE_UULP_PORT_PIN(port, pin) (port == 5 ? ((pin > 5) ? 0 : 1) : 0) ///< Validate UULP port and pin 152 153 #define GRP_IRQ0_Handler IRQ050_Handler ///< GPIO Group Interrupt 0 154 #define GRP_IRQ1_Handler IRQ051_Handler ///< GPIO Group Interrupt 1 155 156 #define PIN_IRQ0_Handler IRQ052_Handler ///< GPIO Pin Interrupt 0 157 #define PIN_IRQ1_Handler IRQ053_Handler ///< GPIO Pin Interrupt 1 158 #define PIN_IRQ2_Handler IRQ054_Handler ///< GPIO Pin Interrupt 2 159 #define PIN_IRQ3_Handler IRQ055_Handler ///< GPIO Pin Interrupt 3 160 #define PIN_IRQ4_Handler IRQ056_Handler ///< GPIO Pin Interrupt 4 161 #define PIN_IRQ5_Handler IRQ057_Handler ///< GPIO Pin Interrupt 5 162 #define PIN_IRQ6_Handler IRQ058_Handler ///< GPIO Pin Interrupt 6 163 #define PIN_IRQ7_Handler IRQ059_Handler ///< GPIO Pin Interrupt 7 164 165 #define UULP_PIN_IRQ_Handler IRQ021_Handler ///< UULP Pin Interrupt 0 166 167 #define ULP_PIN_IRQ_Handler IRQ018_Handler ///< ULP Pin Interrupt 168 #define ULP_GROUP_IRQ_Handler IRQ019_Handler ///< ULP Group Interrupt 169 170 #define PIN_INTR_0 0 ///< HP GPIO pin interrupt 0 171 #define PIN_INTR_1 1 ///< HP GPIO pin interrupt 1 172 #define PIN_INTR_2 2 ///< HP GPIO pin interrupt 2 173 #define PIN_INTR_3 3 ///< HP GPIO pin interrupt 3 174 #define PIN_INTR_4 4 ///< HP GPIO pin interrupt 4 175 #define PIN_INTR_5 5 ///< HP GPIO pin interrupt 5 176 #define PIN_INTR_6 6 ///< HP GPIO pin interrupt 6 177 #define PIN_INTR_7 7 ///< HP GPIO pin interrupt 7 178 179 #define UULP_MASK 0x00 ///< UULP GPIO pin mask 180 #define ULP_STATUS 0x01 ///< ULP GPIO pin status 181 #define UULP_INTR_1 0x01 ///< UULP GPIO pin interrupt 1 182 #define UULP_INTR_2 0x02 ///< UULP GPIO pin interrupt 2 183 #define UULP_INTR_3 0x04 ///< UULP GPIO pin interrupt 3 184 #define UULP_INTR_4 0x08 ///< UULP GPIO pin interrupt 4 185 #define UULP_INTR_5 0x10 ///< UULP GPIO pin interrupt 5 186 187 #define ULP_PIN_INTR_0 0 ///< ULP GPIO pin interrupt 0 188 #define ULP_PIN_INTR_1 1 ///< ULP GPIO pin interrupt 1 189 #define ULP_PIN_INTR_2 2 ///< ULP GPIO pin interrupt 2 190 #define ULP_PIN_INTR_3 3 ///< ULP GPIO pin interrupt 3 191 #define ULP_PIN_INTR_4 4 ///< ULP GPIO pin interrupt 4 192 #define ULP_PIN_INTR_5 5 ///< ULP GPIO pin interrupt 5 193 #define ULP_PIN_INTR_6 6 ///< ULP GPIO pin interrupt 6 194 #define ULP_PIN_INTR_7 7 ///< ULP GPIO pin interrupt 7 195 196 #define ULP_GROUP_INTR_0 0 ///< ULP GPIO group interrupt 0 197 #define ULP_GROUP_INTR_1 1 ///< ULP GPIO group interrupt 1 198 199 #define MAX_GPIO_PIN_INT 8 ///< Maximum HP GPIO pin interrupts 200 201 #define PININT0_NVIC_NAME EGPIO_PIN_0_IRQn ///< HP GPIO pin interrupt 0 number 202 #define PININT1_NVIC_NAME EGPIO_PIN_1_IRQn ///< HP GPIO pin interrupt 1 number 203 #define PININT2_NVIC_NAME EGPIO_PIN_2_IRQn ///< HP GPIO pin interrupt 2 number 204 #define PININT3_NVIC_NAME EGPIO_PIN_3_IRQn ///< HP GPIO pin interrupt 3 number 205 #define PININT4_NVIC_NAME EGPIO_PIN_4_IRQn ///< HP GPIO pin interrupt 4 number 206 #define PININT5_NVIC_NAME EGPIO_PIN_5_IRQn ///< HP GPIO pin interrupt 5 number 207 #define PININT6_NVIC_NAME EGPIO_PIN_6_IRQn ///< HP GPIO pin interrupt 6 number 208 #define PININT7_NVIC_NAME EGPIO_PIN_7_IRQn ///< HP GPIO pin interrupt 7 number 209 210 #define GROUP_0_INTERRUPT_NAME EGPIO_GROUP_0_IRQn ///< HP GPIO group interrupt 1 number 211 #define GROUP_1_INTERRUPT_NAME EGPIO_GROUP_1_IRQn ///< HP GPIO group interrupt 2 number 212 213 #define ULP_PININT0_NVIC_NAME ULP_EGPIO_PIN_IRQn ///< ULP GPIO pin interrupt number 214 #define ULP_GROUP_INTERRUPT_NAME ULP_EGPIO_GROUP_IRQn ///< ULP GPIO group interrupt number 215 216 #define UULP_PININT_NVIC_NAME NPSS_TO_MCU_GPIO_INTR_IRQn ///< UULP GPIO pin interrupt number 217 218 #define SL_GPIO_GROUP_INTERRUPT_OR 1 ///< GPIO group interrupt AND/OR 219 #define SL_GPIO_GROUP_INTERRUPT_WAKEUP 4 ///< GPIO group interrupt wakeup 220 #define SL_GPIO_ULP_PORT 4 ///< ULP GPIO port number 221 #define SL_GPIO_UULP_PORT 5 ///< Initializing UULP GPIO port value 222 #define SL_ULP_GPIO_PORT 4 ///< Refers to ULP Port 223 224 #define _MODE0 0 ///< GPIO mode 0 225 #define _MODE1 1 ///< GPIO mode 1 226 #define _MODE2 2 ///< GPIO mode 2 227 #define _MODE3 3 ///< GPIO mode 3 228 #define _MODE4 4 ///< GPIO mode 4 229 #define _MODE5 5 ///< GPIO mode 5 230 #define _MODE6 6 ///< GPIO mode 6 231 #define _MODE7 7 ///< GPIO mode 7 232 #define _MODE8 8 ///< GPIO mode 8 233 #define _MODE9 9 ///< GPIO mode 9 234 #define _MODE10 10 ///< GPIO mode 10 235 #define _MODE14 14 ///< GPIO mode 14 236 237 #define _GPIO_P_MODEL_MODE0_DISABLED 0x00000000UL ///< Mode DISABLED for GPIO_P_MODEL 238 #define _GPIO_P_MODEL_MODE0_INPUT 0x00000001UL ///< Mode INPUT for GPIO_P_MODEL 239 #define _GPIO_P_MODEL_MODE0_INPUTPULL 0x00000002UL ///< Mode INPUTPULL for GPIO_P_MODEL 240 #define _GPIO_P_MODEL_MODE0_INPUTPULLFILTER 0x00000003UL ///< Mode INPUTPULLFILTER for GPIO_P_MODEL 241 #define _GPIO_P_MODEL_MODE0_PUSHPULL 0x00000004UL ///< Mode PUSHPULL for GPIO_P_MODEL 242 #define _GPIO_P_MODEL_MODE0_PUSHPULLALT 0x00000005UL ///< Mode PUSHPULLALT for GPIO_P_MODEL 243 #define _GPIO_P_MODEL_MODE0_WIREDOR 0x00000006UL ///< Mode WIREDOR for GPIO_P_MODEL 244 #define _GPIO_P_MODEL_MODE0_WIREDORPULLDOWN 0x00000007UL ///< Mode WIREDORPULLDOWN for GPIO_P_MODEL 245 #define _GPIO_P_MODEL_MODE0_WIREDAND 0x00000008UL ///< Mode WIREDAND for GPIO_P_MODEL 246 #define _GPIO_P_MODEL_MODE0_WIREDANDFILTER 0x00000009UL ///< Mode WIREDANDFILTER for GPIO_P_MODEL 247 #define _GPIO_P_MODEL_MODE0_WIREDANDPULLUP 0x0000000AUL ///< Mode WIREDANDPULLUP for GPIO_P_MODEL 248 #define _GPIO_P_MODEL_MODE0_WIREDANDPULLUPFILTER 0x0000000BUL ///< Mode WIREDANDPULLUPFILTER for GPIO_P_MODEL 249 #define _GPIO_P_MODEL_MODE0_WIREDANDALT 0x0000000CUL ///< Mode WIREDANDALT for GPIO_P_MODEL 250 #define _GPIO_P_MODEL_MODE0_WIREDANDALTFILTER 0x0000000DUL ///< Mode WIREDANDALTFILTER for GPIO_P_MODEL 251 #define _GPIO_P_MODEL_MODE0_WIREDANDALTPULLUP 0x0000000EUL ///< Mode WIREDANDALTPULLUP for GPIO_P_MODEL 252 #define _GPIO_P_MODEL_MODE0_WIREDANDALTPULLUPFILTER 0x0000000FUL ///< Mode WIREDANDALTPULLUPFILTER for GPIO_P_MODEL 253 254 #define GPIO_P_MODEL_MODE0_DISABLED (_GPIO_P_MODEL_MODE0_DISABLED << 0) ///< Shifted mode DISABLED for GPIO_P_MODEL 255 #define GPIO_P_MODEL_MODE0_INPUT (_GPIO_P_MODEL_MODE0_INPUT << 0) ///< Shifted mode INPUT for GPIO_P_MODEL 256 #define GPIO_P_MODEL_MODE0_INPUTPULL (_GPIO_P_MODEL_MODE0_INPUTPULL << 0) ///< Shifted mode INPUTPULL for GPIO_P_MODEL 257 #define GPIO_P_MODEL_MODE0_INPUTPULLFILTER \ 258 (_GPIO_P_MODEL_MODE0_INPUTPULLFILTER << 0) ///< Shifted mode INPUTPULLFILTER for GPIO_P_MODEL 259 #define GPIO_P_MODEL_MODE0_PUSHPULL (_GPIO_P_MODEL_MODE0_PUSHPULL << 0) ///< Shifted mode PUSHPULL for GPIO_P_MODEL 260 #define GPIO_P_MODEL_MODE0_PUSHPULLALT \ 261 (_GPIO_P_MODEL_MODE0_PUSHPULLALT << 0) ///< Shifted mode PUSHPULLALT for GPIO_P_MODEL 262 #define GPIO_P_MODEL_MODE0_WIREDOR (_GPIO_P_MODEL_MODE0_WIREDOR << 0) ///< Shifted mode WIREDOR for GPIO_P_MODEL 263 #define GPIO_P_MODEL_MODE0_WIREDORPULLDOWN \ 264 (_GPIO_P_MODEL_MODE0_WIREDORPULLDOWN << 0) ///< Shifted mode WIREDORPULLDOWN for GPIO_P_MODEL 265 #define GPIO_P_MODEL_MODE0_WIREDAND (_GPIO_P_MODEL_MODE0_WIREDAND << 0) ///< Shifted mode WIREDAND for GPIO_P_MODEL 266 #define GPIO_P_MODEL_MODE0_WIREDANDFILTER \ 267 (_GPIO_P_MODEL_MODE0_WIREDANDFILTER << 0) ///< Shifted mode WIREDANDFILTER for GPIO_P_MODEL 268 #define GPIO_P_MODEL_MODE0_WIREDANDPULLUP \ 269 (_GPIO_P_MODEL_MODE0_WIREDANDPULLUP << 0) ///< Shifted mode WIREDANDPULLUP for GPIO_P_MODEL 270 #define GPIO_P_MODEL_MODE0_WIREDANDPULLUPFILTER \ 271 (_GPIO_P_MODEL_MODE0_WIREDANDPULLUPFILTER << 0) ///< Shifted mode WIREDANDPULLUPFILTER for GPIO_P_MODEL 272 #define GPIO_P_MODEL_MODE0_WIREDANDALT \ 273 (_GPIO_P_MODEL_MODE0_WIREDANDALT << 0) ///< Shifted mode WIREDANDALT for GPIO_P_MODEL 274 #define GPIO_P_MODEL_MODE0_WIREDANDALTFILTER \ 275 (_GPIO_P_MODEL_MODE0_WIREDANDALTFILTER << 0) ///< Shifted mode WIREDANDALTFILTER for GPIO_P_MODEL 276 #define GPIO_P_MODEL_MODE0_WIREDANDALTPULLUP \ 277 (_GPIO_P_MODEL_MODE0_WIREDANDALTPULLUP << 0) ///< Shifted mode WIREDANDALTPULLUP for GPIO_P_MODEL 278 #define GPIO_P_MODEL_MODE0_WIREDANDALTPULLUPFILTER \ 279 (_GPIO_P_MODEL_MODE0_WIREDANDALTPULLUPFILTER << 0) ///< Shifted mode WIREDANDALTPULLUPFILTER for GPIO_P_MODEL 280 281 #define GPIO_PAD_0 0 ///< GPIO PAD number 0 282 #define GPIO_PAD_3 3 ///< GPIO PAD number 3 283 #define GPIO_PAD_4 4 ///< GPIO PAD number 4 284 #define GPIO_PAD_7 7 ///< GPIO PAD number 7 285 #define GPIO_PAD_8 8 ///< GPIO PAD number 8 286 287 #define HOST_PAD_SELECT 12 ///< GPIO Host PAD selection 288 #define PAD_SELECT 22 ///< GPIO PAD number 22 289 #define HOST_PAD_MIN 25 ///< GPIO Host PAD number 25 290 #define HOST_PAD_MAX 30 ///< GPIO Host PAD number 30 291 292 #define PRIORITY_19 19 ///< GPIO ulp group Interrupt priority 293 #define PRIORITY_21 21 ///< GPIO uulp group Interrupt priority 294 #define PRIORITY_50 50 ///< GPIO m4 group 0 Interrupt priority 295 #define PRIORITY_51 51 ///< GPIO m4 group 1 Interrupt priority 296 297 #define ULP_PORT_NUM 0 ///< GPIO ULP port number 298 #define UULP_PIN_MASK 0x1F ///< GPIO UULP pin mask 299 300 #define BIT_0 0 ///< GPIO bit 0 in configuration register 301 #define BIT_8 8 ///< GPIO bit 8 in configuration register 302 #define BIT_16 16 ///< GPIO bit 16 in configuration register 303 #define BIT_24 24 ///< GPIO bit 24 in configuration register 304 305 #define PORT_MASK 0xFFFF ///< GPIO port mask 306 #define INTR_CLR 0x07 ///< GPIO interrupt clear 307 #define INTERRUPT_MASK 0x0F ///< GPIO interrupt mask 308 #define MASK_CTRL 0x03 309 #define MASK_INTR 0x01 ///< GPIO interrupt mask 310 311 /** =========================================================================================================================== **/ 312 /** ================ GPIO ==================**/ 313 /** =========================================================================================================================== **/ 314 ///@brief HP GPIO PAD configuration register fields 315 typedef struct { 316 union { 317 __IOM uint32_t PAD_CONFIG_REG; ///< (@ 0x46004000) GPIO PAD configuration register 318 319 struct { 320 __IOM uint32_t PADCONFIG_E1_E2 : 2; ///< [1..0] Drive strength selector 321 __IOM uint32_t PADCONFIG_POS : 1; ///< [2..2] Power-on-Start enable 322 __IOM uint32_t PADCONFIG_SMT : 1; ///< [3..3] Active high Schmitt trigger (Hysteresis) select 323 __IOM uint32_t PADCONFIG_REN : 1; ///< [4..4] Active high receiver enable 324 __IOM uint32_t PADCONFIG_SR : 1; ///< [5..5] Slew Rate Control 325 __IOM uint32_t PADCONFIG_P1_P2 : 2; ///< [7..6] Driver disabled state control 326 __IOM uint32_t RESERVED1 : 24; ///< [31..8] Reserved1 327 } GPIO_PAD_CONFIG_REG_b; 328 }; 329 } PAD_CONFIG_Type; 330 331 ///@brief UULP GPIO PAD configuration register fields 332 typedef struct { 333 union { 334 __IOM uint32_t UULP_PAD_CONFIG_REG; ///< (@ 0x2404861C) UULP VBAT GPIO configuration register 335 336 struct { 337 __IOM uint32_t GPIO_MODE : 3; ///< [2..0] GPIO Mode for UULP_VBAT_GPIO_n(n=0:4) 338 __IOM uint32_t GPIO_REN : 1; ///< [3..3] Receiver of PAD enable 339 __IOM uint32_t GPIO_OEN : 1; ///< [4..4] Direction of PAD 340 __IOM uint32_t GPIO_OUTPUT : 1; ///< [5..5] Value driven on PAD in OUTPUT mode 341 __IOM uint32_t GPIO_PAD_SELECT : 1; ///< [6..6] PAD selection between M4,NWP 342 __IOM uint32_t RESERVED : 1; ///< [7..7] Reserved 343 __IOM uint32_t GPIO_POLARITY : 1; ///< [8..8] Polarity of UULP GPIO 344 __IOM uint32_t RESERVED1 : 23; ///< [31..9] Reserved1 345 } UULP_GPIO_PAD_CONFIG_REG_b; 346 }; 347 } UULP_PAD_CONFIG_Type; 348 349 ///@brief ULP GPIO PAD configuration register0 fields 350 typedef struct { 351 union { 352 __IOM uint32_t ULP_PAD_CONFIG_REG0; 353 354 struct { 355 __IOM uint32_t PADCONFIG_E1_E2_1 : 2; ///< [1..0] Drive strength selector for ULP_GPIO_0 - ULP_GPIO_3 356 __IOM uint32_t PADCONFIG_POS_1 : 1; ///< [2..2] Power on start enable for ULP_GPIO_0 - ULP_GPIO_3 357 __IOM uint32_t PADCONFIG_SMT_1 : 1; ///< [3..3] Active high schmitt trigger for ULP_GPIO_0 - ULP_GPIO_3 358 __IOM uint32_t RESERVED : 1; ///< [4..4] Reserved 359 __IOM uint32_t PADCONFIG_SR_1 : 1; ///< [5..5] Slew rate control for ULP_GPIO_0 - ULP_GPIO_3 360 __IOM uint32_t PADCONFIG_P1_P2_1 : 2; ///< [7..6] Driver disabled state control for ULP_GPIO_0 - ULP_GPIO_3 361 __IOM uint32_t PADCONFIG_E1_E2_2 : 2; ///< [9..8] Drive strength selector for ULP_GPIO_4 - ULP_GPIO_7 362 __IOM uint32_t PADCONFIG_POS_2 : 1; ///< [10..10] Power on start enable for ULP_GPIO_4 - ULP_GPIO_7 363 __IOM uint32_t PADCONFIG_SMT_2 : 1; ///< [11..11] Active high schmitt trigger for ULP_GPIO_4 - ULP_GPIO_7 364 __IOM uint32_t RESERVED1 : 1; ///< [12..12] Reserved1 365 __IOM uint32_t PADCONFIG_SR_2 : 1; ///< [13..13] Slew rate control for ULP_GPIO_4 - ULP_GPIO_7 366 __IOM uint32_t PADCONFIG_P1_P2_2 : 2; ///< [15..14] Driver disabled state control for ULP_GPIO_4 - ULP_GPIO_7 367 __IOM uint32_t RESERVED2 : 16; ///< [31..16] Reserved2 368 } ULP_GPIO_PAD_CONFIG_REG_0; 369 }; 370 } ULP_PAD_CONFIG_Type0; 371 372 ///@brief ULP GPIO PAD configuration register1 fields 373 typedef struct { 374 union { 375 __IOM uint32_t ULP_PAD_CONFIG_REG1; 376 377 struct { 378 __IOM uint32_t PADCONFIG_E1_E2_1 : 2; ///< [1..0] Drive strength selector for ULP_GPIO_8 - ULP_GPIO_11 379 __IOM uint32_t PADCONFIG_POS_1 : 1; ///< [2..2] Power on start enable for ULP_GPIO_8 - ULP_GPIO_11 380 __IOM uint32_t PADCONFIG_SMT_1 : 1; ///< [3..3] Active high schmitt trigger for ULP_GPIO_8 - ULP_GPIO_11 381 __IOM uint32_t RESERVED : 1; ///< [4..4] Reserved 382 __IOM uint32_t PADCONFIG_SR_1 : 1; ///< [5..5] Slew rate control for ULP_GPIO_8 - ULP_GPIO_11 383 __IOM uint32_t PADCONFIG_P1_P2_1 : 2; ///< [7..6] Driver disabled state control for ULP_GPIO_8 - ULP_GPIO_11 384 __IOM uint32_t RESERVED1 : 8; ///< [15..8] Reserved1 385 __IOM uint32_t RESERVED2 : 16; ///< [31..16] Reserved2 386 } ULP_GPIO_PAD_CONFIG_REG_1; 387 }; 388 } ULP_PAD_CONFIG_Type1; 389 390 ///@brief ULP GPIO PAD configuration register2 fields 391 typedef struct { 392 union { 393 __IOM uint32_t ULP_PAD_CONFIG_REG2; 394 395 struct { 396 __IOM uint32_t PADCONFIG_REN : 12; ///< [11..0] Active high receiver enable for ULP_GPIO_11 - ULP_GPIO_0 397 __IOM uint32_t RESERVED : 20; ///< [31..12] Reserved 398 } ULP_GPIO_PAD_CONFIG_REG_2; 399 }; 400 } ULP_PAD_CONFIG_Type2; 401 402 /** @} (end addtogroup GPIO) */ 403 404 #ifdef __cplusplus 405 } 406 #endif 407 408 #endif ///< SL_SI91X_GPIO_COMMONH 409 /**************************************************************************************************/ 410