55#include "gpiointerrupt.h"
63#define GPIO_HAL_CACHE_SIZE 32
65static gpio_hal_cache_t gpio_hal_cache[GPIO_HAL_CACHE_SIZE] = { 0 };
68gpio_hal_arch_callback(uint8_t interrupt_no,
void *ctx)
71 gpio_hal_event_handler(gpio_hal_cache[interrupt_no].port,
72 1 << gpio_hal_cache[interrupt_no].pin);
79#if defined(_GPIO_EXTIPINSELL_MASK)
81 uint32_t intGroupStart = (pin & 0xFFC);
83 for(uint8_t i = 0; i < 4; i++) {
84 intToCheck = intGroupStart + ((pin + i) & 0x3);
85 if(gpio_hal_cache[i].port == port &&
86 gpio_hal_cache[i].pin == pin) {
87 return (uint8_t)intToCheck;
91 if(gpioCallbacks[pin].callback == 0) {
95 return INTERRUPT_UNAVAILABLE;
101 CMU_ClockEnable(cmuClock_GPIO,
true);
110 unsigned int interrupt;
111 GPIO_Mode_TypeDef def;
112 def = GPIO_PinModeGet(port, pin);
114 GPIO_PinModeSet(port, pin, def, (cfg & GPIO_HAL_PIN_CFG_PULL_UP) ? 1 : 0);
116 interrupt = GPIOINT_CallbackRegisterExt(pin,
117 (GPIOINT_IrqCallbackPtrExt_t)gpio_hal_arch_callback,
119 gpio_hal_cache[interrupt].port = port;
120 gpio_hal_cache[interrupt].pin = pin;
121 gpio_hal_cache[interrupt].cfg = cfg;
122 GPIO_ExtIntConfig(port, pin, interrupt,
123 (cfg & GPIO_HAL_PIN_CFG_EDGE_RISING) != 0,
124 (cfg & GPIO_HAL_PIN_CFG_EDGE_FALLING) != 0,
125 (cfg & GPIO_HAL_PIN_CFG_INT_ENABLE) != 0);
133 index = gpio_hal_arch_cache_lookup(port, pin);
134 if(index != INTERRUPT_UNAVAILABLE) {
135 return gpio_hal_cache[index].cfg;
146 index = gpio_hal_arch_cache_lookup(port, pin);
147 if(index != INTERRUPT_UNAVAILABLE) {
148 GPIO_IntEnable(index);
157 index = gpio_hal_arch_cache_lookup(port, pin);
158 if(index != INTERRUPT_UNAVAILABLE) {
159 GPIO_IntDisable(index);
168 val = GPIO_PortOutGet(port);
170 GPIO_PortOutSet(port, val);
Header file for the GPIO HAL.
void gpio_hal_arch_port_interrupt_enable(gpio_hal_port_t port, gpio_hal_pin_t pin)
Enable interrupts for a gpio pin.
gpio_hal_pin_cfg_t gpio_hal_arch_port_pin_cfg_get(gpio_hal_port_t port, gpio_hal_pin_t pin)
Read the configuration of a GPIO pin.
void gpio_hal_arch_port_set_pins(gpio_hal_port_t port, gpio_hal_pin_mask_t pins)
Set multiple pins to logical high.
void gpio_hal_arch_port_interrupt_disable(gpio_hal_port_t port, gpio_hal_pin_t pin)
Disable interrupts for a gpio pin.
void gpio_hal_arch_init(void)
Perform architecture specific gpio initaliaztion.
void gpio_hal_arch_port_pin_cfg_set(gpio_hal_port_t port, gpio_hal_pin_t pin, gpio_hal_pin_cfg_t cfg)
Configure a gpio pin.
uint32_t gpio_hal_pin_mask_t
GPIO pin mask representation.
uint32_t gpio_hal_pin_cfg_t
GPIO pin configuration.
uint8_t gpio_hal_port_t
A data structure that represents ports.
uint8_t gpio_hal_pin_t
GPIO pin number representation.