blob: 8cb981fcad28d5cf78a421b7629262d75fa25f37 [file] [log] [blame]
/*
* Copyright (c) 2021 Microchip Technology Inc. and its subsidiaries.
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef _MEC172X_GPIO_H
#define _MEC172X_GPIO_H
#include <stdint.h>
#include <stddef.h>
#define NUM_MCHP_GPIO_PORTS 6u
#define MAX_NUM_MCHP_GPIO (NUM_MCHP_GPIO_PORTS * 32u)
#define MCHP_GPIO_CTRL_OFS 0u
#define MCHP_GPIO_PARIN_OFS 0x0300u
#define MCHP_GPIO_PAROUT_OFS 0x0380u
#define MCHP_GPIO_LOCK_OFS 0x03e8u
#define MCHP_GPIO_CTRL2_OFS 0x0500u
/* MEC172XH-B0-SZ (144-pin) */
#define MCHP_GPIO_PORT_A_BITMAP 0x7FFFFF9Du /* GPIO_0000 - 0036 GIRQ11 */
#define MCHP_GPIO_PORT_B_BITMAP 0x7FFFFFFDu /* GPIO_0040 - 0076 GIRQ10 */
#define MCHP_GPIO_PORT_C_BITMAP 0x07FFFCF7u /* GPIO_0100 - 0136 GIRQ09 */
#define MCHP_GPIO_PORT_D_BITMAP 0x272EFFFFu /* GPIO_0140 - 0176 GIRQ08 */
#define MCHP_GPIO_PORT_E_BITMAP 0x00DE00FFu /* GPIO_0200 - 0236 GIRQ12 */
#define MCHP_GPIO_PORT_F_BITMAP 0x0000397Fu /* GPIO_0240 - 0276 GIRQ26 */
#define MCHP_GPIO_PORT_A_DRVSTR_BITMAP 0x7FFFFF9Du
#define MCHP_GPIO_PORT_B_DRVSTR_BITMAP 0x7FFFFFFDu
#define MCHP_GPIO_PORT_C_DRVSTR_BITMAP 0x07FFFCF7u
#define MCHP_GPIO_PORT_D_DRVSTR_BITMAP 0x272EFFFFu
#define MCHP_GPIO_PORT_E_DRVSTR_BITMAP 0x00DE00FFu
#define MCHP_GPIO_PORT_F_DRVSTR_BITMAP 0x0000397Fu
/* 32-bit Control register */
#define MCHP_GPIO_CTRL_MASK 0x0101ffffu
/* bits[15:0] of Control register */
#define MCHP_GPIO_CTRL_CFG_MASK 0xffffu
/* Disable interrupt detect and pad */
#define MCHP_GPIO_CTRL_DIS_PIN 0x8040u
#define MCHP_GPIO_CTRL_DFLT 0x8040u
#define MCHP_GPIO_CTRL_DFLT_MASK 0xffffu
#define GPIO000_CTRL_DFLT 0x1040u
#define GPIO062_CTRL_DFLT 0x8240u
#define GPIO116_CTRL_DFLT 0x0041u
#define GPIO161_CTRL_DFLT 0x1040u
#define GPIO162_CTRL_DFLT 0x1040u
#define GPIO170_CTRL_DFLT 0x0041u
#define GPIO234_CTRL_DFLT 0x1040u
/* GPIO Control register field definitions. */
/* bits[1:0] internal pull up/down selection */
#define MCHP_GPIO_CTRL_PUD_POS 0
#define MCHP_GPIO_CTRL_PUD_MASK0 0x03u
#define MCHP_GPIO_CTRL_PUD_MASK 0x03u
#define MCHP_GPIO_CTRL_PUD_NONE 0x00u
#define MCHP_GPIO_CTRL_PUD_PU 0x01u
#define MCHP_GPIO_CTRL_PUD_PD 0x02u
/* Repeater(keeper) mode */
#define MCHP_GPIO_CTRL_PUD_RPT 0x03u
/* bits[3:2] power gating */
#define MCHP_GPIO_CTRL_PWRG_POS 2
#define MCHP_GPIO_CTRL_PWRG_MASK0 0x03u
#define MCHP_GPIO_CTRL_PWRG_VTR_IO 0
#define MCHP_GPIO_CTRL_PWRG_VCC_IO SHLU32(1, MCHP_GPIO_CTRL_PWRG_POS)
#define MCHP_GPIO_CTRL_PWRG_OFF SHLU32(2, MCHP_GPIO_CTRL_PWRG_POS)
#define MCHP_GPIO_CTRL_PWRG_RSVD SHLU32(3, MCHP_GPIO_CTRL_PWRG_POS)
#define MCHP_GPIO_CTRL_PWRG_MASK SHLU32(3, MCHP_GPIO_CTRL_PWRG_POS)
/* bits[7:4] interrupt detection mode */
#define MCHP_GPIO_CTRL_IDET_POS 4
#define MCHP_GPIO_CTRL_IDET_MASK0 0x0fu
#define MCHP_GPIO_CTRL_IDET_LVL_LO 0
#define MCHP_GPIO_CTRL_IDET_LVL_HI SHLU32(1, MCHP_GPIO_CTRL_IDET_POS)
#define MCHP_GPIO_CTRL_IDET_DISABLE SHLU32(4, MCHP_GPIO_CTRL_IDET_POS)
#define MCHP_GPIO_CTRL_IDET_REDGE SHLU32(0xd, MCHP_GPIO_CTRL_IDET_POS)
#define MCHP_GPIO_CTRL_IDET_FEDGE SHLU32(0xe, MCHP_GPIO_CTRL_IDET_POS)
#define MCHP_GPIO_CTRL_IDET_BEDGE SHLU32(0xf, MCHP_GPIO_CTRL_IDET_POS)
#define MCHP_GPIO_CTRL_IDET_MASK SHLU32(0xf, MCHP_GPIO_CTRL_IDET_POS)
/* bit[8] output buffer type: push-pull or open-drain */
#define MCHP_GPIO_CTRL_BUFT_POS 8
#define MCHP_GPIO_CTRL_BUFT_MASK BIT(MCHP_GPIO_CTRL_BUFT_POS)
#define MCHP_GPIO_CTRL_BUFT_OPENDRAIN BIT(MCHP_GPIO_CTRL_BUFT_POS)
#define MCHP_GPIO_CTRL_BUFT_PUSHPULL 0
/* bit[9] direction */
#define MCHP_GPIO_CTRL_DIR_POS 9
#define MCHP_GPIO_CTRL_DIR_MASK BIT(MCHP_GPIO_CTRL_DIR_POS)
#define MCHP_GPIO_CTRL_DIR_OUTPUT BIT(MCHP_GPIO_CTRL_DIR_POS)
#define MCHP_GPIO_CTRL_DIR_INPUT 0
/*
* bit[10] Alternate output disable. Default==0(alternate output enabled)
* GPIO output value is controlled by bit[16] of this register.
* Set bit[10]=1 if you wish to control pin output using the parallel
* GPIO output register bit for this pin.
*/
#define MCHP_GPIO_CTRL_AOD_POS 10
#define MCHP_GPIO_CTRL_AOD_MASK BIT(MCHP_GPIO_CTRL_AOD_POS)
#define MCHP_GPIO_CTRL_AOD_DIS BIT(MCHP_GPIO_CTRL_AOD_POS)
/* bit[11] GPIO function output polarity */
#define MCHP_GPIO_CTRL_POL_POS 11
#define MCHP_GPIO_CTRL_POL_INVERT BIT(MCHP_GPIO_CTRL_POL_POS)
/* bits[14:12] pin mux (function) */
#define MCHP_GPIO_CTRL_MUX_POS 12
#define MCHP_GPIO_CTRL_MUX_MASK0 0x07u
#define MCHP_GPIO_CTRL_MUX_MASK SHLU32(7, MCHP_GPIO_CTRL_MUX_POS)
#define MCHP_GPIO_CTRL_MUX_F0 0
#define MCHP_GPIO_CTRL_MUX_GPIO MCHP_GPIO_CTRL_MUX_F0
#define MCHP_GPIO_CTRL_MUX_F1 SHLU32(1, MCHP_GPIO_CTRL_MUX_POS)
#define MCHP_GPIO_CTRL_MUX_F2 SHLU32(2, MCHP_GPIO_CTRL_MUX_POS)
#define MCHP_GPIO_CTRL_MUX_F3 SHLU32(3, MCHP_GPIO_CTRL_MUX_POS)
#define MCHP_GPIO_CTRL_MUX_F4 SHLU32(4, MCHP_GPIO_CTRL_MUX_POS)
#define MCHP_GPIO_CTRL_MUX_F5 SHLU32(5, MCHP_GPIO_CTRL_MUX_POS)
#define MCHP_GPIO_CTRL_MUX_F6 SHLU32(6, MCHP_GPIO_CTRL_MUX_POS)
#define MCHP_GPIO_CTRL_MUX_F7 SHLU32(7, MCHP_GPIO_CTRL_MUX_POS)
#define MCHP_GPIO_CTRL_MUX(n) SHLU32(((n) & 0x7u), MCHP_GPIO_CTRL_MUX_POS)
/*
* bit[15] Disables input pad leaving output pad enabled
* Useful for reducing power consumption of output only pins.
*/
#define MCHP_GPIO_CTRL_INPAD_DIS_POS 15
#define MCHP_GPIO_CTRL_INPAD_DIS_MASK BIT(MCHP_GPIO_CTRL_INPAD_DIS_POS)
#define MCHP_GPIO_CTRL_INPAD_DIS BIT(MCHP_GPIO_CTRL_INPAD_DIS_POS)
/* bit[16]: Alternate output pin value. Enabled when bit[10]==0(default) */
#define MCHP_GPIO_CTRL_OUTVAL_POS 16
#define MCHP_GPIO_CTRL_OUTV_HI BIT(MCHP_GPIO_CTRL_OUTVAL_POS)
/* bit[24] Input pad value. Always live unless input pad is powered down */
#define MCHP_GPIO_CTRL_INPAD_VAL_POS 24
#define MCHP_GPIO_CTRL_INPAD_VAL_HI BIT(MCHP_GPIO_CTRL_INPAD_VAL_POS)
#define MCHP_GPIO_CTRL_DRIVE_OD_HI \
(MCHP_GPIO_CTRL_BUFT_OPENDRAIN + MCHP_GPIO_CTRL_DIR_OUTPUT + \
MCHP_GPIO_CTRL_MUX_GPIO + MCHP_GPIO_CTRL_OUTV_HI)
/*
* Each GPIO pin implements a second control register.
* GPIO Control 2 register selects pin drive strength and slew rate.
* bit[0] = slew rate: 0=slow, 1=fast
* bits[5:4] = drive strength
* 00b = 2mA (default)
* 01b = 4mA
* 10b = 8mA
* 11b = 12mA
*/
#define MCHP_GPIO_CTRL2_OFFSET 0x0500u
#define MCHP_GPIO_CTRL2_SLEW_POS 0
#define MCHP_GPIO_CTRL2_SLEW_MASK 0x01u
#define MCHP_GPIO_CTRL2_SLEW_SLOW 0
#define MCHP_GPIO_CTRL2_SLEW_FAST BIT(MCHP_GPIO_CTRL2_SLEW_POS)
#define MCHP_GPIO_CTRL2_DRV_STR_POS 4
#define MCHP_GPIO_CTRL2_DRV_STR_MASK 0x30u
#define MCHP_GPIO_CTRL2_DRV_STR_2MA 0
#define MCHP_GPIO_CTRL2_DRV_STR_4MA 0x10u
#define MCHP_GPIO_CTRL2_DRV_STR_8MA 0x20u
#define MCHP_GPIO_CTRL2_DRV_STR_12MA 0x30u
/* Interfaces to any C modules */
#ifdef __cplusplus
extern "C" {
#endif
/* GPIO pin numbers SZ (144-pin) package */
enum mec_gpio_idx {
MCHP_GPIO_0000_ID = 0,
MCHP_GPIO_0002_ID = 2,
MCHP_GPIO_0003_ID,
MCHP_GPIO_0004_ID,
MCHP_GPIO_0007_ID = 7,
MCHP_GPIO_0010_ID,
MCHP_GPIO_0011_ID,
MCHP_GPIO_0012_ID,
MCHP_GPIO_0013_ID,
MCHP_GPIO_0014_ID,
MCHP_GPIO_0015_ID,
MCHP_GPIO_0016_ID,
MCHP_GPIO_0017_ID,
MCHP_GPIO_0020_ID,
MCHP_GPIO_0021_ID,
MCHP_GPIO_0022_ID,
MCHP_GPIO_0023_ID,
MCHP_GPIO_0024_ID,
MCHP_GPIO_0025_ID,
MCHP_GPIO_0026_ID,
MCHP_GPIO_0027_ID,
MCHP_GPIO_0030_ID,
MCHP_GPIO_0031_ID,
MCHP_GPIO_0032_ID,
MCHP_GPIO_0033_ID,
MCHP_GPIO_0034_ID,
MCHP_GPIO_0035_ID,
MCHP_GPIO_0036_ID,
MCHP_GPIO_0040_ID = 32,
MCHP_GPIO_0042_ID = 34,
MCHP_GPIO_0043_ID,
MCHP_GPIO_0044_ID,
MCHP_GPIO_0045_ID,
MCHP_GPIO_0046_ID,
MCHP_GPIO_0047_ID,
MCHP_GPIO_0050_ID,
MCHP_GPIO_0051_ID,
MCHP_GPIO_0052_ID,
MCHP_GPIO_0053_ID,
MCHP_GPIO_0054_ID,
MCHP_GPIO_0055_ID,
MCHP_GPIO_0056_ID,
MCHP_GPIO_0057_ID,
MCHP_GPIO_0060_ID,
MCHP_GPIO_0061_ID,
MCHP_GPIO_0062_ID,
MCHP_GPIO_0063_ID,
MCHP_GPIO_0064_ID,
MCHP_GPIO_0065_ID,
MCHP_GPIO_0066_ID,
MCHP_GPIO_0067_ID,
MCHP_GPIO_0070_ID,
MCHP_GPIO_0071_ID,
MCHP_GPIO_0072_ID,
MCHP_GPIO_0073_ID,
MCHP_GPIO_0074_ID,
MCHP_GPIO_0075_ID,
MCHP_GPIO_0076_ID,
MCHP_GPIO_0100_ID = 64,
MCHP_GPIO_0101_ID,
MCHP_GPIO_0102_ID,
MCHP_GPIO_0104_ID = 68,
MCHP_GPIO_0105_ID,
MCHP_GPIO_0106_ID,
MCHP_GPIO_0107_ID,
MCHP_GPIO_0112_ID = 74,
MCHP_GPIO_0113_ID,
MCHP_GPIO_0114_ID,
MCHP_GPIO_0115_ID,
MCHP_GPIO_0116_ID,
MCHP_GPIO_0117_ID,
MCHP_GPIO_0120_ID = 80,
MCHP_GPIO_0121_ID,
MCHP_GPIO_0122_ID,
MCHP_GPIO_0123_ID,
MCHP_GPIO_0124_ID,
MCHP_GPIO_0125_ID,
MCHP_GPIO_0126_ID,
MCHP_GPIO_0127_ID,
MCHP_GPIO_0130_ID,
MCHP_GPIO_0131_ID,
MCHP_GPIO_0132_ID,
MCHP_GPIO_0140_ID = 96,
MCHP_GPIO_0141_ID,
MCHP_GPIO_0142_ID,
MCHP_GPIO_0143_ID,
MCHP_GPIO_0144_ID,
MCHP_GPIO_0145_ID,
MCHP_GPIO_0146_ID,
MCHP_GPIO_0147_ID,
MCHP_GPIO_0150_ID,
MCHP_GPIO_0151_ID,
MCHP_GPIO_0152_ID,
MCHP_GPIO_0153_ID,
MCHP_GPIO_0154_ID,
MCHP_GPIO_0155_ID,
MCHP_GPIO_0156_ID,
MCHP_GPIO_0157_ID,
MCHP_GPIO_0161_ID = 113,
MCHP_GPIO_0162_ID,
MCHP_GPIO_0165_ID = 117,
MCHP_GPIO_0170_ID = 120,
MCHP_GPIO_0171_ID,
MCHP_GPIO_0175_ID = 125,
MCHP_GPIO_0200_ID = 128,
MCHP_GPIO_0201_ID,
MCHP_GPIO_0202_ID,
MCHP_GPIO_0203_ID,
MCHP_GPIO_0204_ID,
MCHP_GPIO_0205_ID,
MCHP_GPIO_0206_ID,
MCHP_GPIO_0207_ID,
MCHP_GPIO_0221_ID = 145,
MCHP_GPIO_0222_ID,
MCHP_GPIO_0223_ID,
MCHP_GPIO_0224_ID,
MCHP_GPIO_0226_ID = 150,
MCHP_GPIO_0227_ID,
MCHP_GPIO_0240_ID = 160,
MCHP_GPIO_0241_ID,
MCHP_GPIO_0242_ID,
MCHP_GPIO_0243_ID,
MCHP_GPIO_0244_ID,
MCHP_GPIO_0245_ID,
MCHP_GPIO_0246_ID,
MCHP_GPIO_0254_ID = 172,
MCHP_GPIO_0255_ID,
MCHP_GPIO_MAX_ID
};
#define MCHP_GPIO_PIN2PORT(pin_id) ((uint32_t)(pin_id) >> 5)
#define MAX_MCHP_GPIO_BANK 6u
#define MCHP_GPIO_LOCK5_IDX 0u
#define MCHP_GPIO_LOCK4_IDX 1u
#define MCHP_GPIO_LOCK3_IDX 2u
#define MCHP_GPIO_LOCK2_IDX 3u
#define MCHP_GPIO_LOCK1_IDX 4u
#define MCHP_GPIO_LOCK0_IDX 5u
#define MCHP_GPIO_LOCK_MAX_IDX 6u
/* Helper functions */
enum mchp_gpio_pud {
MCHP_GPIO_NO_PUD = 0,
MCHP_GPIO_PU_EN,
MCHP_GPIO_PD_EN,
MCHP_GPIO_RPT_EN,
};
enum mchp_gpio_pwrgate {
MCHP_GPIO_PWRGT_VTR = 0,
MCHP_GPIO_PWRGT_VCC,
MCHP_GPIO_PWRGD_OFF,
};
enum mchp_gpio_idet {
MCHP_GPIO_IDET_LO_LVL = 0u,
MCHP_GPIO_IDET_HI_LVL = 0x01u,
MCHP_GPIO_IDET_DIS = 0x04u,
MCHP_GPIO_IDET_RISING_EDGE = 0x0du,
MCHP_GPIO_IDET_FALLING_EDGE = 0x0eu,
MCHP_GPIO_IDET_BOTH_EDGES = 0x0fu
};
enum mchp_gpio_outbuf {
MCHP_GPIO_PUSH_PULL = 0,
MCHP_GPIO_OPEN_DRAIN,
};
enum mchp_gpio_dir {
MCHP_GPIO_DIR_IN = 0,
MCHP_GPIO_DIR_OUT,
};
enum mchp_gpio_parout_en {
MCHP_GPIO_PAROUT_DIS = 0,
MCHP_GPIO_PAROUT_EN,
};
enum mchp_gpio_pol {
MCHP_GPIO_POL_NORM = 0,
MCHP_GPIO_POL_INV,
};
enum mchp_gpio_mux {
MCHP_GPIO_MUX_GPIO = 0u,
MCHP_GPIO_MUX_FUNC1,
MCHP_GPIO_MUX_FUNC2,
MCHP_GPIO_MUX_FUNC3,
MCHP_GPIO_MUX_FUNC4,
MCHP_GPIO_MUX_FUNC5,
MCHP_GPIO_MUX_FUNC6,
MCHP_GPIO_MUX_FUNC7,
MCHP_GPIO_MUX_MAX
};
enum mchp_gpio_inpad_ctrl {
MCHP_GPIO_INPAD_CTRL_EN = 0,
MCHP_GPIO_INPAD_CTRL_DIS,
};
enum mchp_gpio_alt_out {
MCHP_GPIO_ALT_OUT_LO = 0,
MCHP_GPIO_ALT_OUT_HI,
};
enum mchp_gpio_slew {
MCHP_GPIO_SLEW_SLOW = 0,
MCHP_GPIO_SLEW_FAST,
};
enum mchp_gpio_drv_str {
MCHP_GPIO_DRV_STR_2MA = 0,
MCHP_GPIO_DRV_STR_4MA,
MCHP_GPIO_DRV_STR_8MA,
MCHP_GPIO_DRV_STR_12MA,
};
/** @brief All GPIO register as arrays of registers */
struct gpio_regs {
volatile uint32_t CTRL[174];
uint32_t RESERVED[18];
volatile uint32_t PARIN[6];
uint32_t RESERVED1[26];
volatile uint32_t PAROUT[6];
uint32_t RESERVED2[20];
volatile uint32_t LOCK[6];
uint32_t RESERVED3[64];
volatile uint32_t CTRL2[174];
};
/** @brief GPIO control registers by pin name */
struct gpio_ctrl_regs {
volatile uint32_t CTRL_0000;
uint32_t RSVD1[1];
volatile uint32_t CTRL_0002;
volatile uint32_t CTRL_0003;
volatile uint32_t CTRL_0004;
uint32_t RSVD2[2];
volatile uint32_t CTRL_0007;
volatile uint32_t CTRL_0010;
volatile uint32_t CTRL_0011;
volatile uint32_t CTRL_0012;
volatile uint32_t CTRL_0013;
volatile uint32_t CTRL_0014;
volatile uint32_t CTRL_0015;
volatile uint32_t CTRL_0016;
volatile uint32_t CTRL_0017;
volatile uint32_t CTRL_0020;
volatile uint32_t CTRL_0021;
volatile uint32_t CTRL_0022;
volatile uint32_t CTRL_0023;
volatile uint32_t CTRL_0024;
volatile uint32_t CTRL_0025;
volatile uint32_t CTRL_0026;
volatile uint32_t CTRL_0027;
volatile uint32_t CTRL_0030;
volatile uint32_t CTRL_0031;
volatile uint32_t CTRL_0032;
volatile uint32_t CTRL_0033;
volatile uint32_t CTRL_0034;
volatile uint32_t CTRL_0035;
volatile uint32_t CTRL_0036;
uint32_t RSVD3[1];
volatile uint32_t CTRL_0040;
uint32_t RSVD4[1];
volatile uint32_t CTRL_0042;
volatile uint32_t CTRL_0043;
volatile uint32_t CTRL_0044;
volatile uint32_t CTRL_0045;
volatile uint32_t CTRL_0046;
volatile uint32_t CTRL_0047;
volatile uint32_t CTRL_0050;
volatile uint32_t CTRL_0051;
volatile uint32_t CTRL_0052;
volatile uint32_t CTRL_0053;
volatile uint32_t CTRL_0054;
volatile uint32_t CTRL_0055;
volatile uint32_t CTRL_0056;
volatile uint32_t CTRL_0057;
volatile uint32_t CTRL_0060;
volatile uint32_t CTRL_0061;
volatile uint32_t CTRL_0062;
volatile uint32_t CTRL_0063;
volatile uint32_t CTRL_0064;
volatile uint32_t CTRL_0065;
volatile uint32_t CTRL_0066;
volatile uint32_t CTRL_0067;
volatile uint32_t CTRL_0070;
volatile uint32_t CTRL_0071;
volatile uint32_t CTRL_0072;
volatile uint32_t CTRL_0073;
volatile uint32_t CTRL_0074;
volatile uint32_t CTRL_0075;
volatile uint32_t CTRL_0076;
uint32_t RSVD5[1];
volatile uint32_t CTRL_0100;
volatile uint32_t CTRL_0101;
volatile uint32_t CTRL_0102;
uint32_t RSVD6[1];
volatile uint32_t CTRL_0104;
volatile uint32_t CTRL_0105;
volatile uint32_t CTRL_0106;
volatile uint32_t CTRL_0107;
uint32_t RSVD7[2];
volatile uint32_t CTRL_0112;
volatile uint32_t CTRL_0113;
volatile uint32_t CTRL_0114;
volatile uint32_t CTRL_0115;
volatile uint32_t CTRL_0116;
volatile uint32_t CTRL_0117;
volatile uint32_t CTRL_0120;
volatile uint32_t CTRL_0121;
volatile uint32_t CTRL_0122;
volatile uint32_t CTRL_0123;
volatile uint32_t CTRL_0124;
volatile uint32_t CTRL_0125;
volatile uint32_t CTRL_0126;
volatile uint32_t CTRL_0127;
volatile uint32_t CTRL_0130;
volatile uint32_t CTRL_0131;
volatile uint32_t CTRL_0132;
uint32_t RSVD9[5];
volatile uint32_t CTRL_0140;
volatile uint32_t CTRL_0141;
volatile uint32_t CTRL_0142;
volatile uint32_t CTRL_0143;
volatile uint32_t CTRL_0144;
volatile uint32_t CTRL_0145;
volatile uint32_t CTRL_0146;
volatile uint32_t CTRL_0147;
volatile uint32_t CTRL_0150;
volatile uint32_t CTRL_0151;
volatile uint32_t CTRL_0152;
volatile uint32_t CTRL_0153;
volatile uint32_t CTRL_0154;
volatile uint32_t CTRL_0155;
volatile uint32_t CTRL_0156;
volatile uint32_t CTRL_0157;
uint32_t RSVD10[1];
volatile uint32_t CTRL_0161;
volatile uint32_t CTRL_0162;
uint32_t RSVD11[2];
volatile uint32_t CTRL_0165;
uint32_t RSVD12[2];
volatile uint32_t CTRL_0170;
volatile uint32_t CTRL_0171;
uint32_t RSVD13[3];
volatile uint32_t CTRL_0175;
uint32_t RSVD14[2];
volatile uint32_t CTRL_0200;
volatile uint32_t CTRL_0201;
volatile uint32_t CTRL_0202;
volatile uint32_t CTRL_0203;
volatile uint32_t CTRL_0204;
volatile uint32_t CTRL_0205;
volatile uint32_t CTRL_0206;
volatile uint32_t CTRL_0207;
uint32_t RSVD15[9];
volatile uint32_t CTRL_0221;
volatile uint32_t CTRL_0222;
volatile uint32_t CTRL_0223;
volatile uint32_t CTRL_0224;
uint32_t RSVD16[1];
volatile uint32_t CTRL_0226;
volatile uint32_t CTRL_0227;
uint32_t RSVD17[8];
volatile uint32_t CTRL_0240;
volatile uint32_t CTRL_0241;
volatile uint32_t CTRL_0242;
volatile uint32_t CTRL_0243;
volatile uint32_t CTRL_0244;
volatile uint32_t CTRL_0245;
volatile uint32_t CTRL_0246;
uint32_t RSVD18[5];
volatile uint32_t CTRL_0254;
volatile uint32_t CTRL_0255;
};
/** @brief GPIO Control 2 registers by pin name */
struct gpio_ctrl2_regs {
volatile uint32_t CTRL2_0000;
uint32_t RSVD1[1];
volatile uint32_t CTRL2_0002;
volatile uint32_t CTRL2_0003;
volatile uint32_t CTRL2_0004;
uint32_t RSVD2[2];
volatile uint32_t CTRL2_0007;
volatile uint32_t CTRL2_0010;
volatile uint32_t CTRL2_0011;
volatile uint32_t CTRL2_0012;
volatile uint32_t CTRL2_0013;
volatile uint32_t CTRL2_0014;
volatile uint32_t CTRL2_0015;
volatile uint32_t CTRL2_0016;
volatile uint32_t CTRL2_0017;
volatile uint32_t CTRL2_0020;
volatile uint32_t CTRL2_0021;
volatile uint32_t CTRL2_0022;
volatile uint32_t CTRL2_0023;
volatile uint32_t CTRL2_0024;
volatile uint32_t CTRL2_0025;
volatile uint32_t CTRL2_0026;
volatile uint32_t CTRL2_0027;
volatile uint32_t CTRL2_0030;
volatile uint32_t CTRL2_0031;
volatile uint32_t CTRL2_0032;
volatile uint32_t CTRL2_0033;
volatile uint32_t CTRL2_0034;
volatile uint32_t CTRL2_0035;
volatile uint32_t CTRL2_0036;
uint32_t RSVD3[1];
volatile uint32_t CTRL2_0040;
uint32_t RSVD4[1];
volatile uint32_t CTRL2_0042;
volatile uint32_t CTRL2_0043;
volatile uint32_t CTRL2_0044;
volatile uint32_t CTRL2_0045;
volatile uint32_t CTRL2_0046;
volatile uint32_t CTRL2_0047;
volatile uint32_t CTRL2_0050;
volatile uint32_t CTRL2_0051;
volatile uint32_t CTRL2_0052;
volatile uint32_t CTRL2_0053;
volatile uint32_t CTRL2_0054;
volatile uint32_t CTRL2_0055;
volatile uint32_t CTRL2_0056;
volatile uint32_t CTRL2_0057;
volatile uint32_t CTRL2_0060;
volatile uint32_t CTRL2_0061;
volatile uint32_t CTRL2_0062;
volatile uint32_t CTRL2_0063;
volatile uint32_t CTRL2_0064;
volatile uint32_t CTRL2_0065;
volatile uint32_t CTRL2_0066;
volatile uint32_t CTRL2_0067;
volatile uint32_t CTRL2_0070;
volatile uint32_t CTRL2_0071;
volatile uint32_t CTRL2_0072;
volatile uint32_t CTRL2_0073;
volatile uint32_t CTRL2_0074;
volatile uint32_t CTRL2_0075;
volatile uint32_t CTRL2_0076;
uint32_t RSVD5[1];
volatile uint32_t CTRL2_0100;
volatile uint32_t CTRL2_0101;
volatile uint32_t CTRL2_0102;
uint32_t RSVD6[1];
volatile uint32_t CTRL2_0104;
volatile uint32_t CTRL2_0105;
volatile uint32_t CTRL2_0106;
volatile uint32_t CTRL2_0107;
uint32_t RSVD7[2];
volatile uint32_t CTRL2_0112;
volatile uint32_t CTRL2_0113;
volatile uint32_t CTRL2_0114;
volatile uint32_t CTRL2_0115;
volatile uint32_t CTRL2_0116;
volatile uint32_t CTRL2_0117;
volatile uint32_t CTRL2_0120;
volatile uint32_t CTRL2_0121;
volatile uint32_t CTRL2_0122;
volatile uint32_t CTRL2_0123;
volatile uint32_t CTRL2_0124;
volatile uint32_t CTRL2_0125;
volatile uint32_t CTRL2_0126;
volatile uint32_t CTRL2_0127;
volatile uint32_t CTRL2_0130;
volatile uint32_t CTRL2_0131;
volatile uint32_t CTRL2_0132;
uint32_t RSVD9[5];
volatile uint32_t CTRL2_0140;
volatile uint32_t CTRL2_0141;
volatile uint32_t CTRL2_0142;
volatile uint32_t CTRL2_0143;
volatile uint32_t CTRL2_0144;
volatile uint32_t CTRL2_0145;
volatile uint32_t CTRL2_0146;
volatile uint32_t CTRL2_0147;
volatile uint32_t CTRL2_0150;
volatile uint32_t CTRL2_0151;
volatile uint32_t CTRL2_0152;
volatile uint32_t CTRL2_0153;
volatile uint32_t CTRL2_0154;
volatile uint32_t CTRL2_0155;
volatile uint32_t CTRL2_0156;
volatile uint32_t CTRL2_0157;
uint32_t RSVD10[1];
volatile uint32_t CTRL2_0161;
volatile uint32_t CTRL2_0162;
uint32_t RSVD11[2];
volatile uint32_t CTRL2_0165;
uint32_t RSVD12[2];
volatile uint32_t CTRL2_0170;
volatile uint32_t CTRL2_0171;
uint32_t RSVD13[3];
volatile uint32_t CTRL2_0175;
uint32_t RSVD14[2];
volatile uint32_t CTRL2_0200;
volatile uint32_t CTRL2_0201;
volatile uint32_t CTRL2_0202;
volatile uint32_t CTRL2_0203;
volatile uint32_t CTRL2_0204;
volatile uint32_t CTRL2_0205;
volatile uint32_t CTRL2_0206;
volatile uint32_t CTRL2_0207;
uint32_t RSVD15[9];
volatile uint32_t CTRL2_0221;
volatile uint32_t CTRL2_0222;
volatile uint32_t CTRL2_0223;
volatile uint32_t CTRL2_0224;
uint32_t RSVD16[1];
volatile uint32_t CTRL2_0226;
volatile uint32_t CTRL2_0227;
uint32_t RSVD17[8];
volatile uint32_t CTRL2_0240;
volatile uint32_t CTRL2_0241;
volatile uint32_t CTRL2_0242;
volatile uint32_t CTRL2_0243;
volatile uint32_t CTRL2_0244;
volatile uint32_t CTRL2_0245;
volatile uint32_t CTRL2_0246;
uint32_t RSVD18[5];
volatile uint32_t CTRL2_0254;
volatile uint32_t CTRL2_0255;
};
/** @brief GPIO Parallel Input register. 32 GPIO pins per bank */
struct gpio_parin_regs {
volatile uint32_t PARIN0;
volatile uint32_t PARIN1;
volatile uint32_t PARIN2;
volatile uint32_t PARIN3;
volatile uint32_t PARIN4;
volatile uint32_t PARIN5;
};
/** @brief GPIO Parallel Output register. 32 GPIO pins per bank */
struct gpio_parout_regs {
volatile uint32_t PAROUT0;
volatile uint32_t PAROUT1;
volatile uint32_t PAROUT2;
volatile uint32_t PAROUT3;
volatile uint32_t PAROUT4;
volatile uint32_t PAROUT5;
};
/** @brief GPIO Lock registers. 32 GPIO pins per bank. Write-once bits */
struct gpio_lock_regs {
volatile uint32_t LOCK5;
volatile uint32_t LOCK4;
volatile uint32_t LOCK3;
volatile uint32_t LOCK2;
volatile uint32_t LOCK1;
volatile uint32_t LOCK0;
};
#ifdef __cplusplus
}
#endif
#endif /* #ifndef _MEC172X_GPIO_H */