--- /dev/null
+/*****************************************************************************\r
+* Copyright 2014 Microchip Technology Inc. and its subsidiaries.\r
+* You may use this software and any derivatives exclusively with\r
+* Microchip products.\r
+* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS".\r
+* NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,\r
+* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,\r
+* AND FITNESS FOR A PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP\r
+* PRODUCTS, COMBINATION WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.\r
+* IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,\r
+* INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND\r
+* WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS\r
+* BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.\r
+* TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL\r
+* CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF\r
+* FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.\r
+* MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE\r
+* OF THESE TERMS.\r
+*****************************************************************************/\r
+\r
+\r
+/** @file mec14xx_gpio.h\r
+ *MEC14xx GPIO definitions\r
+ */\r
+/** @defgroup MEC14xx Peripherals GPIO\r
+ */\r
+\r
+#ifndef _MEC14XX_GPIO_H\r
+#define _MEC14XX_GPIO_H\r
+\r
+#include <stdint.h>\r
+#include "mec14xx.h"\r
+\r
+\r
+#ifdef __cplusplus\r
+ extern "C" {\r
+#endif \r
+\r
+#define NUM_GPIO_PORTS (MEC14xx_NUM_GPIO_BANKS)\r
+#define MAX_NUM_GPIO (NUM_GPIO_PORTS * 32)\r
+\r
+#define GPIO_PORT_A_BITMAP (0x7FFFFFFFul) // GPIO_0000 to GPIO_0037\r
+#define GPIO_PORT_B_BITMAP (0x00FFFFFFul) // GPIO_0040 to GPIO_0077\r
+#define GPIO_PORT_C_BITMAP (0x7FFFFFFFul) // GPIO_0100 to GPIO_0137\r
+#define GPIO_PORT_D_BITMAP (0x7FFFFFFFul) // GPIO_0140 to GPIO_0177\r
+\r
+\r
+#define GPIO_PORT_A_DRVSTR_BITMAP (0x7FFFFFFEul)\r
+#define GPIO_PORT_B_DRVSTR_BITMAP (0x006FFFFFul)\r
+#define GPIO_PORT_C_DRVSTR_BITMAP (0x7FFFFFFFul)\r
+#define GPIO_PORT_D_DRVSTR_BITMAP (0x007FFFFFul)\r
+\r
+\r
+//\r
+// Control \r
+//\r
+#define GPIO_CTRL_RSVD_MASK (0xFEFEC000UL)\r
+//\r
+#define GPIO_PUD_BITPOS (0)\r
+#define GPIO_PUD_BLEN (2)\r
+#define GPIO_PUD_MASK (0x03UL << (GPIO_PUD_BITPOS))\r
+#define GPIO_PUD_NONE (0x00)\r
+#define GPIO_PUD_PU (0x01)\r
+#define GPIO_PUD_PD (0x02)\r
+#define GPIO_PUD_NONE2 (0x03)\r
+//\r
+#define GPIO_PWRG_BITPOS (2)\r
+#define GPIO_PWRG_BLEN (2)\r
+#define GPIO_PWRG_MASK (0x03UL << (GPIO_PWRG_BITPOS))\r
+#define GPIO_PWRG_V3_S5 (0x00UL << (GPIO_PWRG_BITPOS))\r
+#define GPIO_PWRG_VCC_MAIN (0x01UL << (GPIO_PWRG_BITPOS))\r
+#define GPIO_PWRG_V3_DUAL (0x02UL << (GPIO_PWRG_BITPOS))\r
+#define GPIO_PWRG_UNPWRD (0x03UL << (GPIO_PWRG_BITPOS))\r
+//\r
+#define GPIO_INTDET_BITPOS (4)\r
+#define GPIO_INTDET_BLEN (4)\r
+#define GPIO_INTDET_MASK (0x0FUL << (GPIO_INTDET_BITPOS))\r
+#define GPIO_INTDET_LVL_LOW (0x00UL << (GPIO_INTDET_BITPOS)) \r
+#define GPIO_INTDET_LVL_HI (0x01UL << (GPIO_INTDET_BITPOS)) \r
+#define GPIO_INTDET_DISABLE (0x04UL << (GPIO_INTDET_BITPOS)) \r
+#define GPIO_INTDET_RISE_EDG (0x0DUL << (GPIO_INTDET_BITPOS)) \r
+#define GPIO_INTDET_FALL_EDG (0x0EUL << (GPIO_INTDET_BITPOS)) \r
+#define GPIO_INTDET_BOTH_EDG (0x0FUL << (GPIO_INTDET_BITPOS)) \r
+//\r
+#define GPIO_BUFFTYPE_BITPOS (8)\r
+#define GPIO_BUFFTYPE_BLEN (1)\r
+#define GPIO_BUFFTYPE_PUSHPULL (0x00UL << (GPIO_BUFFTYPE_BITPOS))\r
+#define GPIO_BUFFTYPE_OPENDRAIN (0x01UL << (GPIO_BUFFTYPE_BITPOS))\r
+//\r
+#define GPIO_DIR_BITPOS (9)\r
+#define GPIO_DIR_BLEN (1)\r
+#define GPIO_DIR_MASK (0x01UL << (GPIO_DIR_BITPOS))\r
+#define GPIO_DIR_INPUT (0x00UL << (GPIO_DIR_BITPOS))\r
+#define GPIO_DIR_OUTPUT (0x01UL << (GPIO_DIR_BITPOS))\r
+//\r
+#define GPIO_PARWEN_BITPOS (10)\r
+#define GPIO_PARWEN_BLEN (1)\r
+#define GPIO_PARWEN_DIS (0x00UL << (GPIO_PARWEN_BITPOS))\r
+#define GPIO_PARWEN_EN (0x01UL << (GPIO_PARWEN_BITPOS))\r
+//\r
+#define GPIO_POLARITY_BITPOS (11)\r
+#define GPIO_POLARITY_BLEN (1)\r
+#define GPIO_POLARITY_NON_INV (0x00UL << (GPIO_POLARITY_BITPOS))\r
+#define GPIO_POLARITY_INV (0x01UL << (GPIO_POLARITY_BITPOS))\r
+//\r
+#define GPIO_MUX_BITPOS (12)\r
+#define GPIO_MUX_BLEN (2)\r
+#define GPIO_MUX_MASK (0x0FUL << (GPIO_MUX_BITPOS))\r
+#define GPIO_MUX_GPIO (0x00UL << (GPIO_MUX_BITPOS)) \r
+#define GPIO_MUX_FUNC1 (0x01UL << (GPIO_MUX_BITPOS)) \r
+#define GPIO_MUX_FUNC2 (0x02UL << (GPIO_MUX_BITPOS)) \r
+#define GPIO_MUX_FUNC3 (0x03UL << (GPIO_MUX_BITPOS)) \r
+//\r
+#define GPIO_OUTPUT_BITPOS (16)\r
+#define GPIO_OUTPUT_BLEN (1)\r
+#define GPIO_OUTPUT_0 (0x00UL << (GPIO_OUTPUT_BITPOS))\r
+#define GPIO_OUTPUT_1 (0x01UL << (GPIO_OUTPUT_BITPOS))\r
+#define GP_OUTPUT_0 (0x00UL) // Byte or Bit-banding usage\r
+#define GP_OUTPUT_1 (0x01UL)\r
+//\r
+#define GPIO_PADIN_BITPOS (24)\r
+#define GPIO_PADIN_BLEN (1)\r
+#define GPIO_PADIN_LOW (0x00UL << (GPIO_PADIN_BITPOS))\r
+#define GPIO_PADIN_HI (0x01UL << (GPIO_PADIN_BITPOS))\r
+#define GP_PADIN_LO (0x00UL) // Byte or Bit-banding usage\r
+#define GP_PADIN_HI (0x01UL)\r
+\r
+#define GPIO_PIN_LOW (0UL)\r
+#define GPIO_PIN_HIGH (1UL)\r
+\r
+//\r
+// Drive Strength\r
+// For GPIO pins that implement drive strength each pin \r
+// has a 32-bit register containing bit fields for \r
+// slew rate and buffer current strength\r
+//\r
+#define GPIO_DRV_STR_OFFSET (0x0500ul)\r
+#define GPIO_DRV_SLEW_BITPOS (0ul)\r
+#define GPIO_DRV_SLEW_MASK (1ul << GPIO_DRV_SLEW_BITPOS)\r
+#define GPIO_DRV_SLEW_SLOW (0ul << GPIO_DRV_SLEW_BITPOS)\r
+#define GPIO_DRV_SLEW_FAST (1ul << GPIO_DRV_SLEW_BITPOS)\r
+#define GPIO_DRV_STR_BITPOS (4ul)\r
+#define GPIO_DRV_STR_LEN (2ul)\r
+#define GPIO_DRV_STR_MASK (0x03ul << GPIO_DRV_STR_BITPOS)\r
+#define GPIO_DRV_STR_2MA (0ul << GPIO_DRV_STR_BITPOS)\r
+#define GPIO_DRV_STR_4MA (1ul << GPIO_DRV_STR_BITPOS)\r
+#define GPIO_DRV_STR_8MA (2ul << GPIO_DRV_STR_BITPOS)\r
+#define GPIO_DRV_STR_12MA (3ul << GPIO_DRV_STR_BITPOS)\r
+\r
+/*****************************************************************************\r
+ * GPIO API\r
+ ****************************************************************************/\r
+#define GPIO_PORTA (0u)\r
+#define GPIO_PORTB (1u)\r
+#define GPIO_PORTC (2u)\r
+#define GPIO_PORTD (3u)\r
+#define GPIO_PORTE (4u)\r
+#define GPIO_MAX_PORT (5u)\r
+\r
+\r
+/*\r
+ * GPIO Functionality\r
+ */\r
+\r
+typedef enum gpio_id_t\r
+{\r
+ GPIO_0000_ID, // 00h: Begin Port A\r
+ GPIO_0001_ID,\r
+ GPIO_0002_ID,\r
+ GPIO_0003_ID,\r
+ GPIO_0004_ID,\r
+ GPIO_0005_ID,\r
+ GPIO_0006_ID,\r
+ GPIO_0007_ID,\r
+ //\r
+ GPIO_0010_ID, // 08h\r
+ GPIO_0011_ID,\r
+ GPIO_0012_ID,\r
+ GPIO_0013_ID,\r
+ GPIO_0014_ID,\r
+ GPIO_0015_ID,\r
+ GPIO_0016_ID,\r
+ GPIO_0017_ID,\r
+ //\r
+ GPIO_0020_ID, // 10h\r
+ GPIO_0021_ID,\r
+ GPIO_0022_ID,\r
+ GPIO_0023_ID,\r
+ GPIO_0024_ID,\r
+ GPIO_0025_ID,\r
+ GPIO_0026_ID,\r
+ GPIO_0027_ID,\r
+ //\r
+ GPIO_0030_ID, // 18h\r
+ GPIO_0031_ID,\r
+ GPIO_0032_ID,\r
+ GPIO_0033_ID,\r
+ GPIO_0034_ID,\r
+ GPIO_0035_ID,\r
+ GPIO_0036_ID,\r
+ GPIO_0037_ID, // End Port A\r
+ //\r
+ GPIO_0040_ID, // 20h: Begin Port B\r
+ GPIO_0041_ID,\r
+ GPIO_0042_ID,\r
+ GPIO_0043_ID,\r
+ GPIO_0044_ID,\r
+ GPIO_0045_ID,\r
+ GPIO_0046_ID,\r
+ GPIO_0047_ID,\r
+ //\r
+ GPIO_0050_ID, // 28h\r
+ GPIO_0051_ID,\r
+ GPIO_0052_ID,\r
+ GPIO_0053_ID,\r
+ GPIO_0054_ID,\r
+ GPIO_0055_ID,\r
+ GPIO_0056_ID,\r
+ GPIO_0057_ID,\r
+ //\r
+ GPIO_0060_ID, // 30h\r
+ GPIO_0061_ID,\r
+ GPIO_0062_ID,\r
+ GPIO_0063_ID,\r
+ GPIO_0064_ID,\r
+ GPIO_0065_ID,\r
+ GPIO_0066_ID,\r
+ GPIO_0067_ID,\r
+ //\r
+ GPIO_0070_ID, // 38h\r
+ GPIO_0071_ID,\r
+ GPIO_0072_ID,\r
+ GPIO_0073_ID,\r
+ GPIO_0074_ID,\r
+ GPIO_0075_ID,\r
+ GPIO_0076_ID,\r
+ GPIO_0077_ID, // End Port B\r
+ //\r
+ GPIO_0100_ID, // 40h: Begin Port C\r
+ GPIO_0101_ID,\r
+ GPIO_0102_ID,\r
+ GPIO_0103_ID,\r
+ GPIO_0104_ID,\r
+ GPIO_0105_ID,\r
+ GPIO_0106_ID,\r
+ GPIO_0107_ID,\r
+ //\r
+ GPIO_0110_ID, // 48h\r
+ GPIO_0111_ID,\r
+ GPIO_0112_ID,\r
+ GPIO_0113_ID,\r
+ GPIO_0114_ID,\r
+ GPIO_0115_ID,\r
+ GPIO_0116_ID,\r
+ GPIO_0117_ID,\r
+ //\r
+ GPIO_0120_ID, // 50h\r
+ GPIO_0121_ID,\r
+ GPIO_0122_ID,\r
+ GPIO_0123_ID,\r
+ GPIO_0124_ID,\r
+ GPIO_0125_ID,\r
+ GPIO_0126_ID,\r
+ GPIO_0127_ID,\r
+ //\r
+ GPIO_0130_ID, // 58h\r
+ GPIO_0131_ID,\r
+ GPIO_0132_ID,\r
+ GPIO_0133_ID,\r
+ GPIO_0134_ID,\r
+ GPIO_0135_ID,\r
+ GPIO_0136_ID,\r
+ GPIO_0137_ID, // End Port C\r
+ //\r
+ GPIO_0140_ID, // 60h: Begin Port D\r
+ GPIO_0141_ID,\r
+ GPIO_0142_ID,\r
+ GPIO_0143_ID,\r
+ GPIO_0144_ID,\r
+ GPIO_0145_ID,\r
+ GPIO_0146_ID,\r
+ GPIO_0147_ID,\r
+ //\r
+ GPIO_0150_ID, // 68h\r
+ GPIO_0151_ID,\r
+ GPIO_0152_ID,\r
+ GPIO_0153_ID,\r
+ GPIO_0154_ID,\r
+ GPIO_0155_ID,\r
+ GPIO_0156_ID,\r
+ GPIO_0157_ID,\r
+ //\r
+ GPIO_0160_ID, // 70h\r
+ GPIO_0161_ID,\r
+ GPIO_0162_ID,\r
+ GPIO_0163_ID,\r
+ GPIO_0164_ID,\r
+ GPIO_0165_ID,\r
+ GPIO_0166_ID,\r
+ GPIO_0167_ID,\r
+ //\r
+ MAX_GPIO_ID\r
+\r
+} GPIO_ID;\r
+\r
+\r
+enum gpio_prop_t\r
+{\r
+ GPIO_PROP_PU_PD,\r
+ GPIO_PROP_PWR_GATE,\r
+ GPIO_PROP_INT_DET,\r
+ GPIO_PROP_OBUFF_TYPE,\r
+ GPIO_PROP_DIR,\r
+ GPIO_PROP_ALT_OUT_EN,\r
+ GPIO_PROP_POLARITY,\r
+ GPIO_PROP_MUX_SEL,\r
+ GPIO_PROP_ALL,\r
+ GPIO_PROP_MAX\r
+};\r
+\r
+\r
+enum gpio_pupd_t\r
+{\r
+ GPIO_PUPD_NONE,\r
+ GPIO_PULLUP_EN,\r
+ GPIO_PULLDN_EN,\r
+ GPIO_PUPD_NONE2\r
+};\r
+\r
+\r
+enum gpio_idetect_t\r
+{\r
+ GPIO_DET_LEVEL_LOW,\r
+ GPIO_DET_LEVEL_HIGH,\r
+ GPIO_DET_RSVD2,\r
+ GPIO_DET_RSVD3,\r
+ GPIO_DET_DISABLE,\r
+ GPIO_DET_RSVD5,\r
+ GPIO_DET_RSVD6,\r
+ GPIO_DET_RSVD7,\r
+ GPIO_DET_RSVD8,\r
+ GPIO_DET_RSVD9,\r
+ GPIO_DET_RSVDA,\r
+ GPIO_DET_RSVDB,\r
+ GPIO_DET_RSVDC,\r
+ GPIO_DET_RISING_EDGE,\r
+ GPIO_DET_FALLING_EDGE,\r
+ GPIO_DET_BOTH_EDGES\r
+};\r
+\r
+\r
+enum gpio_buff_type_t\r
+{\r
+ GPIO_OUT_BUFF_PUSH_PULL,\r
+ GPIO_OUT_BUFF_OPEN_DRAIN\r
+};\r
+\r
+\r
+enum gpio_dir_t\r
+{\r
+ GPIO_DIR_IN,\r
+ GPIO_DIR_OUT\r
+};\r
+\r
+\r
+enum gpio_polarity_t\r
+{\r
+ GPIO_NON_INVERT,\r
+ GPIO_INVERT\r
+};\r
+\r
+\r
+enum gpio_mux_t\r
+{\r
+ GPIO_FUNC_GPIO,\r
+ GPIO_FUNC_1,\r
+ GPIO_FUNC_2,\r
+ GPIO_FUNC_3\r
+};\r
+\r
+// Slew Rate & Drive Strength\r
+enum gpio_slew_rate_t\r
+{\r
+ GPIO_SLEW_SLOW,\r
+ GPIO_SLEW_FAST\r
+};\r
+\r
+enum gpio_drv_str_t\r
+{\r
+ GPIO_DRV_2MA = 0,\r
+ GPIO_DRV_4MA,\r
+ GPIO_DRV_8MA,\r
+ GPIO_DRV_12MA\r
+};\r
+\r
+\r
+\r
+\r
+uint16_t GPIOGetConfig(enum gpio_id_t gpio_id);\r
+void GPIOSetConfig(enum gpio_id_t gpio_id, uint16_t config);\r
+void GPIOConfigAndOr(enum gpio_id_t gpio_id, uint16_t and_mask, uint16_t or_mask);\r
+\r
+uint32_t GPIOGetControl(enum gpio_id_t gpio_id);\r
+\r
+void GPIOSetControl(enum gpio_id_t gpio_id, uint32_t ctrl_val);\r
+\r
+void GPIOControlAndOr(enum gpio_id_t gpio_id, uint32_t and_mask, uint32_t or_mask);\r
+\r
+void GPIOPropertySet ( enum gpio_id_t gpio_id,\r
+ enum gpio_prop_t gpio_prop,\r
+ uint16_t prop_val\r
+ );\r
+\r
+uint8_t GPIOGetSlewRate( enum gpio_id_t gpio_id );\r
+void GPIOSetSlewRate ( enum gpio_id_t gpio_id,\r
+ enum gpio_slew_rate_t slew_rate );\r
+uint8_t GPIOGetDriveStr ( enum gpio_id_t gpio_id );\r
+void GPIOSetDriveStr ( enum gpio_id_t gpio_id,\r
+ enum gpio_drv_str_t drv_str );\r
+uint8_t GPIOGetDriveStrAndSlew ( enum gpio_id_t gpio_id );\r
+void GPIOSetDriveStrAndSlew ( enum gpio_id_t gpio_id,\r
+ uint8_t drv_and_slew );\r
+\r
+void GPIOSetOutput ( enum gpio_id_t gpio_id,\r
+ uint8_t gpio_state\r
+ );\r
+\r
+void GPIOToggleOutput ( enum gpio_id_t gpio_id );\r
+\r
+uint8_t GPIOReadPin( enum gpio_id_t gpio_id );\r
+\r
+void GPIOPinLock(enum gpio_id_t gpio_id);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif // #ifndef _MEC14XX_GPIO_H\r
+/* end mec14XX_gpio.h */\r
+/** @}\r
+ */\r
+\r
+\r
+\r
+\r
+\r