1 /* 2 * Copyright (c) 2021-2024 HPMicro 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 9 #ifndef HPM_GPIO_H 10 #define HPM_GPIO_H 11 12 typedef struct { 13 struct { 14 __R uint32_t VALUE; /* 0x0: GPIO input value */ 15 __R uint8_t RESERVED0[12]; /* 0x4 - 0xF: Reserved */ 16 } DI[16]; 17 struct { 18 __RW uint32_t VALUE; /* 0x100: GPIO output value */ 19 __RW uint32_t SET; /* 0x104: GPIO output set */ 20 __RW uint32_t CLEAR; /* 0x108: GPIO output clear */ 21 __RW uint32_t TOGGLE; /* 0x10C: GPIO output toggle */ 22 } DO[16]; 23 struct { 24 __RW uint32_t VALUE; /* 0x200: GPIO direction value */ 25 __RW uint32_t SET; /* 0x204: GPIO direction set */ 26 __RW uint32_t CLEAR; /* 0x208: GPIO direction clear */ 27 __RW uint32_t TOGGLE; /* 0x20C: GPIO direction toggle */ 28 } OE[16]; 29 struct { 30 __W uint32_t VALUE; /* 0x300: GPIO interrupt flag value */ 31 __R uint8_t RESERVED0[12]; /* 0x304 - 0x30F: Reserved */ 32 } IF[16]; 33 struct { 34 __RW uint32_t VALUE; /* 0x400: GPIO interrupt enable value */ 35 __RW uint32_t SET; /* 0x404: GPIO interrupt enable set */ 36 __RW uint32_t CLEAR; /* 0x408: GPIO interrupt enable clear */ 37 __RW uint32_t TOGGLE; /* 0x40C: GPIO interrupt enable toggle */ 38 } IE[16]; 39 struct { 40 __RW uint32_t VALUE; /* 0x500: GPIO interrupt polarity value */ 41 __RW uint32_t SET; /* 0x504: GPIO interrupt polarity set */ 42 __RW uint32_t CLEAR; /* 0x508: GPIO interrupt polarity clear */ 43 __RW uint32_t TOGGLE; /* 0x50C: GPIO interrupt polarity toggle */ 44 } PL[16]; 45 struct { 46 __RW uint32_t VALUE; /* 0x600: GPIO interrupt type value */ 47 __RW uint32_t SET; /* 0x604: GPIO interrupt type set */ 48 __RW uint32_t CLEAR; /* 0x608: GPIO interrupt type clear */ 49 __RW uint32_t TOGGLE; /* 0x60C: GPIO interrupt type toggle */ 50 } TP[16]; 51 struct { 52 __RW uint32_t VALUE; /* 0x700: GPIO interrupt asynchronous value */ 53 __RW uint32_t SET; /* 0x704: GPIO interrupt asynchronous set */ 54 __RW uint32_t CLEAR; /* 0x708: GPIO interrupt asynchronous clear */ 55 __RW uint32_t TOGGLE; /* 0x70C: GPIO interrupt asynchronous toggle */ 56 } AS[16]; 57 } GPIO_Type; 58 59 60 /* Bitfield definition for register of struct array DI: VALUE */ 61 /* 62 * INPUT (RO) 63 * 64 * GPIO input bus value, each bit represents a bus bit 65 * 0: low level presents on chip pin 66 * 1: high level presents on chip pin 67 */ 68 #define GPIO_DI_VALUE_INPUT_MASK (0xFFFFFFFFUL) 69 #define GPIO_DI_VALUE_INPUT_SHIFT (0U) 70 #define GPIO_DI_VALUE_INPUT_GET(x) (((uint32_t)(x) & GPIO_DI_VALUE_INPUT_MASK) >> GPIO_DI_VALUE_INPUT_SHIFT) 71 72 /* Bitfield definition for register of struct array DO: VALUE */ 73 /* 74 * OUTPUT (RW) 75 * 76 * GPIO output register value, each bit represents a bus bit 77 * 0: chip pin output low level when direction is output 78 * 1: chip pin output high level when direction is output 79 */ 80 #define GPIO_DO_VALUE_OUTPUT_MASK (0xFFFFFFFFUL) 81 #define GPIO_DO_VALUE_OUTPUT_SHIFT (0U) 82 #define GPIO_DO_VALUE_OUTPUT_SET(x) (((uint32_t)(x) << GPIO_DO_VALUE_OUTPUT_SHIFT) & GPIO_DO_VALUE_OUTPUT_MASK) 83 #define GPIO_DO_VALUE_OUTPUT_GET(x) (((uint32_t)(x) & GPIO_DO_VALUE_OUTPUT_MASK) >> GPIO_DO_VALUE_OUTPUT_SHIFT) 84 85 /* Bitfield definition for register of struct array DO: SET */ 86 /* 87 * OUTPUT (RW) 88 * 89 * GPIO output register value, each bit represents a bus bit 90 * 0: chip pin output low level when direction is output 91 * 1: chip pin output high level when direction is output 92 */ 93 #define GPIO_DO_SET_OUTPUT_MASK (0xFFFFFFFFUL) 94 #define GPIO_DO_SET_OUTPUT_SHIFT (0U) 95 #define GPIO_DO_SET_OUTPUT_SET(x) (((uint32_t)(x) << GPIO_DO_SET_OUTPUT_SHIFT) & GPIO_DO_SET_OUTPUT_MASK) 96 #define GPIO_DO_SET_OUTPUT_GET(x) (((uint32_t)(x) & GPIO_DO_SET_OUTPUT_MASK) >> GPIO_DO_SET_OUTPUT_SHIFT) 97 98 /* Bitfield definition for register of struct array DO: CLEAR */ 99 /* 100 * OUTPUT (RW) 101 * 102 * GPIO output register value, each bit represents a bus bit 103 * 0: chip pin output low level when direction is output 104 * 1: chip pin output high level when direction is output 105 */ 106 #define GPIO_DO_CLEAR_OUTPUT_MASK (0xFFFFFFFFUL) 107 #define GPIO_DO_CLEAR_OUTPUT_SHIFT (0U) 108 #define GPIO_DO_CLEAR_OUTPUT_SET(x) (((uint32_t)(x) << GPIO_DO_CLEAR_OUTPUT_SHIFT) & GPIO_DO_CLEAR_OUTPUT_MASK) 109 #define GPIO_DO_CLEAR_OUTPUT_GET(x) (((uint32_t)(x) & GPIO_DO_CLEAR_OUTPUT_MASK) >> GPIO_DO_CLEAR_OUTPUT_SHIFT) 110 111 /* Bitfield definition for register of struct array DO: TOGGLE */ 112 /* 113 * OUTPUT (RW) 114 * 115 * GPIO output register value, each bit represents a bus bit 116 * 0: chip pin output low level when direction is output 117 * 1: chip pin output high level when direction is output 118 */ 119 #define GPIO_DO_TOGGLE_OUTPUT_MASK (0xFFFFFFFFUL) 120 #define GPIO_DO_TOGGLE_OUTPUT_SHIFT (0U) 121 #define GPIO_DO_TOGGLE_OUTPUT_SET(x) (((uint32_t)(x) << GPIO_DO_TOGGLE_OUTPUT_SHIFT) & GPIO_DO_TOGGLE_OUTPUT_MASK) 122 #define GPIO_DO_TOGGLE_OUTPUT_GET(x) (((uint32_t)(x) & GPIO_DO_TOGGLE_OUTPUT_MASK) >> GPIO_DO_TOGGLE_OUTPUT_SHIFT) 123 124 /* Bitfield definition for register of struct array OE: VALUE */ 125 /* 126 * DIRECTION (RW) 127 * 128 * GPIO direction, each bit represents a bus bit 129 * 0: input 130 * 1: output 131 */ 132 #define GPIO_OE_VALUE_DIRECTION_MASK (0xFFFFFFFFUL) 133 #define GPIO_OE_VALUE_DIRECTION_SHIFT (0U) 134 #define GPIO_OE_VALUE_DIRECTION_SET(x) (((uint32_t)(x) << GPIO_OE_VALUE_DIRECTION_SHIFT) & GPIO_OE_VALUE_DIRECTION_MASK) 135 #define GPIO_OE_VALUE_DIRECTION_GET(x) (((uint32_t)(x) & GPIO_OE_VALUE_DIRECTION_MASK) >> GPIO_OE_VALUE_DIRECTION_SHIFT) 136 137 /* Bitfield definition for register of struct array OE: SET */ 138 /* 139 * DIRECTION (RW) 140 * 141 * GPIO direction, each bit represents a bus bit 142 * 0: input 143 * 1: output 144 */ 145 #define GPIO_OE_SET_DIRECTION_MASK (0xFFFFFFFFUL) 146 #define GPIO_OE_SET_DIRECTION_SHIFT (0U) 147 #define GPIO_OE_SET_DIRECTION_SET(x) (((uint32_t)(x) << GPIO_OE_SET_DIRECTION_SHIFT) & GPIO_OE_SET_DIRECTION_MASK) 148 #define GPIO_OE_SET_DIRECTION_GET(x) (((uint32_t)(x) & GPIO_OE_SET_DIRECTION_MASK) >> GPIO_OE_SET_DIRECTION_SHIFT) 149 150 /* Bitfield definition for register of struct array OE: CLEAR */ 151 /* 152 * DIRECTION (RW) 153 * 154 * GPIO direction, each bit represents a bus bit 155 * 0: input 156 * 1: output 157 */ 158 #define GPIO_OE_CLEAR_DIRECTION_MASK (0xFFFFFFFFUL) 159 #define GPIO_OE_CLEAR_DIRECTION_SHIFT (0U) 160 #define GPIO_OE_CLEAR_DIRECTION_SET(x) (((uint32_t)(x) << GPIO_OE_CLEAR_DIRECTION_SHIFT) & GPIO_OE_CLEAR_DIRECTION_MASK) 161 #define GPIO_OE_CLEAR_DIRECTION_GET(x) (((uint32_t)(x) & GPIO_OE_CLEAR_DIRECTION_MASK) >> GPIO_OE_CLEAR_DIRECTION_SHIFT) 162 163 /* Bitfield definition for register of struct array OE: TOGGLE */ 164 /* 165 * DIRECTION (RW) 166 * 167 * GPIO direction, each bit represents a bus bit 168 * 0: input 169 * 1: output 170 */ 171 #define GPIO_OE_TOGGLE_DIRECTION_MASK (0xFFFFFFFFUL) 172 #define GPIO_OE_TOGGLE_DIRECTION_SHIFT (0U) 173 #define GPIO_OE_TOGGLE_DIRECTION_SET(x) (((uint32_t)(x) << GPIO_OE_TOGGLE_DIRECTION_SHIFT) & GPIO_OE_TOGGLE_DIRECTION_MASK) 174 #define GPIO_OE_TOGGLE_DIRECTION_GET(x) (((uint32_t)(x) & GPIO_OE_TOGGLE_DIRECTION_MASK) >> GPIO_OE_TOGGLE_DIRECTION_SHIFT) 175 176 /* Bitfield definition for register of struct array IF: VALUE */ 177 /* 178 * IRQ_FLAG (W1C) 179 * 180 * GPIO interrupt flag, write 1 to clear this flag 181 * 0: no irq 182 * 1: irq pending 183 */ 184 #define GPIO_IF_VALUE_IRQ_FLAG_MASK (0xFFFFFFFFUL) 185 #define GPIO_IF_VALUE_IRQ_FLAG_SHIFT (0U) 186 #define GPIO_IF_VALUE_IRQ_FLAG_SET(x) (((uint32_t)(x) << GPIO_IF_VALUE_IRQ_FLAG_SHIFT) & GPIO_IF_VALUE_IRQ_FLAG_MASK) 187 #define GPIO_IF_VALUE_IRQ_FLAG_GET(x) (((uint32_t)(x) & GPIO_IF_VALUE_IRQ_FLAG_MASK) >> GPIO_IF_VALUE_IRQ_FLAG_SHIFT) 188 189 /* Bitfield definition for register of struct array IE: VALUE */ 190 /* 191 * IRQ_EN (RW) 192 * 193 * GPIO interrupt enable, each bit represents a bus bit 194 * 0: irq is disabled 195 * 1: irq is enable 196 */ 197 #define GPIO_IE_VALUE_IRQ_EN_MASK (0xFFFFFFFFUL) 198 #define GPIO_IE_VALUE_IRQ_EN_SHIFT (0U) 199 #define GPIO_IE_VALUE_IRQ_EN_SET(x) (((uint32_t)(x) << GPIO_IE_VALUE_IRQ_EN_SHIFT) & GPIO_IE_VALUE_IRQ_EN_MASK) 200 #define GPIO_IE_VALUE_IRQ_EN_GET(x) (((uint32_t)(x) & GPIO_IE_VALUE_IRQ_EN_MASK) >> GPIO_IE_VALUE_IRQ_EN_SHIFT) 201 202 /* Bitfield definition for register of struct array IE: SET */ 203 /* 204 * IRQ_EN (RW) 205 * 206 * GPIO interrupt enable, each bit represents a bus bit 207 * 0: irq is disabled 208 * 1: irq is enable 209 */ 210 #define GPIO_IE_SET_IRQ_EN_MASK (0xFFFFFFFFUL) 211 #define GPIO_IE_SET_IRQ_EN_SHIFT (0U) 212 #define GPIO_IE_SET_IRQ_EN_SET(x) (((uint32_t)(x) << GPIO_IE_SET_IRQ_EN_SHIFT) & GPIO_IE_SET_IRQ_EN_MASK) 213 #define GPIO_IE_SET_IRQ_EN_GET(x) (((uint32_t)(x) & GPIO_IE_SET_IRQ_EN_MASK) >> GPIO_IE_SET_IRQ_EN_SHIFT) 214 215 /* Bitfield definition for register of struct array IE: CLEAR */ 216 /* 217 * IRQ_EN (RW) 218 * 219 * GPIO interrupt enable, each bit represents a bus bit 220 * 0: irq is disabled 221 * 1: irq is enable 222 */ 223 #define GPIO_IE_CLEAR_IRQ_EN_MASK (0xFFFFFFFFUL) 224 #define GPIO_IE_CLEAR_IRQ_EN_SHIFT (0U) 225 #define GPIO_IE_CLEAR_IRQ_EN_SET(x) (((uint32_t)(x) << GPIO_IE_CLEAR_IRQ_EN_SHIFT) & GPIO_IE_CLEAR_IRQ_EN_MASK) 226 #define GPIO_IE_CLEAR_IRQ_EN_GET(x) (((uint32_t)(x) & GPIO_IE_CLEAR_IRQ_EN_MASK) >> GPIO_IE_CLEAR_IRQ_EN_SHIFT) 227 228 /* Bitfield definition for register of struct array IE: TOGGLE */ 229 /* 230 * IRQ_EN (RW) 231 * 232 * GPIO interrupt enable, each bit represents a bus bit 233 * 0: irq is disabled 234 * 1: irq is enable 235 */ 236 #define GPIO_IE_TOGGLE_IRQ_EN_MASK (0xFFFFFFFFUL) 237 #define GPIO_IE_TOGGLE_IRQ_EN_SHIFT (0U) 238 #define GPIO_IE_TOGGLE_IRQ_EN_SET(x) (((uint32_t)(x) << GPIO_IE_TOGGLE_IRQ_EN_SHIFT) & GPIO_IE_TOGGLE_IRQ_EN_MASK) 239 #define GPIO_IE_TOGGLE_IRQ_EN_GET(x) (((uint32_t)(x) & GPIO_IE_TOGGLE_IRQ_EN_MASK) >> GPIO_IE_TOGGLE_IRQ_EN_SHIFT) 240 241 /* Bitfield definition for register of struct array PL: VALUE */ 242 /* 243 * IRQ_POL (RW) 244 * 245 * GPIO interrupt polarity, each bit represents a bus bit 246 * 0: irq is high level or rising edge 247 * 1: irq is low level or falling edge 248 */ 249 #define GPIO_PL_VALUE_IRQ_POL_MASK (0xFFFFFFFFUL) 250 #define GPIO_PL_VALUE_IRQ_POL_SHIFT (0U) 251 #define GPIO_PL_VALUE_IRQ_POL_SET(x) (((uint32_t)(x) << GPIO_PL_VALUE_IRQ_POL_SHIFT) & GPIO_PL_VALUE_IRQ_POL_MASK) 252 #define GPIO_PL_VALUE_IRQ_POL_GET(x) (((uint32_t)(x) & GPIO_PL_VALUE_IRQ_POL_MASK) >> GPIO_PL_VALUE_IRQ_POL_SHIFT) 253 254 /* Bitfield definition for register of struct array PL: SET */ 255 /* 256 * IRQ_POL (RW) 257 * 258 * GPIO interrupt polarity, each bit represents a bus bit 259 * 0: irq is high level or rising edge 260 * 1: irq is low level or falling edge 261 */ 262 #define GPIO_PL_SET_IRQ_POL_MASK (0xFFFFFFFFUL) 263 #define GPIO_PL_SET_IRQ_POL_SHIFT (0U) 264 #define GPIO_PL_SET_IRQ_POL_SET(x) (((uint32_t)(x) << GPIO_PL_SET_IRQ_POL_SHIFT) & GPIO_PL_SET_IRQ_POL_MASK) 265 #define GPIO_PL_SET_IRQ_POL_GET(x) (((uint32_t)(x) & GPIO_PL_SET_IRQ_POL_MASK) >> GPIO_PL_SET_IRQ_POL_SHIFT) 266 267 /* Bitfield definition for register of struct array PL: CLEAR */ 268 /* 269 * IRQ_POL (RW) 270 * 271 * GPIO interrupt polarity, each bit represents a bus bit 272 * 0: irq is high level or rising edge 273 * 1: irq is low level or falling edge 274 */ 275 #define GPIO_PL_CLEAR_IRQ_POL_MASK (0xFFFFFFFFUL) 276 #define GPIO_PL_CLEAR_IRQ_POL_SHIFT (0U) 277 #define GPIO_PL_CLEAR_IRQ_POL_SET(x) (((uint32_t)(x) << GPIO_PL_CLEAR_IRQ_POL_SHIFT) & GPIO_PL_CLEAR_IRQ_POL_MASK) 278 #define GPIO_PL_CLEAR_IRQ_POL_GET(x) (((uint32_t)(x) & GPIO_PL_CLEAR_IRQ_POL_MASK) >> GPIO_PL_CLEAR_IRQ_POL_SHIFT) 279 280 /* Bitfield definition for register of struct array PL: TOGGLE */ 281 /* 282 * IRQ_POL (RW) 283 * 284 * GPIO interrupt polarity, each bit represents a bus bit 285 * 0: irq is high level or rising edge 286 * 1: irq is low level or falling edge 287 */ 288 #define GPIO_PL_TOGGLE_IRQ_POL_MASK (0xFFFFFFFFUL) 289 #define GPIO_PL_TOGGLE_IRQ_POL_SHIFT (0U) 290 #define GPIO_PL_TOGGLE_IRQ_POL_SET(x) (((uint32_t)(x) << GPIO_PL_TOGGLE_IRQ_POL_SHIFT) & GPIO_PL_TOGGLE_IRQ_POL_MASK) 291 #define GPIO_PL_TOGGLE_IRQ_POL_GET(x) (((uint32_t)(x) & GPIO_PL_TOGGLE_IRQ_POL_MASK) >> GPIO_PL_TOGGLE_IRQ_POL_SHIFT) 292 293 /* Bitfield definition for register of struct array TP: VALUE */ 294 /* 295 * IRQ_TYPE (RW) 296 * 297 * GPIO interrupt type, each bit represents a bus bit 298 * 0: irq is triggered by level 299 * 1: irq is triggered by edge 300 */ 301 #define GPIO_TP_VALUE_IRQ_TYPE_MASK (0xFFFFFFFFUL) 302 #define GPIO_TP_VALUE_IRQ_TYPE_SHIFT (0U) 303 #define GPIO_TP_VALUE_IRQ_TYPE_SET(x) (((uint32_t)(x) << GPIO_TP_VALUE_IRQ_TYPE_SHIFT) & GPIO_TP_VALUE_IRQ_TYPE_MASK) 304 #define GPIO_TP_VALUE_IRQ_TYPE_GET(x) (((uint32_t)(x) & GPIO_TP_VALUE_IRQ_TYPE_MASK) >> GPIO_TP_VALUE_IRQ_TYPE_SHIFT) 305 306 /* Bitfield definition for register of struct array TP: SET */ 307 /* 308 * IRQ_TYPE (RW) 309 * 310 * GPIO interrupt type, each bit represents a bus bit 311 * 0: irq is triggered by level 312 * 1: irq is triggered by edge 313 */ 314 #define GPIO_TP_SET_IRQ_TYPE_MASK (0xFFFFFFFFUL) 315 #define GPIO_TP_SET_IRQ_TYPE_SHIFT (0U) 316 #define GPIO_TP_SET_IRQ_TYPE_SET(x) (((uint32_t)(x) << GPIO_TP_SET_IRQ_TYPE_SHIFT) & GPIO_TP_SET_IRQ_TYPE_MASK) 317 #define GPIO_TP_SET_IRQ_TYPE_GET(x) (((uint32_t)(x) & GPIO_TP_SET_IRQ_TYPE_MASK) >> GPIO_TP_SET_IRQ_TYPE_SHIFT) 318 319 /* Bitfield definition for register of struct array TP: CLEAR */ 320 /* 321 * IRQ_TYPE (RW) 322 * 323 * GPIO interrupt type, each bit represents a bus bit 324 * 0: irq is triggered by level 325 * 1: irq is triggered by edge 326 */ 327 #define GPIO_TP_CLEAR_IRQ_TYPE_MASK (0xFFFFFFFFUL) 328 #define GPIO_TP_CLEAR_IRQ_TYPE_SHIFT (0U) 329 #define GPIO_TP_CLEAR_IRQ_TYPE_SET(x) (((uint32_t)(x) << GPIO_TP_CLEAR_IRQ_TYPE_SHIFT) & GPIO_TP_CLEAR_IRQ_TYPE_MASK) 330 #define GPIO_TP_CLEAR_IRQ_TYPE_GET(x) (((uint32_t)(x) & GPIO_TP_CLEAR_IRQ_TYPE_MASK) >> GPIO_TP_CLEAR_IRQ_TYPE_SHIFT) 331 332 /* Bitfield definition for register of struct array TP: TOGGLE */ 333 /* 334 * IRQ_TYPE (RW) 335 * 336 * GPIO interrupt type, each bit represents a bus bit 337 * 0: irq is triggered by level 338 * 1: irq is triggered by edge 339 */ 340 #define GPIO_TP_TOGGLE_IRQ_TYPE_MASK (0xFFFFFFFFUL) 341 #define GPIO_TP_TOGGLE_IRQ_TYPE_SHIFT (0U) 342 #define GPIO_TP_TOGGLE_IRQ_TYPE_SET(x) (((uint32_t)(x) << GPIO_TP_TOGGLE_IRQ_TYPE_SHIFT) & GPIO_TP_TOGGLE_IRQ_TYPE_MASK) 343 #define GPIO_TP_TOGGLE_IRQ_TYPE_GET(x) (((uint32_t)(x) & GPIO_TP_TOGGLE_IRQ_TYPE_MASK) >> GPIO_TP_TOGGLE_IRQ_TYPE_SHIFT) 344 345 /* Bitfield definition for register of struct array AS: VALUE */ 346 /* 347 * IRQ_ASYNC (RW) 348 * 349 * GPIO interrupt asynchronous, each bit represents a bus bit 350 * 0: irq is triggered base on system clock 351 * 1: irq is triggered combinational 352 * Note: combinational interrupt is sensitive to environment noise 353 */ 354 #define GPIO_AS_VALUE_IRQ_ASYNC_MASK (0xFFFFFFFFUL) 355 #define GPIO_AS_VALUE_IRQ_ASYNC_SHIFT (0U) 356 #define GPIO_AS_VALUE_IRQ_ASYNC_SET(x) (((uint32_t)(x) << GPIO_AS_VALUE_IRQ_ASYNC_SHIFT) & GPIO_AS_VALUE_IRQ_ASYNC_MASK) 357 #define GPIO_AS_VALUE_IRQ_ASYNC_GET(x) (((uint32_t)(x) & GPIO_AS_VALUE_IRQ_ASYNC_MASK) >> GPIO_AS_VALUE_IRQ_ASYNC_SHIFT) 358 359 /* Bitfield definition for register of struct array AS: SET */ 360 /* 361 * IRQ_ASYNC (RW) 362 * 363 * GPIO interrupt asynchronous, each bit represents a bus bit 364 * 0: irq is triggered base on system clock 365 * 1: irq is triggered combinational 366 * Note: combinational interrupt is sensitive to environment noise 367 */ 368 #define GPIO_AS_SET_IRQ_ASYNC_MASK (0xFFFFFFFFUL) 369 #define GPIO_AS_SET_IRQ_ASYNC_SHIFT (0U) 370 #define GPIO_AS_SET_IRQ_ASYNC_SET(x) (((uint32_t)(x) << GPIO_AS_SET_IRQ_ASYNC_SHIFT) & GPIO_AS_SET_IRQ_ASYNC_MASK) 371 #define GPIO_AS_SET_IRQ_ASYNC_GET(x) (((uint32_t)(x) & GPIO_AS_SET_IRQ_ASYNC_MASK) >> GPIO_AS_SET_IRQ_ASYNC_SHIFT) 372 373 /* Bitfield definition for register of struct array AS: CLEAR */ 374 /* 375 * IRQ_ASYNC (RW) 376 * 377 * GPIO interrupt asynchronous, each bit represents a bus bit 378 * 0: irq is triggered base on system clock 379 * 1: irq is triggered combinational 380 * Note: combinational interrupt is sensitive to environment noise 381 */ 382 #define GPIO_AS_CLEAR_IRQ_ASYNC_MASK (0xFFFFFFFFUL) 383 #define GPIO_AS_CLEAR_IRQ_ASYNC_SHIFT (0U) 384 #define GPIO_AS_CLEAR_IRQ_ASYNC_SET(x) (((uint32_t)(x) << GPIO_AS_CLEAR_IRQ_ASYNC_SHIFT) & GPIO_AS_CLEAR_IRQ_ASYNC_MASK) 385 #define GPIO_AS_CLEAR_IRQ_ASYNC_GET(x) (((uint32_t)(x) & GPIO_AS_CLEAR_IRQ_ASYNC_MASK) >> GPIO_AS_CLEAR_IRQ_ASYNC_SHIFT) 386 387 /* Bitfield definition for register of struct array AS: TOGGLE */ 388 /* 389 * IRQ_ASYNC (RW) 390 * 391 * GPIO interrupt asynchronous, each bit represents a bus bit 392 * 0: irq is triggered base on system clock 393 * 1: irq is triggered combinational 394 * Note: combinational interrupt is sensitive to environment noise 395 */ 396 #define GPIO_AS_TOGGLE_IRQ_ASYNC_MASK (0xFFFFFFFFUL) 397 #define GPIO_AS_TOGGLE_IRQ_ASYNC_SHIFT (0U) 398 #define GPIO_AS_TOGGLE_IRQ_ASYNC_SET(x) (((uint32_t)(x) << GPIO_AS_TOGGLE_IRQ_ASYNC_SHIFT) & GPIO_AS_TOGGLE_IRQ_ASYNC_MASK) 399 #define GPIO_AS_TOGGLE_IRQ_ASYNC_GET(x) (((uint32_t)(x) & GPIO_AS_TOGGLE_IRQ_ASYNC_MASK) >> GPIO_AS_TOGGLE_IRQ_ASYNC_SHIFT) 400 401 402 403 /* DI register group index macro definition */ 404 #define GPIO_DI_GPIOA (0UL) 405 #define GPIO_DI_GPIOB (1UL) 406 #define GPIO_DI_GPIOC (2UL) 407 #define GPIO_DI_GPIOD (3UL) 408 #define GPIO_DI_GPIOE (4UL) 409 #define GPIO_DI_GPIOF (5UL) 410 #define GPIO_DI_GPIOX (13UL) 411 #define GPIO_DI_GPIOY (14UL) 412 #define GPIO_DI_GPIOZ (15UL) 413 414 /* DO register group index macro definition */ 415 #define GPIO_DO_GPIOA (0UL) 416 #define GPIO_DO_GPIOB (1UL) 417 #define GPIO_DO_GPIOC (2UL) 418 #define GPIO_DO_GPIOD (3UL) 419 #define GPIO_DO_GPIOE (4UL) 420 #define GPIO_DO_GPIOF (5UL) 421 #define GPIO_DO_GPIOX (13UL) 422 #define GPIO_DO_GPIOY (14UL) 423 #define GPIO_DO_GPIOZ (15UL) 424 425 /* OE register group index macro definition */ 426 #define GPIO_OE_GPIOA (0UL) 427 #define GPIO_OE_GPIOB (1UL) 428 #define GPIO_OE_GPIOC (2UL) 429 #define GPIO_OE_GPIOD (3UL) 430 #define GPIO_OE_GPIOE (4UL) 431 #define GPIO_OE_GPIOF (5UL) 432 #define GPIO_OE_GPIOX (13UL) 433 #define GPIO_OE_GPIOY (14UL) 434 #define GPIO_OE_GPIOZ (15UL) 435 436 /* IF register group index macro definition */ 437 #define GPIO_IF_GPIOA (0UL) 438 #define GPIO_IF_GPIOB (1UL) 439 #define GPIO_IF_GPIOC (2UL) 440 #define GPIO_IF_GPIOD (3UL) 441 #define GPIO_IF_GPIOE (4UL) 442 #define GPIO_IF_GPIOF (5UL) 443 #define GPIO_IF_GPIOX (13UL) 444 #define GPIO_IF_GPIOY (14UL) 445 #define GPIO_IF_GPIOZ (15UL) 446 447 /* IE register group index macro definition */ 448 #define GPIO_IE_GPIOA (0UL) 449 #define GPIO_IE_GPIOB (1UL) 450 #define GPIO_IE_GPIOC (2UL) 451 #define GPIO_IE_GPIOD (3UL) 452 #define GPIO_IE_GPIOE (4UL) 453 #define GPIO_IE_GPIOF (5UL) 454 #define GPIO_IE_GPIOX (13UL) 455 #define GPIO_IE_GPIOY (14UL) 456 #define GPIO_IE_GPIOZ (15UL) 457 458 /* PL register group index macro definition */ 459 #define GPIO_PL_GPIOA (0UL) 460 #define GPIO_PL_GPIOB (1UL) 461 #define GPIO_PL_GPIOC (2UL) 462 #define GPIO_PL_GPIOD (3UL) 463 #define GPIO_PL_GPIOE (4UL) 464 #define GPIO_PL_GPIOF (5UL) 465 #define GPIO_PL_GPIOX (13UL) 466 #define GPIO_PL_GPIOY (14UL) 467 #define GPIO_PL_GPIOZ (15UL) 468 469 /* TP register group index macro definition */ 470 #define GPIO_TP_GPIOA (0UL) 471 #define GPIO_TP_GPIOB (1UL) 472 #define GPIO_TP_GPIOC (2UL) 473 #define GPIO_TP_GPIOD (3UL) 474 #define GPIO_TP_GPIOE (4UL) 475 #define GPIO_TP_GPIOF (5UL) 476 #define GPIO_TP_GPIOX (13UL) 477 #define GPIO_TP_GPIOY (14UL) 478 #define GPIO_TP_GPIOZ (15UL) 479 480 /* AS register group index macro definition */ 481 #define GPIO_AS_GPIOA (0UL) 482 #define GPIO_AS_GPIOB (1UL) 483 #define GPIO_AS_GPIOC (2UL) 484 #define GPIO_AS_GPIOD (3UL) 485 #define GPIO_AS_GPIOE (4UL) 486 #define GPIO_AS_GPIOF (5UL) 487 #define GPIO_AS_GPIOX (13UL) 488 #define GPIO_AS_GPIOY (14UL) 489 #define GPIO_AS_GPIOZ (15UL) 490 491 492 #endif /* HPM_GPIO_H */ 493