From 32064276938abe0db2be5de1e70f2d36663d7ab9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aurora=20Sletnes=20Bj=C3=B8rlo?= Date: Mon, 14 Dec 2020 12:46:25 +0100 Subject: [PATCH 1/4] bluetooth: controller: radio: Use HAL API in radio_nrf5_ppi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rewrite to use subscribe and publish functions for the different peripherals. This will make it possible to test the controller in a simulator. Signed-off-by: Aurora Sletnes Bjørlo Signed-off-by: Vinayak Kariappa Chettimada --- .../nordic/hal/nrf5/radio/radio_nrf5_ppi.h | 286 ++++-------------- 1 file changed, 55 insertions(+), 231 deletions(-) diff --git a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h index 2fbd41701a8ac..e11d23130d2ed 100644 --- a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h +++ b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 - 2019 Nordic Semiconductor ASA + * Copyright (c) 2018 - 2020 Nordic Semiconductor ASA * Copyright (c) 2018 Ioannis Glaropoulos * * SPDX-License-Identifier: Apache-2.0 @@ -606,6 +606,11 @@ static inline void hal_radio_sw_switch_ppi_group_setup(void) #elif defined(CONFIG_SOC_NRF5340_CPUNET) #include +#include +#include +#include +#include +#include static inline void hal_radio_nrf_ppi_channels_enable(uint32_t mask) { @@ -625,49 +630,28 @@ static inline void hal_radio_nrf_ppi_channels_disable(uint32_t mask) #define HAL_RADIO_ENABLE_TX_ON_TICK_PPI HAL_RADIO_ENABLE_ON_TICK_PPI #define HAL_RADIO_ENABLE_RX_ON_TICK_PPI HAL_RADIO_ENABLE_ON_TICK_PPI -#define HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_EVT \ - EVENT_TIMER->PUBLISH_COMPARE[0] -#define HAL_RADIO_ENABLE_ON_TICK_PPI_EVT \ - (((HAL_RADIO_ENABLE_ON_TICK_PPI << TIMER_PUBLISH_COMPARE_CHIDX_Pos) \ - & TIMER_PUBLISH_COMPARE_CHIDX_Msk) | \ - ((TIMER_PUBLISH_COMPARE_EN_Enabled << TIMER_PUBLISH_COMPARE_EN_Pos) \ - & TIMER_PUBLISH_COMPARE_EN_Msk)) -#define HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_TASK_TX \ - NRF_RADIO->SUBSCRIBE_TXEN -#define HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_TASK_RX \ - NRF_RADIO->SUBSCRIBE_RXEN -#define HAL_RADIO_ENABLE_ON_TICK_PPI_TASK_TX_SET \ - (((HAL_RADIO_ENABLE_ON_TICK_PPI << RADIO_SUBSCRIBE_TXEN_CHIDX_Pos) \ - & RADIO_SUBSCRIBE_TXEN_CHIDX_Msk) | \ - ((RADIO_SUBSCRIBE_TXEN_EN_Enabled << \ - RADIO_SUBSCRIBE_TXEN_EN_Pos) \ - & RADIO_SUBSCRIBE_TXEN_EN_Msk)) -#define HAL_RADIO_ENABLE_ON_TICK_PPI_TASK_RX_SET \ - (((HAL_RADIO_ENABLE_ON_TICK_PPI << RADIO_SUBSCRIBE_RXEN_CHIDX_Pos) \ - & RADIO_SUBSCRIBE_RXEN_CHIDX_Msk) | \ - ((RADIO_SUBSCRIBE_RXEN_EN_Enabled << RADIO_SUBSCRIBE_RXEN_EN_Pos) \ - & RADIO_SUBSCRIBE_RXEN_EN_Msk)) - static inline void hal_radio_enable_on_tick_ppi_config_and_enable(uint8_t trx) { - HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_EVT = - HAL_RADIO_ENABLE_ON_TICK_PPI_EVT; + nrf_timer_publish_set(EVENT_TIMER, NRF_TIMER_EVENT_COMPARE0, + HAL_RADIO_ENABLE_ON_TICK_PPI); if (trx) { - HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_TASK_TX = - HAL_RADIO_ENABLE_ON_TICK_PPI_TASK_TX_SET; + nrf_radio_subscribe_set(NRF_RADIO, NRF_RADIO_TASK_TXEN, + HAL_RADIO_ENABLE_TX_ON_TICK_PPI); /* Address nRF5340 Engineering A Errata 16 */ if (IS_ENABLED(CONFIG_BT_CTLR_TIFS_HW)) { - HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_TASK_RX = 0; + nrf_radio_subscribe_clear(NRF_RADIO, + NRF_RADIO_TASK_RXEN); } } else { - HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_TASK_RX = - HAL_RADIO_ENABLE_ON_TICK_PPI_TASK_RX_SET; + nrf_radio_subscribe_set(NRF_RADIO, NRF_RADIO_TASK_RXEN, + HAL_RADIO_ENABLE_RX_ON_TICK_PPI); /* Address nRF5340 Engineering A Errata 16 */ if (IS_ENABLED(CONFIG_BT_CTLR_TIFS_HW)) { - HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_TASK_TX = 0; + nrf_radio_subscribe_clear(NRF_RADIO, + NRF_RADIO_TASK_TXEN); } } @@ -682,31 +666,12 @@ static inline void hal_radio_enable_on_tick_ppi_config_and_enable(uint8_t trx) */ #define HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI 3 -#define HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI_REGISTER_EVT \ - NRF_RADIO->PUBLISH_ADDRESS -#define HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI_EVT \ - (((HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI << \ - RADIO_PUBLISH_ADDRESS_CHIDX_Pos) \ - & RADIO_PUBLISH_ADDRESS_CHIDX_Msk) | \ - ((RADIO_PUBLISH_ADDRESS_EN_Enabled << RADIO_PUBLISH_ADDRESS_EN_Pos) \ - & RADIO_PUBLISH_ADDRESS_EN_Msk)) -#define HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI_REGISTER_TASK \ - EVENT_TIMER->SUBSCRIBE_CAPTURE[1] -#define HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI_TASK \ - (((HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI << \ - TIMER_SUBSCRIBE_CAPTURE_CHIDX_Pos) \ - & TIMER_SUBSCRIBE_CAPTURE_CHIDX_Msk) | \ - ((TIMER_SUBSCRIBE_CAPTURE_EN_Enabled << \ - TIMER_SUBSCRIBE_CAPTURE_EN_Pos) \ - & TIMER_SUBSCRIBE_CAPTURE_EN_Msk)) - static inline void hal_radio_recv_timeout_cancel_ppi_config(void) { - HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI_REGISTER_EVT = - HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI_EVT; - - HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI_REGISTER_TASK = - HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI_TASK; + nrf_radio_publish_set(NRF_RADIO, NRF_RADIO_EVENT_ADDRESS, + HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI); + nrf_timer_subscribe_set(EVENT_TIMER, NRF_TIMER_TASK_CAPTURE1, + HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI); } /******************************************************************************* @@ -716,31 +681,12 @@ static inline void hal_radio_recv_timeout_cancel_ppi_config(void) */ #define HAL_RADIO_DISABLE_ON_HCTO_PPI 4 -#define HAL_RADIO_DISABLE_ON_HCTO_PPI_REGISTER_EVT \ - EVENT_TIMER->PUBLISH_COMPARE[1] -#define HAL_RADIO_DISABLE_ON_HCTO_PPI_EVT \ - (((HAL_RADIO_DISABLE_ON_HCTO_PPI << \ - TIMER_PUBLISH_COMPARE_CHIDX_Pos) \ - & TIMER_PUBLISH_COMPARE_CHIDX_Msk) | \ - ((TIMER_PUBLISH_COMPARE_EN_Enabled << TIMER_PUBLISH_COMPARE_EN_Pos) \ - & TIMER_PUBLISH_COMPARE_EN_Msk)) -#define HAL_RADIO_DISABLE_ON_HCTO_PPI_REGISTER_TASK \ - NRF_RADIO->SUBSCRIBE_DISABLE -#define HAL_RADIO_DISABLE_ON_HCTO_PPI_TASK \ - (((HAL_RADIO_DISABLE_ON_HCTO_PPI << \ - RADIO_SUBSCRIBE_DISABLE_CHIDX_Pos) \ - & RADIO_SUBSCRIBE_DISABLE_CHIDX_Msk) | \ - ((RADIO_SUBSCRIBE_DISABLE_EN_Enabled << \ - RADIO_SUBSCRIBE_DISABLE_EN_Pos) \ - & RADIO_SUBSCRIBE_DISABLE_EN_Msk)) - static inline void hal_radio_disable_on_hcto_ppi_config(void) { - HAL_RADIO_DISABLE_ON_HCTO_PPI_REGISTER_EVT = - HAL_RADIO_DISABLE_ON_HCTO_PPI_EVT; - - HAL_RADIO_DISABLE_ON_HCTO_PPI_REGISTER_TASK = - HAL_RADIO_DISABLE_ON_HCTO_PPI_TASK; + nrf_timer_publish_set(EVENT_TIMER, NRF_TIMER_EVENT_COMPARE1, + HAL_RADIO_DISABLE_ON_HCTO_PPI); + nrf_radio_subscribe_set(NRF_RADIO, NRF_RADIO_TASK_DISABLE, + HAL_RADIO_DISABLE_ON_HCTO_PPI); } /******************************************************************************* @@ -750,30 +696,12 @@ static inline void hal_radio_disable_on_hcto_ppi_config(void) */ #define HAL_RADIO_END_TIME_CAPTURE_PPI 5 -#define HAL_RADIO_END_TIME_CAPTURE_PPI_REGISTER_EVT \ - (NRF_RADIO->PUBLISH_END) -#define HAL_RADIO_END_TIME_CAPTURE_PPI_EVT \ - (((HAL_RADIO_END_TIME_CAPTURE_PPI << RADIO_PUBLISH_END_CHIDX_Pos) \ - & RADIO_PUBLISH_END_CHIDX_Msk) | \ - ((RADIO_PUBLISH_END_EN_Enabled << RADIO_PUBLISH_END_EN_Pos) \ - & RADIO_PUBLISH_END_EN_Msk)) -#define HAL_RADIO_END_TIME_CAPTURE_PPI_REGISTER_TASK \ - (EVENT_TIMER->SUBSCRIBE_CAPTURE[2]) -#define HAL_RADIO_END_TIME_CAPTURE_PPI_TASK \ - (((HAL_RADIO_END_TIME_CAPTURE_PPI << \ - TIMER_SUBSCRIBE_CAPTURE_CHIDX_Pos) \ - & TIMER_SUBSCRIBE_CAPTURE_CHIDX_Msk) | \ - ((TIMER_SUBSCRIBE_CAPTURE_EN_Enabled << \ - TIMER_SUBSCRIBE_CAPTURE_EN_Pos) \ - & TIMER_SUBSCRIBE_CAPTURE_EN_Msk)) - static inline void hal_radio_end_time_capture_ppi_config(void) { - HAL_RADIO_END_TIME_CAPTURE_PPI_REGISTER_EVT = - HAL_RADIO_END_TIME_CAPTURE_PPI_EVT; - - HAL_RADIO_END_TIME_CAPTURE_PPI_REGISTER_TASK = - HAL_RADIO_END_TIME_CAPTURE_PPI_TASK; + nrf_radio_publish_set(NRF_RADIO, NRF_RADIO_EVENT_END, + HAL_RADIO_END_TIME_CAPTURE_PPI); + nrf_timer_subscribe_set(EVENT_TIMER, NRF_TIMER_TASK_CAPTURE2, + HAL_RADIO_END_TIME_CAPTURE_PPI); } /******************************************************************************* @@ -782,28 +710,12 @@ static inline void hal_radio_end_time_capture_ppi_config(void) */ #define HAL_EVENT_TIMER_START_PPI 1 -#define HAL_EVENT_TIMER_START_PPI_REGISTER_EVT \ - NRF_RTC0->PUBLISH_COMPARE[2] -#define HAL_EVENT_TIMER_START_PPI_EVT \ - (((HAL_EVENT_TIMER_START_PPI << RTC_PUBLISH_COMPARE_CHIDX_Pos) \ - & RTC_PUBLISH_COMPARE_CHIDX_Msk) | \ - ((RTC_PUBLISH_COMPARE_EN_Enabled << RTC_PUBLISH_COMPARE_EN_Pos) \ - & RTC_PUBLISH_COMPARE_EN_Msk)) -#define HAL_EVENT_TIMER_START_PPI_REGISTER_TASK \ - EVENT_TIMER->SUBSCRIBE_START -#define HAL_EVENT_TIMER_START_PPI_TASK \ - (((HAL_EVENT_TIMER_START_PPI << TIMER_SUBSCRIBE_START_CHIDX_Pos) \ - & TIMER_SUBSCRIBE_START_CHIDX_Msk) | \ - ((TIMER_SUBSCRIBE_START_EN_Enabled << TIMER_SUBSCRIBE_START_EN_Pos) \ - & TIMER_SUBSCRIBE_START_EN_Msk)) - static inline void hal_event_timer_start_ppi_config(void) { - HAL_EVENT_TIMER_START_PPI_REGISTER_EVT = - HAL_EVENT_TIMER_START_PPI_EVT; - - HAL_EVENT_TIMER_START_PPI_REGISTER_TASK = - HAL_EVENT_TIMER_START_PPI_TASK; + nrf_rtc_publish_set(NRF_RTC0, NRF_RTC_EVENT_COMPARE_2, + HAL_EVENT_TIMER_START_PPI); + nrf_timer_subscribe_set(EVENT_TIMER, NRF_TIMER_TASK_START, + HAL_EVENT_TIMER_START_PPI); } /******************************************************************************* @@ -813,31 +725,12 @@ static inline void hal_event_timer_start_ppi_config(void) */ #define HAL_RADIO_READY_TIME_CAPTURE_PPI 2 -#define HAL_RADIO_READY_TIME_CAPTURE_PPI_REGISTER_EVT \ - NRF_RADIO->PUBLISH_READY -#define HAL_RADIO_READY_TIME_CAPTURE_PPI_EVT \ - (((HAL_RADIO_READY_TIME_CAPTURE_PPI << \ - RADIO_PUBLISH_READY_CHIDX_Pos) \ - & RADIO_PUBLISH_READY_CHIDX_Msk) | \ - ((RADIO_PUBLISH_READY_EN_Enabled << RADIO_PUBLISH_READY_EN_Pos) \ - & RADIO_PUBLISH_READY_EN_Msk)) -#define HAL_RADIO_READY_TIME_CAPTURE_PPI_REGISTER_TASK \ - EVENT_TIMER->SUBSCRIBE_CAPTURE[0] -#define HAL_RADIO_READY_TIME_CAPTURE_PPI_TASK \ - (((HAL_RADIO_READY_TIME_CAPTURE_PPI << \ - TIMER_SUBSCRIBE_CAPTURE_CHIDX_Pos) \ - & TIMER_SUBSCRIBE_CAPTURE_CHIDX_Msk) | \ - ((TIMER_SUBSCRIBE_CAPTURE_EN_Enabled << \ - TIMER_SUBSCRIBE_CAPTURE_EN_Pos) \ - & TIMER_SUBSCRIBE_CAPTURE_EN_Msk)) - static inline void hal_radio_ready_time_capture_ppi_config(void) { - HAL_RADIO_READY_TIME_CAPTURE_PPI_REGISTER_EVT = - HAL_RADIO_READY_TIME_CAPTURE_PPI_EVT; - - HAL_RADIO_READY_TIME_CAPTURE_PPI_REGISTER_TASK = - HAL_RADIO_READY_TIME_CAPTURE_PPI_TASK; + nrf_radio_publish_set(NRF_RADIO, NRF_RADIO_EVENT_READY, + HAL_RADIO_READY_TIME_CAPTURE_PPI); + nrf_timer_subscribe_set(EVENT_TIMER, NRF_TIMER_TASK_CAPTURE0, + HAL_RADIO_READY_TIME_CAPTURE_PPI); } /******************************************************************************* @@ -849,28 +742,12 @@ static inline void hal_radio_ready_time_capture_ppi_config(void) */ #define HAL_TRIGGER_CRYPT_PPI HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI -#define HAL_TRIGGER_CRYPT_PPI_REGISTER_EVT \ - NRF_RADIO->PUBLISH_ADDRESS -#define HAL_TRIGGER_CRYPT_PPI_EVT \ - (((HAL_TRIGGER_CRYPT_PPI << RADIO_PUBLISH_ADDRESS_CHIDX_Pos) \ - & RADIO_PUBLISH_ADDRESS_CHIDX_Msk) | \ - ((RADIO_PUBLISH_ADDRESS_EN_Enabled << RADIO_PUBLISH_ADDRESS_EN_Pos) \ - & RADIO_PUBLISH_ADDRESS_EN_Msk)) -#define HAL_TRIGGER_CRYPT_PPI_REGISTER_TASK \ - NRF_CCM->SUBSCRIBE_CRYPT -#define HAL_TRIGGER_CRYPT_PPI_TASK \ - (((HAL_TRIGGER_CRYPT_PPI << CCM_SUBSCRIBE_CRYPT_CHIDX_Pos) \ - & CCM_SUBSCRIBE_CRYPT_CHIDX_Msk) | \ - ((CCM_SUBSCRIBE_CRYPT_EN_Enabled << CCM_SUBSCRIBE_CRYPT_EN_Pos) \ - & CCM_SUBSCRIBE_CRYPT_EN_Msk)) - static inline void hal_trigger_crypt_ppi_config(void) { - HAL_TRIGGER_CRYPT_PPI_REGISTER_EVT = - HAL_TRIGGER_CRYPT_PPI_EVT; - - HAL_TRIGGER_CRYPT_PPI_REGISTER_TASK = - HAL_TRIGGER_CRYPT_PPI_TASK; + nrf_radio_publish_set(NRF_RADIO, NRF_RADIO_EVENT_ADDRESS, + HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI); + nrf_ccm_subscribe_set(NRF_CCM, NRF_CCM_TASK_CRYPT, + HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI); } /******************************************************************************* @@ -879,28 +756,12 @@ static inline void hal_trigger_crypt_ppi_config(void) */ #define HAL_TRIGGER_AAR_PPI 6 -#define HAL_TRIGGER_AAR_PPI_REGISTER_EVT \ - NRF_RADIO->PUBLISH_BCMATCH -#define HAL_TRIGGER_AAR_PPI_EVT \ - (((HAL_TRIGGER_AAR_PPI << RADIO_PUBLISH_BCMATCH_CHIDX_Pos) \ - & RADIO_PUBLISH_BCMATCH_CHIDX_Msk) | \ - ((RADIO_PUBLISH_BCMATCH_EN_Enabled << RADIO_PUBLISH_BCMATCH_EN_Pos) \ - & RADIO_PUBLISH_BCMATCH_EN_Msk)) -#define HAL_TRIGGER_AAR_PPI_REGISTER_TASK \ - NRF_AAR->SUBSCRIBE_START -#define HAL_TRIGGER_AAR_PPI_TASK \ - (((HAL_TRIGGER_AAR_PPI << AAR_SUBSCRIBE_START_CHIDX_Pos) \ - & AAR_SUBSCRIBE_START_CHIDX_Msk) | \ - ((AAR_SUBSCRIBE_START_EN_Enabled << AAR_SUBSCRIBE_START_EN_Pos) \ - & AAR_SUBSCRIBE_START_EN_Msk)) - static inline void hal_trigger_aar_ppi_config(void) { - HAL_TRIGGER_AAR_PPI_REGISTER_EVT = - HAL_TRIGGER_AAR_PPI_EVT; - - HAL_TRIGGER_AAR_PPI_REGISTER_TASK = - HAL_TRIGGER_AAR_PPI_TASK; + nrf_radio_publish_set(NRF_RADIO, NRF_RADIO_EVENT_BCMATCH, + HAL_TRIGGER_AAR_PPI); + nrf_aar_subscribe_set(NRF_AAR, NRF_AAR_TASK_START, + HAL_TRIGGER_AAR_PPI); } /******************************************************************************* @@ -908,32 +769,12 @@ static inline void hal_trigger_aar_ppi_config(void) */ #define HAL_TRIGGER_RATEOVERRIDE_PPI 13 -#define HAL_TRIGGER_RATEOVERRIDE_PPI_REGISTER_EVT \ - NRF_RADIO->PUBLISH_RATEBOOST -#define HAL_TRIGGER_RATEOVERRIDE_PPI_EVT \ - (((HAL_TRIGGER_RATEOVERRIDE_PPI << \ - RADIO_PUBLISH_RATEBOOST_CHIDX_Pos) \ - & RADIO_PUBLISH_RATEBOOST_CHIDX_Msk) | \ - ((RADIO_PUBLISH_RATEBOOST_EN_Enabled << \ - RADIO_PUBLISH_RATEBOOST_EN_Pos) \ - & RADIO_PUBLISH_RATEBOOST_EN_Msk)) -#define HAL_TRIGGER_RATEOVERRIDE_PPI_REGISTER_TASK \ - NRF_CCM->SUBSCRIBE_RATEOVERRIDE -#define HAL_TRIGGER_RATEOVERRIDE_PPI_TASK \ - (((HAL_TRIGGER_RATEOVERRIDE_PPI << \ - CCM_SUBSCRIBE_RATEOVERRIDE_CHIDX_Pos) \ - & CCM_SUBSCRIBE_RATEOVERRIDE_CHIDX_Msk) | \ - ((CCM_SUBSCRIBE_RATEOVERRIDE_EN_Enabled << \ - CCM_SUBSCRIBE_RATEOVERRIDE_EN_Pos) \ - & CCM_SUBSCRIBE_RATEOVERRIDE_EN_Msk)) - static inline void hal_trigger_rateoverride_ppi_config(void) { - HAL_TRIGGER_RATEOVERRIDE_PPI_REGISTER_EVT = - HAL_TRIGGER_RATEOVERRIDE_PPI_EVT; - - HAL_TRIGGER_RATEOVERRIDE_PPI_REGISTER_TASK = - HAL_TRIGGER_RATEOVERRIDE_PPI_TASK; + nrf_radio_publish_set(NRF_RADIO, NRF_RADIO_EVENT_RATEBOOST, + HAL_TRIGGER_RATEOVERRIDE_PPI); + nrf_ccm_subscribe_set(NRF_CCM, NRF_CCM_TASK_RATEOVERRIDE, + HAL_TRIGGER_RATEOVERRIDE_PPI); } /******************************************************************************/ @@ -948,27 +789,12 @@ static inline void hal_trigger_rateoverride_ppi_config(void) */ #define HAL_SW_SWITCH_TIMER_CLEAR_PPI HAL_RADIO_END_TIME_CAPTURE_PPI -#define HAL_SW_SWITCH_TIMER_CLEAR_PPI_REGISTER_EVT \ - (NRF_RADIO->PUBLISH_END) -#define HAL_SW_SWITCH_TIMER_CLEAR_PPI_EVT \ - (((HAL_SW_SWITCH_TIMER_CLEAR_PPI << RADIO_PUBLISH_END_CHIDX_Pos) \ - & RADIO_PUBLISH_END_CHIDX_Msk) | \ - ((RADIO_PUBLISH_END_EN_Enabled << RADIO_PUBLISH_END_EN_Pos) \ - & RADIO_PUBLISH_END_EN_Msk)) -#define HAL_SW_SWITCH_TIMER_CLEAR_PPI_REGISTER_TASK \ - (SW_SWITCH_TIMER->SUBSCRIBE_CLEAR) -#define HAL_SW_SWITCH_TIMER_CLEAR_PPI_TASK \ - (((HAL_SW_SWITCH_TIMER_CLEAR_PPI << TIMER_SUBSCRIBE_CLEAR_CHIDX_Pos) \ - & TIMER_SUBSCRIBE_CLEAR_CHIDX_Msk) | \ - ((TIMER_SUBSCRIBE_CLEAR_EN_Enabled << TIMER_SUBSCRIBE_CLEAR_EN_Pos) \ - & TIMER_SUBSCRIBE_CLEAR_EN_Msk)) - static inline void hal_sw_switch_timer_clear_ppi_config(void) { - HAL_SW_SWITCH_TIMER_CLEAR_PPI_REGISTER_EVT = - HAL_SW_SWITCH_TIMER_CLEAR_PPI_EVT; - HAL_SW_SWITCH_TIMER_CLEAR_PPI_REGISTER_TASK = - HAL_SW_SWITCH_TIMER_CLEAR_PPI_TASK; + nrf_radio_publish_set(NRF_RADIO, NRF_RADIO_EVENT_END, + HAL_SW_SWITCH_TIMER_CLEAR_PPI); + nrf_timer_subscribe_set(SW_SWITCH_TIMER, NRF_TIMER_TASK_CLEAR, + HAL_SW_SWITCH_TIMER_CLEAR_PPI); } /* The 2 adjacent PPI groups used for implementing SW_SWITCH_TIMER-based @@ -1169,14 +995,12 @@ static inline void hal_radio_sw_switch_setup( static inline void hal_radio_txen_on_sw_switch(uint8_t ppi) { - HAL_SW_SWITCH_RADIO_ENABLE_PPI_REGISTER_TASK_TX = - HAL_SW_SWITCH_RADIO_ENABLE_PPI_TASK_TX_SET(ppi); + nrf_radio_subscribe_set(NRF_RADIO, NRF_RADIO_TASK_TXEN, ppi); } static inline void hal_radio_rxen_on_sw_switch(uint8_t ppi) { - HAL_SW_SWITCH_RADIO_ENABLE_PPI_REGISTER_TASK_RX = - HAL_SW_SWITCH_RADIO_ENABLE_PPI_TASK_RX_SET(ppi); + nrf_radio_subscribe_set(NRF_RADIO, NRF_RADIO_TASK_RXEN, ppi); } @@ -1186,7 +1010,7 @@ static inline void hal_radio_sw_switch_disable(void) * are subscribed to RADIO_END event, i.e on the same channel. * So we simply cancel the task subscription. */ - HAL_SW_SWITCH_TIMER_CLEAR_PPI_REGISTER_TASK = 0; + nrf_timer_subscribe_clear(SW_SWITCH_TIMER, NRF_TIMER_TASK_CLEAR); HAL_SW_SWITCH_GROUP_TASK_ENABLE_PPI_REGISTER_TASK(0) = 0; HAL_SW_SWITCH_GROUP_TASK_ENABLE_PPI_REGISTER_TASK(1) = 0; } From 21713c138ec25b04e82caec69008e0bfa589739a Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Tue, 22 Dec 2020 10:11:03 +0530 Subject: [PATCH 2/4] Bluetooth: controller: radio: Fix use of HAL API in radio_nrf5_ppi Fix compile errors after use of HAL API in radio_nrf5_ppi file. Signed-off-by: Vinayak Kariappa Chettimada --- .../nordic/hal/nrf5/radio/radio_nrf5_ppi.h | 31 ++----------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h index e11d23130d2ed..894e528d952c4 100644 --- a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h +++ b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h @@ -949,33 +949,6 @@ static inline void hal_radio_sw_switch_setup( HAL_SW_SWITCH_GROUP_TASK_ENABLE_PPI_REGISTER_TASK(ppi_group_index) = HAL_SW_SWITCH_GROUP_TASK_ENABLE_PPI_TASK; - /* Sanity build-time check that - * - SW SWITCH Timer Clear - * - Radio End Capture, and - * - Group Enable - * tasks are all going to be subscribed on the same PPI. - */ - BUILD_ASSERT( - &HAL_SW_SWITCH_GROUP_TASK_ENABLE_PPI_REGISTER_EVT == - &HAL_SW_SWITCH_TIMER_CLEAR_PPI_REGISTER_EVT, - "SW SWitch Timer Clear and Group Disable" - " not on the same PPI channel."); - BUILD_ASSERT( - HAL_SW_SWITCH_GROUP_TASK_ENABLE_PPI_EVT == - HAL_SW_SWITCH_TIMER_CLEAR_PPI_EVT, - "SW SWitch Timer Clear and Group Disable" - " not on the same PPI channel."); - BUILD_ASSERT( - &HAL_RADIO_END_TIME_CAPTURE_PPI_REGISTER_EVT == - &HAL_SW_SWITCH_TIMER_CLEAR_PPI_REGISTER_EVT, - "Radio End Timer Capture and Group Disable" - " not on the same PPI channel."); - BUILD_ASSERT( - HAL_RADIO_END_TIME_CAPTURE_PPI_EVT == - HAL_SW_SWITCH_TIMER_CLEAR_PPI_EVT, - "Radio End Timer Capture and Group Disable" - " not on the same PPI channel."); - /* We need to un-subscribe the other group from the PPI channel. */ if (ppi_group_index == 0) { HAL_SW_SWITCH_GROUP_TASK_ENABLE_PPI_REGISTER_TASK(1) = 0; @@ -1115,8 +1088,8 @@ static inline void hal_radio_sw_switch_ppi_group_setup(void) "Radio enable and Group disable not on the same PPI channels."); /* Address nRF5340 Engineering A Errata 16 */ - HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_TASK_TX = 0; - HAL_RADIO_ENABLE_ON_TICK_PPI_REGISTER_TASK_RX = 0; + nrf_radio_subscribe_clear(NRF_RADIO, NRF_RADIO_TASK_TXEN); + nrf_radio_subscribe_clear(NRF_RADIO, NRF_RADIO_TASK_RXEN); } static inline void hal_radio_group_task_disable_ppi_setup(void) From ca6af30a6d1dd8a280c51a16c2f50adb7dacb464 Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Thu, 3 Dec 2020 16:08:03 +0530 Subject: [PATCH 3/4] Bluetooth: controller: Adjust DPPI used for nRF53x Adjust the PPI used by nRF53x so that DPPI 0-4 available for application's use. Signed-off-by: Vinayak Kariappa Chettimada --- .../nordic/hal/nrf5/radio/radio_nrf5_ppi.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h index 894e528d952c4..d147a8f6a7ae3 100644 --- a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h +++ b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h @@ -626,7 +626,7 @@ static inline void hal_radio_nrf_ppi_channels_disable(uint32_t mask) * Enable Radio on Event Timer tick: * wire the EVENT_TIMER EVENTS_COMPARE[0] event to RADIO TASKS_TXEN/RXEN task. */ -#define HAL_RADIO_ENABLE_ON_TICK_PPI 0 +#define HAL_RADIO_ENABLE_ON_TICK_PPI 6 #define HAL_RADIO_ENABLE_TX_ON_TICK_PPI HAL_RADIO_ENABLE_ON_TICK_PPI #define HAL_RADIO_ENABLE_RX_ON_TICK_PPI HAL_RADIO_ENABLE_ON_TICK_PPI @@ -664,7 +664,7 @@ static inline void hal_radio_enable_on_tick_ppi_config_and_enable(uint8_t trx) * wire the RADIO EVENTS_ADDRESS event to the * EVENT_TIMER TASKS_CAPTURE[
] task. */ -#define HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI 3 +#define HAL_RADIO_RECV_TIMEOUT_CANCEL_PPI 9 static inline void hal_radio_recv_timeout_cancel_ppi_config(void) { @@ -679,7 +679,7 @@ static inline void hal_radio_recv_timeout_cancel_ppi_config(void) * wire the EVENT_TIMER EVENTS_COMPARE[] event * to the RADIO TASKS_DISABLE task. */ -#define HAL_RADIO_DISABLE_ON_HCTO_PPI 4 +#define HAL_RADIO_DISABLE_ON_HCTO_PPI 10 static inline void hal_radio_disable_on_hcto_ppi_config(void) { @@ -694,7 +694,7 @@ static inline void hal_radio_disable_on_hcto_ppi_config(void) * wire the RADIO EVENTS_END event to the * EVENT_TIMER TASKS_CAPTURE[] task. */ -#define HAL_RADIO_END_TIME_CAPTURE_PPI 5 +#define HAL_RADIO_END_TIME_CAPTURE_PPI 11 static inline void hal_radio_end_time_capture_ppi_config(void) { @@ -708,7 +708,7 @@ static inline void hal_radio_end_time_capture_ppi_config(void) * Start event timer on RTC tick: * wire the RTC0 EVENTS_COMPARE[2] event to EVENT_TIMER TASKS_START task. */ -#define HAL_EVENT_TIMER_START_PPI 1 +#define HAL_EVENT_TIMER_START_PPI 7 static inline void hal_event_timer_start_ppi_config(void) { @@ -723,7 +723,7 @@ static inline void hal_event_timer_start_ppi_config(void) * wire the RADIO EVENTS_READY event to the * EVENT_TIMER TASKS_CAPTURE[] task. */ -#define HAL_RADIO_READY_TIME_CAPTURE_PPI 2 +#define HAL_RADIO_READY_TIME_CAPTURE_PPI 8 static inline void hal_radio_ready_time_capture_ppi_config(void) { @@ -754,7 +754,7 @@ static inline void hal_trigger_crypt_ppi_config(void) * Trigger automatic address resolution on Bit counter match: * wire the RADIO EVENTS_BCMATCH event to the AAR TASKS_START task. */ -#define HAL_TRIGGER_AAR_PPI 6 +#define HAL_TRIGGER_AAR_PPI 12 static inline void hal_trigger_aar_ppi_config(void) { @@ -821,7 +821,7 @@ static inline void hal_sw_switch_timer_clear_ppi_config(void) * 2 adjacent PPIs (8 & 9) and 2 adjacent PPI groups are used for this wiring; * must be 0 or 1. must be a valid TIMER CC register offset. */ -#define HAL_SW_SWITCH_GROUP_TASK_DISABLE_PPI_BASE 8 +#define HAL_SW_SWITCH_GROUP_TASK_DISABLE_PPI_BASE 14 #define HAL_SW_SWITCH_GROUP_TASK_DISABLE_PPI(index) \ (HAL_SW_SWITCH_GROUP_TASK_DISABLE_PPI_BASE + index) @@ -876,7 +876,7 @@ static inline void hal_sw_switch_timer_clear_ppi_config(void) * We use the same PPI for the alternative SW Switch Timer compare * event. */ -#define HAL_SW_SWITCH_RADIO_ENABLE_PPI_BASE 8 +#define HAL_SW_SWITCH_RADIO_ENABLE_PPI_BASE 14 #define HAL_SW_SWITCH_RADIO_ENABLE_PPI(index) \ (HAL_SW_SWITCH_RADIO_ENABLE_PPI_BASE + index) From ec76e7f1aa31a808e3b66847ab76f142d90ca31a Mon Sep 17 00:00:00 2001 From: Vinayak Kariappa Chettimada Date: Tue, 22 Dec 2020 10:42:28 +0530 Subject: [PATCH 4/4] Bluetooth: controller: GPIO PA/LNA support for nRF53x Ported the GPIO PA/LNA support for nRF53x by using a DPPI channel. Fixes #24142. Signed-off-by: Vinayak Kariappa Chettimada --- .../nordic/hal/nrf5/radio/radio_nrf5_ppi.h | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h index d147a8f6a7ae3..b576250fef386 100644 --- a/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h +++ b/subsys/bluetooth/controller/ll_sw/nordic/hal/nrf5/radio/radio_nrf5_ppi.h @@ -611,6 +611,7 @@ static inline void hal_radio_sw_switch_ppi_group_setup(void) #include #include #include +#include static inline void hal_radio_nrf_ppi_channels_enable(uint32_t mask) { @@ -777,6 +778,27 @@ static inline void hal_trigger_rateoverride_ppi_config(void) HAL_TRIGGER_RATEOVERRIDE_PPI); } +/******************************************************************************/ +#if defined(CONFIG_BT_CTLR_GPIO_PA_PIN) || defined(CONFIG_BT_CTLR_GPIO_LNA_PIN) + +#define HAL_ENABLE_PALNA_PPI 5 +#define HAL_DISABLE_PALNA_PPI HAL_ENABLE_PALNA_PPI + +static inline void hal_palna_ppi_setup(void) +{ + nrf_gpiote_task_t task; + + nrf_timer_publish_set(EVENT_TIMER, NRF_TIMER_EVENT_COMPARE2, + HAL_ENABLE_PALNA_PPI); + nrf_radio_publish_set(NRF_RADIO, NRF_RADIO_EVENT_DISABLED, + HAL_DISABLE_PALNA_PPI); + + task = nrf_gpiote_out_task_get(CONFIG_BT_CTLR_PA_LNA_GPIOTE_CHAN); + nrf_gpiote_subscribe_set(NRF_GPIOTE, task, HAL_DISABLE_PALNA_PPI); +} + +#endif /* CONFIG_BT_CTLR_GPIO_PA_PIN || CONFIG_BT_CTLR_GPIO_LNA_PIN */ + /******************************************************************************/ #if !defined(CONFIG_BT_CTLR_TIFS_HW) /* DPPI setup used for SW-based auto-switching during TIFS. */