Слияние кода завершено, страница обновится автоматически
/*!
* \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__
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарий ( 0 )