]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/include/MEC14xx/mec14xx_gpio.h
Add PIC32MEC14xx port and demo application.
[freertos] / FreeRTOS / Demo / PIC32MEC14xx_MPLAB / src / include / MEC14xx / mec14xx_gpio.h
diff --git a/FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/include/MEC14xx/mec14xx_gpio.h b/FreeRTOS/Demo/PIC32MEC14xx_MPLAB/src/include/MEC14xx/mec14xx_gpio.h
new file mode 100644 (file)
index 0000000..ebd24db
--- /dev/null
@@ -0,0 +1,446 @@
+/*****************************************************************************\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