|
- /*!
- * \file gpio.h
- *
- * \brief GPIO driver implementation
- *
- * \remark: Relies on the specific board GPIO implementation as well as on
- * IO expander driver implementation if one is available on the target
- * board.
- *
- * \copyright Revised BSD License, see section \ref LICENSE.
- *
- * \code
- * ______ _
- * / _____) _ | |
- * ( (____ _____ ____ _| |_ _____ ____| |__
- * \____ \| ___ | (_ _) ___ |/ ___) _ \
- * _____) ) ____| | | || |_| ____( (___| | | |
- * (______/|_____)_|_|_| \__)_____)\____)_| |_|
- * (C)2013-2017 Semtech
- *
- * \endcode
- *
- * \author Miguel Luis ( Semtech )
- *
- * \author Gregory Cristian ( Semtech )
- */
- #ifndef __GPIO_H__
- #define __GPIO_H__
-
- #ifdef __cplusplus
- extern "C"
- {
- #endif
-
- #include <stdint.h>
- #include "pinName-board.h"
- #include "pinName-ioe.h"
-
- /*!
- * Board GPIO pin names
- */
- typedef enum
- {
- MCU_PINS,
- IOE_PINS,
-
- // Not connected
- NC = (int)0xFFFFFFFF
- }PinNames;
-
- /*!
- * Operation Mode for the GPIO
- */
- typedef enum
- {
- PIN_INPUT = 0,
- PIN_OUTPUT,
- PIN_ALTERNATE_FCT,
- PIN_ANALOGIC
- }PinModes;
-
- /*!
- * Add a pull-up, a pull-down or nothing on the GPIO line
- */
- typedef enum
- {
- PIN_NO_PULL = 0,
- PIN_PULL_UP,
- PIN_PULL_DOWN
- }PinTypes;
-
- /*!
- * Define the GPIO as Push-pull type or Open Drain
- */
- typedef enum
- {
- PIN_PUSH_PULL = 0,
- PIN_OPEN_DRAIN
- }PinConfigs;
-
- /*!
- * Define the GPIO IRQ on a rising, falling or both edges
- */
- typedef enum
- {
- NO_IRQ = 0,
- IRQ_RISING_EDGE,
- IRQ_FALLING_EDGE,
- IRQ_RISING_FALLING_EDGE
- }IrqModes;
-
- /*!
- * Define the IRQ priority on the GPIO
- */
- typedef enum
- {
- IRQ_VERY_LOW_PRIORITY = 0,
- IRQ_LOW_PRIORITY,
- IRQ_MEDIUM_PRIORITY,
- IRQ_HIGH_PRIORITY,
- IRQ_VERY_HIGH_PRIORITY
- }IrqPriorities;
-
- /*!
- * GPIO IRQ handler function prototype
- */
- typedef void( GpioIrqHandler )( void* context );
-
- /*!
- * Structure for the GPIO
- */
- typedef struct
- {
- PinNames pin;
- uint16_t pinIndex;
- void *port;
- uint16_t portIndex;
- PinTypes pull;
- void* Context;
- GpioIrqHandler* IrqHandler;
- }Gpio_t;
-
- /*!
- * \brief Initializes the given GPIO object
- *
- * \param [IN] obj Pointer to the GPIO object
- * \param [IN] pin Pin name ( please look in pinName-board.h file )
- * \param [IN] mode Pin mode [PIN_INPUT, PIN_OUTPUT,
- * PIN_ALTERNATE_FCT, PIN_ANALOGIC]
- * \param [IN] config Pin config [PIN_PUSH_PULL, PIN_OPEN_DRAIN]
- * \param [IN] type Pin type [PIN_NO_PULL, PIN_PULL_UP, PIN_PULL_DOWN]
- * \param [IN] value Default output value at initialization
- */
- void GpioInit( Gpio_t *obj, PinNames pin, PinModes mode, PinConfigs config, PinTypes type, uint32_t value );
-
- /*!
- * \brief Sets a user defined object pointer
- *
- * \param [IN] context User defined data object pointer to pass back
- * on IRQ handler callback
- */
- void GpioSetContext( Gpio_t *obj, void* context );
-
- /*!
- * \brief GPIO IRQ Initialization
- *
- * \param [IN] obj Pointer to the GPIO object
- * \param [IN] irqMode IRQ mode [NO_IRQ, IRQ_RISING_EDGE,
- * IRQ_FALLING_EDGE, IRQ_RISING_FALLING_EDGE]
- * \param [IN] irqPriority IRQ priority [IRQ_VERY_LOW_PRIORITY, IRQ_LOW_PRIORITY
- * IRQ_MEDIUM_PRIORITY, IRQ_HIGH_PRIORITY
- * IRQ_VERY_HIGH_PRIORITY]
- * \param [IN] irqHandler Callback function pointer
- */
- void GpioSetInterrupt( Gpio_t *obj, IrqModes irqMode, IrqPriorities irqPriority, GpioIrqHandler *irqHandler );
-
- /*!
- * \brief Removes the interrupt from the object
- *
- * \param [IN] obj Pointer to the GPIO object
- */
- void GpioRemoveInterrupt( Gpio_t *obj );
-
- /*!
- * \brief Writes the given value to the GPIO output
- *
- * \param [IN] obj Pointer to the GPIO object
- * \param [IN] value New GPIO output value
- */
- void GpioWrite( Gpio_t *obj, uint32_t value );
-
- /*!
- * \brief Toggle the value to the GPIO output
- *
- * \param [IN] obj Pointer to the GPIO object
- */
- void GpioToggle( Gpio_t *obj );
-
- /*!
- * \brief Reads the current GPIO input value
- *
- * \param [IN] obj Pointer to the GPIO object
- * \retval value Current GPIO input value
- */
- uint32_t GpioRead( Gpio_t *obj );
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif // __GPIO_H__
|