This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP432P401R I/O口引脚类型是推挽、开漏还是上下拉

我们客户使用MSP432P401R,目前对于芯片内部的I/O口引脚类型存在疑问,希望解答一下I/O引脚是推挽、开漏还是单纯的上下拉输入输出。

这个主要是影响到客户外围电路设计。因为如果MCU的I/O口是推挽输出,客户外部电路加入需要一个不同电压等级的功能,引脚会被强制限制在3.3V或0V,如果是开漏输出,客户通过外部上下拉电阻可能会获取一个更高范围的电压。客户希望能解答一下MCU内部,I/O口的输出电路具体实现方案。

希望获取您的帮助。

Kevin Chen

  • 您可以看一下

    www.ti.com/.../msp432p401r.pdf



    6.12.6 Port P2 (P2.4 to P2.7) Input/Output With Schmitt Trigger
  • IO口的特性是可配置的。根据需要可以配置,可配置的选项参考手册中GPIO章节内容。

  • 看了看数据手册,这个msp432的输出,好像真没推挽、开漏的说法,只有上拉、下拉。
  • 不具备推挽开漏,只有配置输入输出,以及配置上拉下拉功能,IO功能基本上跟430的类似。

    这个确认可以参考头文件。

    /*
     * -------------------------------------------
     *    MSP432 DriverLib - v3_21_00_05 
     * -------------------------------------------
     *
     * --COPYRIGHT--,BSD,BSD
     * Copyright (c) 2016, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     * --/COPYRIGHT--*/
    #ifndef __GPIO_H__
    #define __GPIO_H__
    
    //*****************************************************************************
    //
    //! \addtogroup gpio_api
    //! @{
    //
    //*****************************************************************************
    
    //*****************************************************************************
    //
    // If building with a C++ compiler, make all of the definitions in this header
    // have a C binding.
    //
    //*****************************************************************************
    #ifdef __cplusplus
    extern "C"
    {
    #endif
    
    #include <msp.h>
    #include <stdint.h>
    
    #define GPIO_PORT_P1                                                          1
    #define GPIO_PORT_P2                                                          2
    #define GPIO_PORT_P3                                                          3
    #define GPIO_PORT_P4                                                          4
    #define GPIO_PORT_P5                                                          5
    #define GPIO_PORT_P6                                                          6
    #define GPIO_PORT_P7                                                          7
    #define GPIO_PORT_P8                                                          8
    #define GPIO_PORT_P9                                                          9
    #define GPIO_PORT_P10                                                         10
    #define GPIO_PORT_PA                                                           1
    #define GPIO_PORT_PB                                                           3
    #define GPIO_PORT_PC                                                           5
    #define GPIO_PORT_PD                                                           7
    #define GPIO_PORT_PE                                                           9
    #define GPIO_PORT_PJ                                                          11
    
     
    #define GPIO_PIN0                                                      (0x0001)
    #define GPIO_PIN1                                                      (0x0002)
    #define GPIO_PIN2                                                      (0x0004)
    #define GPIO_PIN3                                                      (0x0008)
    #define GPIO_PIN4                                                      (0x0010)
    #define GPIO_PIN5                                                      (0x0020)
    #define GPIO_PIN6                                                      (0x0040)
    #define GPIO_PIN7                                                      (0x0080)
    #define GPIO_PIN8                                                      (0x0100)
    #define GPIO_PIN9                                                      (0x0200)
    #define GPIO_PIN10                                                     (0x0400)
    #define GPIO_PIN11                                                     (0x0800)
    #define GPIO_PIN12                                                     (0x1000)
    #define GPIO_PIN13                                                     (0x2000)
    #define GPIO_PIN14                                                     (0x4000)
    #define GPIO_PIN15                                                     (0x8000)
    #define PIN_ALL8                                                       (0xFF)
    #define PIN_ALL16                                                      (0xFFFF)
    
    #define GPIO_PRIMARY_MODULE_FUNCTION                                     (0x01)
    #define GPIO_SECONDARY_MODULE_FUNCTION                                   (0x02)
    #define GPIO_TERTIARY_MODULE_FUNCTION                                     (0x03)
    
    #define GPIO_HIGH_TO_LOW_TRANSITION                                      (0x01)
    #define GPIO_LOW_TO_HIGH_TRANSITION                                      (0x00)
    
    #define GPIO_INPUT_PIN_HIGH                                              (0x01)
    #define GPIO_INPUT_PIN_LOW                                               (0x00)
    
    //*****************************************************************************
    //
    // Prototypes for the APIs.
    //
    //*****************************************************************************
    
    //*****************************************************************************
    //
    //! \brief This function configures the selected Pin as output pin
    //!
    //! This function selected pins on a selected port as output pins.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! Modified bits of \b PxDIR register and bits of \b PxSEL register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setAsOutputPin(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function configures the selected Pin as input pin
    //!
    //! This function selected pins on a selected port as input pins.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! Modified bits of \b PxDIR register, bits of \b PxREN register and bits of
    //! \b PxSEL register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setAsInputPin(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function configures the peripheral module function in the
    //! output direction for the selected pin for either primary, secondary or
    //! ternary module function modes
    //!
    //! This function configures the peripheral module function in the output
    //! direction for the selected pin for either primary, secondary or ternary
    //! module function modes. Accepted values for mode are
    //! GPIO_PRIMARY_MODULE_FUNCTION, GPIO_SECONDARY_MODULE_FUNCTION, and
    //! GPIO_TERTIARY_MODULE_FUNCTION
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //! \param mode is the specified mode that the pin should be configured for the
    //!        module function.
    //!        Valid values are:
    //!        - \b GPIO_PRIMARY_MODULE_FUNCTION
    //!        - \b GPIO_SECONDARY_MODULE_FUNCTION
    //!        - \b GPIO_TERTIARY_MODULE_FUNCTION
    //!
    //! Modified bits of \b PxDIR register and bits of \b PxSEL register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setAsPeripheralModuleFunctionOutputPin(
            uint_fast8_t selectedPort, uint_fast16_t selectedPins,
            uint_fast8_t mode);
    
    //*****************************************************************************
    //
    //! \brief This function configures the peripheral module function in the input
    //! direction for the selected pin for either primary, secondary or ternary
    //! module function modes.
    //!
    //! This function configures the peripheral module function in the input
    //! direction for the selected pin for either primary, secondary or ternary
    //! module function modes. Accepted values for mode are
    //! GPIO_PRIMARY_MODULE_FUNCTION, GPIO_SECONDARY_MODULE_FUNCTION, and
    //! GPIO_TERTIARY_MODULE_FUNCTION
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //! \param mode is the specified mode that the pin should be configured for the
    //!        module function.
    //!        Valid values are:
    //!        - \b GPIO_PRIMARY_MODULE_FUNCTION
    //!        - \b GPIO_SECONDARY_MODULE_FUNCTION
    //!        - \b GPIO_TERTIARY_MODULE_FUNCTION
    //!
    //! Modified bits of \b PxDIR register and bits of \b PxSEL register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setAsPeripheralModuleFunctionInputPin(
            uint_fast8_t selectedPort, uint_fast16_t selectedPins,
            uint_fast8_t mode);
    
    //*****************************************************************************
    //
    //! \brief This function sets output HIGH on the selected Pin
    //!
    //! This function sets output HIGH on the selected port's pin.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! Modified bits of \b PxOUT register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setOutputHighOnPin(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function sets output LOW on the selected Pin
    //!
    //! This function sets output LOW on the selected port's pin.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setOutputLowOnPin(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function toggles the output on the selected Pin
    //!
    //! This function toggles the output on the selected port's pin.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! Modified bits of \b PxOUT register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_toggleOutputOnPin(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function sets the selected Pin in input Mode with Pull Down
    //! resistor
    //!
    //! This function sets the selected Pin in input Mode with Pull Down resistor.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! Modified bits of \b PxDIR register, bits of \b PxOUT register and bits of
    //! \b PxREN register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setAsInputPinWithPullDownResistor(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function sets the selected Pin in input Mode with Pull Up
    //! resistor
    //!
    //! This function sets the selected Pin in input Mode with Pull Up resistor.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! Modified bits of \b PxDIR register, bits of \b PxOUT register and bits of
    //! \b PxREN register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setAsInputPinWithPullUpResistor(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function gets the input value on the selected pin
    //!
    //! This function gets the input value on the selected pin.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! \return One of the following:
    //!         - \b GPIO_INPUT_PIN_HIGH
    //!         - \b GPIO_INPUT_PIN_LOW
    //!         \n indicating the status of the pin
    //
    //*****************************************************************************
    extern uint8_t GPIO_getInputPinValue(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function enables the port interrupt on the selected pin
    //!
    //! This function enables the port interrupt on the selected pin. Note that
    //! only Port 1,2, A have this capability.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_PA
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! Modified bits of \b PxIE register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_enableInterrupt(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function disables the port interrupt on the selected pin
    //!
    //! This function disables the port interrupt on the selected pin. Note that
    //! only Port 1,2, A have this capability.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_PA
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! Modified bits of \b PxIE register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_disableInterrupt(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function gets the interrupt status of the selected pin
    //!
    //! This function gets the interrupt status of the selected pin. Note that only
    //! Port 1,2, A have this capability.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_PA
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! \return Logical OR of any of the following:
    //!         - \b GPIO_PIN0
    //!         - \b GPIO_PIN1
    //!         - \b GPIO_PIN2
    //!         - \b GPIO_PIN3
    //!         - \b GPIO_PIN4
    //!         - \b GPIO_PIN5
    //!         - \b GPIO_PIN6
    //!         - \b GPIO_PIN7
    //!         - \b GPIO_PIN8
    //!         - \b GPIO_PIN9
    //!         - \b GPIO_PIN10
    //!         - \b GPIO_PIN11
    //!         - \b GPIO_PIN12
    //!         - \b GPIO_PIN13
    //!         - \b GPIO_PIN14
    //!         - \b GPIO_PIN15
    //!         \n indicating the interrupt status of the selected pins [Default:
    //!         0]
    //
    //*****************************************************************************
    extern uint_fast16_t GPIO_getInterruptStatus(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function clears the interrupt flag on the selected pin
    //!
    //! This function clears the interrupt flag on the selected pin. Note that only
    //! Port 1,2,A have this capability.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_PA
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //!
    //! Modified bits of \b PxIFG register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_clearInterruptFlag(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins);
    
    //*****************************************************************************
    //
    //! \brief This function selects on what edge the port interrupt flag should be
    //! set for a transition
    //!
    //! This function selects on what edge the port interrupt flag should be set
    //! for a transition. Values for edgeSelect should be
    //! GPIO_LOW_TO_HIGH_TRANSITION or GPIO_HIGH_TO_LOW_TRANSITION.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!        Mask value is the logical OR of any of the following:
    //!        - \b GPIO_PIN0
    //!        - \b GPIO_PIN1
    //!        - \b GPIO_PIN2
    //!        - \b GPIO_PIN3
    //!        - \b GPIO_PIN4
    //!        - \b GPIO_PIN5
    //!        - \b GPIO_PIN6
    //!        - \b GPIO_PIN7
    //!        - \b GPIO_PIN8
    //!        - \b GPIO_PIN9
    //!        - \b GPIO_PIN10
    //!        - \b GPIO_PIN11
    //!        - \b GPIO_PIN12
    //!        - \b GPIO_PIN13
    //!        - \b GPIO_PIN14
    //!        - \b GPIO_PIN15
    //! \param edgeSelect specifies what transition sets the interrupt flag
    //!        Valid values are:
    //!        - \b GPIO_HIGH_TO_LOW_TRANSITION
    //!        - \b GPIO_LOW_TO_HIGH_TRANSITION
    //!
    //! Modified bits of \b PxIES register.
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_interruptEdgeSelect(uint_fast8_t selectedPort,
            uint_fast16_t selectedPins, uint_fast8_t edgeSelect);
    
    //*****************************************************************************
    //
    //! \brief This function gets the interrupt status of the provided PIN and
    //!         masks it with the interrupts that are actually enabled. This is
    //!         useful for inside ISRs where the status of only the enabled
    //!         interrupts needs to be checked.
    //!
    //! \param selectedPort is the selected port.
    //!        Valid values are:
    //!        - \b GPIO_PORT_P1
    //!        - \b GPIO_PORT_P2
    //!        - \b GPIO_PORT_P3
    //!        - \b GPIO_PORT_P4
    //!        - \b GPIO_PORT_P5
    //!        - \b GPIO_PORT_P6
    //!        - \b GPIO_PORT_P7
    //!        - \b GPIO_PORT_P8
    //!        - \b GPIO_PORT_P9
    //!        - \b GPIO_PORT_P10
    //!        - \b GPIO_PORT_P11
    //!        - \b GPIO_PORT_PJ
    //!
    //! \return Logical OR of any of the following:
    //!         - \b GPIO_PIN0
    //!         - \b GPIO_PIN1
    //!         - \b GPIO_PIN2
    //!         - \b GPIO_PIN3
    //!         - \b GPIO_PIN4
    //!         - \b GPIO_PIN5
    //!         - \b GPIO_PIN6
    //!         - \b GPIO_PIN7
    //!         - \b GPIO_PIN8
    //!         - \b GPIO_PIN9
    //!         - \b GPIO_PIN10
    //!         - \b GPIO_PIN11
    //!         - \b GPIO_PIN12
    //!         - \b GPIO_PIN13
    //!         - \b GPIO_PIN14
    //!         - \b GPIO_PIN15,
    //!         - \b PIN_ALL8,
    //!         - \b PIN_ALL16
    //!         \n indicating the interrupt status of the selected pins [Default:
    //!         0]
    //
    //*****************************************************************************
    extern uint_fast16_t GPIO_getEnabledInterruptStatus(uint_fast8_t selectedPort);
    
    
    //*****************************************************************************
    //
    //! Registers an interrupt handler for the port interrupt.
    //!
    //! \param selectedPort is the port to register the interrupt handler
    //!
    //! \param intHandler is a pointer to the function to be called when the port
    //! interrupt occurs.
    //!
    //! This function registers the handler to be called when a port
    //! interrupt occurs. This function enables the global interrupt in the
    //! interrupt controller; specific GPIO interrupts must be enabled
    //! via GPIO_enableInterrupt().  It is the interrupt handler's responsibility to
    //! clear the interrupt source via GPIO_clearInterruptFlag().
    //!
    //! Clock System can generate interrupts when
    //!
    //! \sa Interrupt_registerInterrupt() for important information about
    //! registering interrupt handlers.
    //!
    //! \return None.
    //
    //*****************************************************************************
    extern void GPIO_registerInterrupt(uint_fast8_t selectedPort,
            void (*intHandler)(void));
    
    //*****************************************************************************
    //
    //! Unregisters the interrupt handler for the port.
    //!
    //! \param selectedPort is the port to unregister the interrupt handler
    //!
    //! This function unregisters the handler to be called when a port
    //! interrupt occurs.  This function also masks off the interrupt in the
    //! interrupt controller so that the interrupt handler no longer is called.
    //!
    //! \sa Interrupt_registerInterrupt() for important information about
    //! registering interrupt handlers.
    //!
    //! \return None.
    //
    //*****************************************************************************
    extern void GPIO_unregisterInterrupt(uint_fast8_t selectedPort);
    
    //*****************************************************************************
    //
    //! This function sets the drive strength to high for the selected port
    //!
    //!
    //! \param selectedPort is the selected port.
    //!             Valid values are:
    //!             - \b GPIO_PORT_P1,
    //!             - \b GPIO_PORT_P2,
    //!             - \b GPIO_PORT_P3,
    //!             - \b GPIO_PORT_P4,
    //!             - \b GPIO_PORT_P5,
    //!             - \b GPIO_PORT_P6,
    //!             - \b GPIO_PORT_P7,
    //!             - \b GPIO_PORT_P8,
    //!             - \b GPIO_PORT_P9,
    //!             - \b GPIO_PORT_P10,
    //!             - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!             Valid values are:
    //!             - \b GPIO_PIN0,
    //!             - \b GPIO_PIN1,
    //!             - \b GPIO_PIN2,
    //!             - \b GPIO_PIN3,
    //!             - \b GPIO_PIN4,
    //!             - \b GPIO_PIN5,
    //!             - \b GPIO_PIN6,
    //!             - \b GPIO_PIN7,
    //!             - \b GPIO_PIN8,
    //!             - \b PIN_ALL8,
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setDriveStrengthHigh(uint_fast8_t selectedPort,
            uint_fast8_t selectedPins);
    
    //*****************************************************************************
    //
    //! This function sets the drive strength to low for the selected port
    //!
    //!
    //! \param selectedPort is the selected port.
    //!             Valid values are:
    //!             - \b GPIO_PORT_P1,
    //!             - \b GPIO_PORT_P2,
    //!             - \b GPIO_PORT_P3,
    //!             - \b GPIO_PORT_P4,
    //!             - \b GPIO_PORT_P5,
    //!             - \b GPIO_PORT_P6,
    //!             - \b GPIO_PORT_P7,
    //!             - \b GPIO_PORT_P8,
    //!             - \b GPIO_PORT_P9,
    //!             - \b GPIO_PORT_P10,
    //!             - \b GPIO_PORT_PJ
    //! \param selectedPins is the specified pin in the selected port.
    //!             Valid values are:
    //!             - \b GPIO_PIN0,
    //!             - \b GPIO_PIN1,
    //!             - \b GPIO_PIN2,
    //!             - \b GPIO_PIN3,
    //!             - \b GPIO_PIN4,
    //!             - \b GPIO_PIN5,
    //!             - \b GPIO_PIN6,
    //!             - \b GPIO_PIN7,
    //!             - \b GPIO_PIN8,
    //!             - \b PIN_ALL8,
    //!
    //! \return None
    //
    //*****************************************************************************
    extern void GPIO_setDriveStrengthLow(uint_fast8_t selectedPort,
            uint_fast8_t selectedPins);
            
    /* Backwards Compatibility Layer */
    #define  GPIO_selectInterruptEdge       GPIO_interruptEdgeSelect
    #define  GPIO_clearInterrupt            GPIO_clearInterruptFlag
      
    //*****************************************************************************
    //
    // Mark the end of the C bindings section for C++ compilers.
    //
    //*****************************************************************************
    #ifdef __cplusplus
    }
    #endif
    
    //*****************************************************************************
    //
    // Close the Doxygen group.
    //! @}
    //
    //*****************************************************************************
    
    #endif // __GPIO_H__