uint32_t nrf_drv_ppi_channel_include_in_group(nrf_ppi_channel_t channel, nrf_ppi_channel_group_t group) { uint32_t err_code; #if (NRF_PPI_RESTRICTED > 0) uint32_t ch_mask; #endif if (!is_app_group(group)) { err_code = NRF_ERROR_INVALID_PARAM; } else if (!is_allocated_group(group)) { err_code = NRF_ERROR_INVALID_STATE; } else if (!is_app_channel(channel)) { err_code = NRF_ERROR_INVALID_PARAM; } else { #if (NRF_PPI_RESTRICTED > 0) CRITICAL_REGION_ENTER(); err_code = sd_ppi_group_get((uint8_t) group, &ch_mask); if (err_code != NRF_SUCCESS) { err_code = NRF_ERROR_INVALID_PARAM; } else { ch_mask |= channel_to_mask(channel); err_code = sd_ppi_group_assign((uint8_t) group, ch_mask); if (err_code != NRF_SUCCESS) { err_code = NRF_ERROR_INVALID_PARAM; } } CRITICAL_REGION_EXIT(); #else CRITICAL_REGION_ENTER(); nrf_ppi_channel_include_in_group(channel, group); CRITICAL_REGION_EXIT(); err_code = NRF_SUCCESS; #endif } return err_code; }
uint32_t nrf_drv_ppi_channels_remove_from_group(uint32_t channel_mask, nrf_ppi_channel_group_t group) { uint32_t err_code; if (!is_app_group(group)) { err_code = NRF_ERROR_INVALID_PARAM; } else if (!is_allocated_group(group)) { err_code = NRF_ERROR_INVALID_STATE; } else if (!are_app_channels(channel_mask)) { err_code = NRF_ERROR_INVALID_PARAM; } else { #if (NRF_PPI_RESTRICTED > 0) uint32_t channels_in_group = 0; CRITICAL_REGION_ENTER(); err_code = sd_ppi_group_get((uint8_t) group, &channels_in_group); if (err_code != NRF_SUCCESS) { err_code = NRF_ERROR_INVALID_PARAM; } else { channels_in_group &= ~channel_mask; err_code = sd_ppi_group_assign((uint8_t) group, channels_in_group); if (err_code != NRF_SUCCESS) { err_code = NRF_ERROR_INVALID_PARAM; } } CRITICAL_REGION_EXIT(); #else CRITICAL_REGION_ENTER(); nrf_ppi_channels_remove_from_group(channel_mask, group); CRITICAL_REGION_EXIT(); err_code = NRF_SUCCESS; #endif } return err_code; }