Skip to content
Snippets Groups Projects
Unverified Commit 272ae30d authored by Hauke Petersen's avatar Hauke Petersen Committed by GitHub
Browse files

Merge pull request #10005 from haukepetersen/fix_gpioirq_nrf

cpu/nrf5x/gpio: use periph_gpio_irq feature
parents 4ca6cd70 22674998
No related branches found
No related tags found
No related merge requests found
...@@ -34,10 +34,12 @@ ...@@ -34,10 +34,12 @@
#define PORT_BIT (1 << 5) #define PORT_BIT (1 << 5)
#define PIN_MASK (0x1f) #define PIN_MASK (0x1f)
#ifdef MODULE_PERIPH_GPIO_IRQ
/** /**
* @brief Place to store the interrupt context * @brief Place to store the interrupt context
*/ */
static gpio_isr_ctx_t exti_chan; static gpio_isr_ctx_t exti_chan;
#endif
/** /**
* @brief Get the port's base address * @brief Get the port's base address
...@@ -72,6 +74,41 @@ int gpio_init(gpio_t pin, gpio_mode_t mode) ...@@ -72,6 +74,41 @@ int gpio_init(gpio_t pin, gpio_mode_t mode)
return 0; return 0;
} }
int gpio_read(gpio_t pin)
{
if (port(pin)->DIR & (1 << pin)) {
return (port(pin)->OUT & (1 << pin)) ? 1 : 0;
}
else {
return (port(pin)->IN & (1 << pin)) ? 1 : 0;
}
}
void gpio_set(gpio_t pin)
{
port(pin)->OUTSET = (1 << pin);
}
void gpio_clear(gpio_t pin)
{
port(pin)->OUTCLR = (1 << pin);
}
void gpio_toggle(gpio_t pin)
{
port(pin)->OUT ^= (1 << pin);
}
void gpio_write(gpio_t pin, int value)
{
if (value) {
port(pin)->OUTSET = (1 << pin);
} else {
port(pin)->OUTCLR = (1 << pin);
}
}
#ifdef MODULE_PERIPH_GPIO_IRQ
int gpio_init_int(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank, int gpio_init_int(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank,
gpio_cb_t cb, void *arg) gpio_cb_t cb, void *arg)
{ {
...@@ -108,40 +145,6 @@ void gpio_irq_disable(gpio_t pin) ...@@ -108,40 +145,6 @@ void gpio_irq_disable(gpio_t pin)
NRF_GPIOTE->INTENCLR |= GPIOTE_INTENSET_IN0_Msk; NRF_GPIOTE->INTENCLR |= GPIOTE_INTENSET_IN0_Msk;
} }
int gpio_read(gpio_t pin)
{
if (port(pin)->DIR & (1 << pin)) {
return (port(pin)->OUT & (1 << pin)) ? 1 : 0;
}
else {
return (port(pin)->IN & (1 << pin)) ? 1 : 0;
}
}
void gpio_set(gpio_t pin)
{
port(pin)->OUTSET = (1 << pin);
}
void gpio_clear(gpio_t pin)
{
port(pin)->OUTCLR = (1 << pin);
}
void gpio_toggle(gpio_t pin)
{
port(pin)->OUT ^= (1 << pin);
}
void gpio_write(gpio_t pin, int value)
{
if (value) {
port(pin)->OUTSET = (1 << pin);
} else {
port(pin)->OUTCLR = (1 << pin);
}
}
void isr_gpiote(void) void isr_gpiote(void)
{ {
if (NRF_GPIOTE->EVENTS_IN[0] == 1) { if (NRF_GPIOTE->EVENTS_IN[0] == 1) {
...@@ -150,3 +153,4 @@ void isr_gpiote(void) ...@@ -150,3 +153,4 @@ void isr_gpiote(void)
} }
cortexm_isr_end(); cortexm_isr_end();
} }
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment