1 /* 2 * Copyright (c) 2023 Nordic Semiconductor ASA 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 /* Use the timer instance ID, not NRF_TIMERx directly, so that it can be checked 8 * in radio_nrf5_ppi.h by the preprocessor. 9 */ 10 #if defined(CONFIG_BT_CTLR_TIFS_HW) 11 #define EVENT_TIMER_ID 0 12 #define EVENT_TIMER _CONCAT(NRF_TIMER, EVENT_TIMER_ID) 13 14 /* Single timer feature not supported when using h/w tIFS switching */ 15 #define HAL_RADIO_ISR_LATENCY_MAX_US 0U 16 17 /* Wrapper for EVENTS_END event generated by Radio peripheral at the very end of the transmission 18 * or reception of a PDU on air. In case of regular PDU it is generated when last bit of CRC is 19 * received or transmitted. 20 */ 21 #define HAL_RADIO_TRX_EVENTS_END HAL_RADIO_EVENTS_END 22 #define HAL_NRF_RADIO_TRX_EVENT_END HAL_NRF_RADIO_EVENT_END 23 24 /* Wrapper for RADIO_SHORTS mask connecting EVENTS_END to EVENTS_DISABLE. 25 * This is a default shortcut used to automatically disable Radio after end of PDU. 26 */ 27 #define NRF_RADIO_SHORTS_TRX_END_DISABLE_Msk HAL_RADIO_SHORTS_TRX_END_DISABLE_Msk 28 29 #define HAL_EVENT_TIMER_TRX_CC_OFFSET 0 30 #define HAL_EVENT_TIMER_TRX_EVENT NRF_TIMER_EVENT_COMPARE0 31 #define HAL_EVENT_TIMER_READY_TASK NRF_TIMER_TASK_CAPTURE0 32 33 #define HAL_EVENT_TIMER_HCTO_CC_OFFSET 1 34 #define HAL_EVENT_TIMER_HCTO_EVENT NRF_TIMER_EVENT_COMPARE1 35 #define HAL_EVENT_TIMER_ADDRESS_TASK NRF_TIMER_TASK_CAPTURE1 36 37 #define HAL_EVENT_TIMER_TRX_END_CC_OFFSET 2 38 #define HAL_EVENT_TIMER_TRX_END_TASK NRF_TIMER_TASK_CAPTURE2 39 40 #define HAL_EVENT_TIMER_DEFERRED_TRX_CC_OFFSET 2 41 #define HAL_EVENT_TIMER_DEFERRED_TX_EVENT NRF_TIMER_EVENT_COMPARE2 42 43 #define HAL_EVENT_TIMER_SAMPLE_CC_OFFSET 3 44 #define HAL_EVENT_TIMER_SAMPLE_TASK NRF_TIMER_TASK_CAPTURE3 45 46 #define HAL_EVENT_TIMER_PA_LNA_CC_OFFSET 2 47 #define HAL_EVENT_TIMER_PA_LNA_PDN_CC_OFFSET 3 48 49 #else /* !CONFIG_BT_CTLR_TIFS_HW */ 50 #if defined(CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER) 51 #define EVENT_TIMER_ID 4 52 #define EVENT_TIMER _CONCAT(NRF_TIMER, EVENT_TIMER_ID) 53 54 #define SW_SWITCH_TIMER EVENT_TIMER 55 56 /* Radio ISR Latency to be considered with single timer used so that the PPI/ 57 * DPPI is disabled in time when the timer is cleared on radio end, so that 58 * the timer compare should not trigger TXEN/RXEN immediately on radio end. 59 * This value will be used as minimum turnaround time in setting up Rx to Tx 60 * using radio_tmr_start_us under single timer use. 61 * The value of 80 us is used considering 150 us TIFS minus the maximum rx 62 * chain delay ~30 us, and minus the radio ramp up delay ~40 us. 63 */ 64 #define HAL_RADIO_ISR_LATENCY_MAX_US 80U 65 66 #define SW_SWITCH_TIMER_EVTS_COMP_BASE 4 67 68 #if defined(CONFIG_BT_CTLR_PHY_CODED) 69 #define SW_SWITCH_TIMER_EVTS_COMP_S2_BASE 6 70 #endif /* !CONFIG_BT_CTLR_PHY_CODED */ 71 72 #if defined(CONFIG_BT_CTLR_DF) 73 #if defined(CONFIG_BT_CTLR_DF_PHYEND_OFFSET_COMPENSATION_ENABLE) 74 /* Allocate 2 adjacent channels for PHYEND delay compensation. Use the same channels as for 75 * PHY CODED S2. The CTEINLINE may not be enabled for PHY CODED so PHYEND event is generated 76 * at the same instant as END event. Hence the channels are used interchangeably. 77 * That saves from use of another timer. 78 */ 79 #define SW_SWITCH_TIMER_EVTS_COMP_PHYEND_DELAY_COMPENSATION_BASE 6 80 #endif /* CONFIG_BT_CTLR_DF_PHYEND_OFFSET_COMPENSATION_ENABLE */ 81 82 /* Wrapper for EVENTS_END event generated by Radio peripheral at the very end of the transmission 83 * or reception of a PDU on air. In case of regular PDU it is generated when last bit of CRC is 84 * received or transmitted. 85 * 86 * When direction finding is enabled a PDU may include Constant Tone Extension at its end. For PDU 87 * including CTE EVENTS_PHYEND event is generated at very end of a PDU. In case there is no CTE in 88 * a PDU the EVENTS_PHYEND event is generated in the same instant as EVENTS_END event. 89 */ 90 #define HAL_RADIO_TRX_EVENTS_END HAL_RADIO_EVENTS_PHYEND 91 #define HAL_NRF_RADIO_TRX_EVENT_END HAL_NRF_RADIO_EVENT_PHYEND 92 93 /* Wrapper for RADIO_SHORTS mask connecting EVENTS_PHYEND to EVENTS_DISABLE. 94 * This is a mask for SOC that has Direction Finding Extension in a Radio peripheral. 95 * It enables shortcut for EVENTS_PHYEND event generated at very end to Radio EVENTS_DISABLE event. 96 * In case there is a CTE in a PDU then EVENTS_PHYEND event is generated after the CTE. 97 * If there is no CTE, it is generated in the same instant as EVENTS_END. 98 */ 99 #define NRF_RADIO_SHORTS_TRX_END_DISABLE_Msk HAL_RADIO_SHORTS_TRX_PHYEND_DISABLE_Msk 100 101 /* Delay of EVENTS_PHYEND event on receive PDU without CTE included when CTEINLINE is enabled */ 102 #define RADIO_EVENTS_PHYEND_DELAY_US 16 103 104 #if defined(CONFIG_BT_CTLR_DF_CONN_CTE_RX) 105 /* Delay of CCM TASKS_CRYPT start in number of bits for Radio Bit counter */ 106 #define CCM_TASKS_CRYPT_DELAY_BITS 3 107 #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_RX */ 108 109 #else /* !CONFIG_BT_CTLR_DF */ 110 /* Wrapper for EVENTS_END event generated by Radio peripheral at the very end of the transmission 111 * or reception of a PDU on air. In case of regular PDU it is generated when last bit of CRC is 112 * received or transmitted. 113 */ 114 #define HAL_RADIO_TRX_EVENTS_END HAL_RADIO_EVENTS_END 115 #define HAL_NRF_RADIO_TRX_EVENT_END HAL_NRF_RADIO_EVENT_END 116 117 /* Wrapper for RADIO_SHORTS mask connecting EVENTS_END to EVENTS_DISABLE. 118 * This is a default shortcut used to automatically disable Radio after end of PDU. 119 */ 120 #define NRF_RADIO_SHORTS_TRX_END_DISABLE_Msk HAL_RADIO_SHORTS_TRX_END_DISABLE_Msk 121 #endif /* !CONFIG_BT_CTLR_DF */ 122 123 #define HAL_EVENT_TIMER_TRX_CC_OFFSET 0 124 #define HAL_EVENT_TIMER_TRX_EVENT NRF_TIMER_EVENT_COMPARE0 125 #define HAL_EVENT_TIMER_READY_TASK NRF_TIMER_TASK_CAPTURE0 126 127 #define HAL_EVENT_TIMER_HCTO_CC_OFFSET 1 128 #define HAL_EVENT_TIMER_HCTO_EVENT NRF_TIMER_EVENT_COMPARE1 129 #define HAL_EVENT_TIMER_ADDRESS_TASK NRF_TIMER_TASK_CAPTURE1 130 131 #define HAL_EVENT_TIMER_TRX_END_CC_OFFSET 2 132 #define HAL_EVENT_TIMER_TRX_END_TASK NRF_TIMER_TASK_CAPTURE2 133 134 #define HAL_EVENT_TIMER_DEFERRED_TRX_CC_OFFSET 2 135 #define HAL_EVENT_TIMER_DEFERRED_TX_EVENT NRF_TIMER_EVENT_COMPARE2 136 137 #define HAL_EVENT_TIMER_SAMPLE_CC_OFFSET 3 138 #define HAL_EVENT_TIMER_SAMPLE_TASK NRF_TIMER_TASK_CAPTURE3 139 140 #define HAL_EVENT_TIMER_PA_LNA_CC_OFFSET 2 141 #define HAL_EVENT_TIMER_PA_LNA_PDN_CC_OFFSET 3 142 143 #else /* !CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER */ 144 #define EVENT_TIMER_ID 0 145 #define EVENT_TIMER _CONCAT(NRF_TIMER, EVENT_TIMER_ID) 146 147 #define SW_SWITCH_TIMER NRF_TIMER1 148 149 /* When using dedicated timer used for tIFS switching, compensation to avoid 150 * spurious TXEN/RXEN due to timer being clear is not needed. 151 */ 152 #define HAL_RADIO_ISR_LATENCY_MAX_US 0U 153 154 #define SW_SWITCH_TIMER_EVTS_COMP_BASE 0 155 156 #if defined(CONFIG_BT_CTLR_PHY_CODED) 157 #define SW_SWITCH_TIMER_EVTS_COMP_S2_BASE 2 158 #endif /* !CONFIG_BT_CTLR_PHY_CODED */ 159 160 #if defined(CONFIG_BT_CTLR_DF) 161 #if defined(CONFIG_BT_CTLR_DF_PHYEND_OFFSET_COMPENSATION_ENABLE) 162 /* Allocate 2 adjacent channels for PHYEND delay compensation. Use the same channels as for 163 * PHY CODED S2. The CTEINLINE may not be enabled for PHY CODED so PHYEND event is generated 164 * at the same instant as END event. Hence the channels are used interchangeably. 165 * That saves from use of another timer. 166 */ 167 #define SW_SWITCH_TIMER_EVTS_COMP_PHYEND_DELAY_COMPENSATION_BASE 2 168 #endif /* CONFIG_BT_CTLR_DF_PHYEND_OFFSET_COMPENSATION_ENABLE */ 169 170 /* Wrapper for EVENTS_END event generated by Radio peripheral at the very end of the transmission 171 * or reception of a PDU on air. In case of regular PDU it is generated when last bit of CRC is 172 * received or transmitted. 173 * 174 * When direction finding is enabled a PDU may include Constant Tone Extension at its end. For PDU 175 * including CTE EVENTS_PHYEND event is generated at very end of a PDU. In case there is no CTE in 176 * a PDU the EVENTS_PHYEND event is generated in the same instant as EVENTS_END event. 177 */ 178 #define HAL_RADIO_TRX_EVENTS_END HAL_RADIO_EVENTS_PHYEND 179 #define HAL_NRF_RADIO_TRX_EVENT_END HAL_NRF_RADIO_EVENT_PHYEND 180 181 /* Wrapper for RADIO_SHORTS mask connecting EVENTS_PHYEND to EVENTS_DISABLE. 182 * This is a mask for SOC that has Direction Finding Extension in a Radio peripheral. 183 * It enables shortcut for EVENTS_PHYEND event generated at very end to Radio EVENTS_DISABLE event. 184 * In case there is a CTE in a PDU then EVENTS_PHYEND event is generated after the CTE. 185 * If there is no CTE, it is generated in the same instant as EVENTS_END. 186 */ 187 #define NRF_RADIO_SHORTS_TRX_END_DISABLE_Msk HAL_RADIO_SHORTS_TRX_PHYEND_DISABLE_Msk 188 189 /* Delay of EVENTS_PHYEND event on receive PDU without CTE included when CTEINLINE is enabled */ 190 #define RADIO_EVENTS_PHYEND_DELAY_US 16 191 192 #if defined(CONFIG_BT_CTLR_DF_CONN_CTE_RX) 193 /* Delay of CCM TASKS_CRYPT start in number of bits for Radio Bit counter */ 194 #define CCM_TASKS_CRYPT_DELAY_BITS 3 195 #endif /* CONFIG_BT_CTLR_DF_CONN_CTE_RX */ 196 197 #else /* !CONFIG_BT_CTLR_DF */ 198 /* Wrapper for EVENTS_END event generated by Radio peripheral at the very end of the transmission 199 * or reception of a PDU on air. In case of regular PDU it is generated when last bit of CRC is 200 * received or transmitted. 201 */ 202 #define HAL_RADIO_TRX_EVENTS_END HAL_RADIO_EVENTS_END 203 #define HAL_NRF_RADIO_TRX_EVENT_END HAL_NRF_RADIO_EVENT_END 204 205 /* Wrapper for RADIO_SHORTS mask connecting EVENTS_END to EVENTS_DISABLE. 206 * This is a default shortcut used to automatically disable Radio after end of PDU. 207 */ 208 #define NRF_RADIO_SHORTS_TRX_END_DISABLE_Msk HAL_RADIO_SHORTS_TRX_END_DISABLE_Msk 209 #endif /* !CONFIG_BT_CTLR_DF */ 210 211 #define HAL_EVENT_TIMER_TRX_CC_OFFSET 0 212 #define HAL_EVENT_TIMER_TRX_EVENT NRF_TIMER_EVENT_COMPARE0 213 #define HAL_EVENT_TIMER_READY_TASK NRF_TIMER_TASK_CAPTURE0 214 215 #define HAL_EVENT_TIMER_HCTO_CC_OFFSET 1 216 #define HAL_EVENT_TIMER_HCTO_EVENT NRF_TIMER_EVENT_COMPARE1 217 #define HAL_EVENT_TIMER_ADDRESS_TASK NRF_TIMER_TASK_CAPTURE1 218 219 #define HAL_EVENT_TIMER_TRX_END_CC_OFFSET 2 220 #define HAL_EVENT_TIMER_TRX_END_TASK NRF_TIMER_TASK_CAPTURE2 221 222 #define HAL_EVENT_TIMER_DEFERRED_TRX_CC_OFFSET 2 223 #define HAL_EVENT_TIMER_DEFERRED_TX_EVENT NRF_TIMER_EVENT_COMPARE2 224 225 #define HAL_EVENT_TIMER_SAMPLE_CC_OFFSET 3 226 #define HAL_EVENT_TIMER_SAMPLE_TASK NRF_TIMER_TASK_CAPTURE3 227 228 #define HAL_EVENT_TIMER_PA_LNA_CC_OFFSET 2 229 #define HAL_EVENT_TIMER_PA_LNA_PDN_CC_OFFSET 3 230 #endif /* !CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER */ 231 #endif /* !CONFIG_BT_CTLR_TIFS_HW */ 232