blob: eac03895f0c1d13eca75c104f38b8e420e6fed4c [file] [log] [blame]
/*
* Copyright (c) 2020 - 2021 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "platform/nrf_802154_gpiote.h"
#include "hal/nrf_gpio.h"
#include "nrf_802154_sl_utils.h"
#include "platform/nrf_802154_irq.h"
static volatile bool m_gpiote_irq_enabled;
static volatile uint32_t m_gpiote_irq_disabled_cnt;
void nrf_802154_gpiote_critical_section_enter(void)
{
nrf_802154_sl_mcu_critical_state_t mcu_cs;
uint32_t cnt;
nrf_802154_sl_mcu_critical_enter(mcu_cs);
cnt = m_gpiote_irq_disabled_cnt;
if (cnt == 0U) {
m_gpiote_irq_enabled = nrf_802154_irq_is_enabled(GPIOTE_IRQn);
nrf_802154_irq_disable(GPIOTE_IRQn);
}
cnt++;
m_gpiote_irq_disabled_cnt = cnt;
nrf_802154_sl_mcu_critical_exit(mcu_cs);
}
void nrf_802154_gpiote_critical_section_exit(void)
{
nrf_802154_sl_mcu_critical_state_t mcu_cs;
uint32_t cnt;
nrf_802154_sl_mcu_critical_enter(mcu_cs);
cnt = m_gpiote_irq_disabled_cnt;
cnt--;
if (cnt == 0U) {
if (m_gpiote_irq_enabled) {
nrf_802154_irq_enable(GPIOTE_IRQn);
}
}
m_gpiote_irq_disabled_cnt = cnt;
nrf_802154_sl_mcu_critical_exit(mcu_cs);
}