| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /*
- * Copyright 2020 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #ifndef DRIVER_GPIO_H_
- #define DRIVER_GPIO_H_
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #include "Driver_Common.h"
- #define ARM_GPIO_API_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(1,0) /* API version */
- /*----- GPIO Logic Value -----*/
- #define ARM_GPIO_LOGIC_ZERO 0
- #define ARM_GPIO_LOGIC_ONE 1
- /*----- GPIO Interrupt Type -----*/
- #define ARM_GPIO_INTERRUPT_NONE 0x00U /* Disable Interrupt */
- #define ARM_GPIO_INTERRUPT_RISING_EDGE 0x01U /* Interrupt on Rising Edge */
- #define ARM_GPIO_INTERRUPT_FALLING_EDGE 0x02U /* Interrupt on Falling Edge */
- #define ARM_GPIO_INTERRUPT_RISING_FALLING_EDGE 0x03U /* Interrupt on Rising or Falling edge */
- #define ARM_GPIO_INTERRUPT_LOGIC_ONE 0x04U /* Interrupt on Logic Level One */
- #define ARM_GPIO_INTERRUPT_LOGIC_ZERO 0x05U /* Interrupt on Logic Level Zero */
- #define ARM_GPIO_INTERRUPT_MAX_CONFIG_PARA 0x06U /* Internal use and not used by user */
- /*----- GPIO Control Codes: Interrupt -----*/
- #define ARM_GPIO_CONTROL_INTERRUPT (0x01U)
- #define ARM_GPIO_INTERRUPT_DISABLE (0x00U)
- #define ARM_GPIO_INTERRUPT_ENABLE (0x01U)
- typedef void (*ARM_GPIO_SignalEvent_t) (uint32_t pin); ///< Pointer to \ref ARM_GPIO_SignalEvent : Signal GPIO Event.
- /**
- \brief GPIO Driver Capabilities.
- */
- typedef struct _ARM_GPIO_CAPABILITIES {
- uint32_t irq : 1; ///< supports IRQ
- uint32_t reserved : 31; ///< Reserved (must be zero)
- } ARM_GPIO_CAPABILITIES;
- /**
- \brief Access structure of the GPIO Driver.
- */
- typedef struct _ARM_DRIVER_GPIO {
- ARM_DRIVER_VERSION (*GetVersion) (void);
- ARM_GPIO_CAPABILITIES (*GetCapabilities)(void);
- int32_t (*Initialize) (void);
- int32_t (*Uninitialize) (void);
- int32_t (*PowerControl) (ARM_POWER_STATE state);
- /// Init Pin As Output
- int32_t (*InitPinAsOutput)(uint32_t pin, uint32_t output_logic);
- /// Init Pin as Input with or without interrupt enabled , with or without callback if interrupt is requested
- int32_t (*InitPinAsInput)(uint32_t pin, uint32_t irq_type, ARM_GPIO_SignalEvent_t cb_event);
- /// Write pin with ARM_GPIO_LOGIC_[ONE|ZERO]
- int32_t (*PinWrite) (uint32_t pin, uint32_t logic_value);
- /// Toggle specified Pin
- int32_t (*PinToggle) (uint32_t pin);
- /// Read Logic value from pin. false stands for logic zero, true stands for logic one.
- bool (*PinRead) (uint32_t pin);
- /// Write selected pins with logic one or zero. Example, pin0 and pin 4, ored_pins = (0x01U << 0U) | (0x01 << 4U)
- int32_t (*PortWrite) (uint32_t ored_pins, uint32_t logic_value);
- /// Toggle selected pins. Example, pin0 and pin 4, ored_pins = (0x01U << 0U) | (0x01 << 4U)
- int32_t (*PortToggle) (uint32_t ored_pins);
- /// Read all pins status for this GPIO interface. use (read_value & (0x01U << 4)) to decide whether pin4 is logic one or logic zero
- uint32_t (*PortRead)(void);
- /// Configuare the pin with field ARM_GPIO_CONTROL_[INTERRUPT] with value filled into arg. values are defined following the ARM_GPIO_CONTROL_XXX.
- int32_t (*Control)(uint32_t pin, uint32_t control, uint32_t arg);
- } const ARM_DRIVER_GPIO;
- #ifdef __cplusplus
- }
- #endif
- #endif /* DRIVER_GPIO_H_ */
|