Bluetooth: controller: nRF53: Use SWI instead of EGU
nRF5340 does have SWI peripheral, hence use it instead of the single available EGU peripheral. Use of SWI will allow controller's LLL, ULL_HIGH and ULL_LOW execution context to be independently configured to different interrupt priority levels. When ULL_HIGH priority equals ULL_LOW priority, only SWI2 is used by controller. Otherwise, SWI3 is used for ULL_LOW. Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
parent
13bbfc8172
commit
5a40aa073d
1 changed files with 11 additions and 35 deletions
|
@ -6,12 +6,6 @@
|
|||
|
||||
#if defined(CONFIG_SOC_SERIES_NRF51X) || defined(CONFIG_SOC_COMPATIBLE_NRF52X)
|
||||
|
||||
static inline void hal_swi_init(void)
|
||||
{
|
||||
/* No platform-specific initialization required. */
|
||||
}
|
||||
|
||||
/* Split architecture uses max. two SWI */
|
||||
#define HAL_SWI_RADIO_IRQ SWI4_IRQn
|
||||
#define HAL_SWI_WORKER_IRQ RTC0_IRQn
|
||||
|
||||
|
@ -22,45 +16,29 @@ static inline void hal_swi_init(void)
|
|||
#define HAL_SWI_JOB_IRQ SWI5_IRQn
|
||||
#endif
|
||||
|
||||
static inline void hal_swi_lll_pend(void)
|
||||
{
|
||||
NVIC_SetPendingIRQ(HAL_SWI_RADIO_IRQ);
|
||||
}
|
||||
|
||||
static inline void hal_swi_worker_pend(void)
|
||||
{
|
||||
NVIC_SetPendingIRQ(HAL_SWI_WORKER_IRQ);
|
||||
}
|
||||
|
||||
static inline void hal_swi_job_pend(void)
|
||||
{
|
||||
NVIC_SetPendingIRQ(HAL_SWI_JOB_IRQ);
|
||||
}
|
||||
|
||||
#elif defined(CONFIG_SOC_SERIES_NRF53X)
|
||||
|
||||
#define HAL_SWI_RADIO_IRQ SWI2_IRQn
|
||||
#define HAL_SWI_WORKER_IRQ RTC0_IRQn
|
||||
|
||||
#if !defined(CONFIG_BT_CTLR_LOW_LAT) && \
|
||||
(CONFIG_BT_CTLR_ULL_HIGH_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
|
||||
#define HAL_SWI_JOB_IRQ HAL_SWI_WORKER_IRQ
|
||||
#else
|
||||
#define HAL_SWI_JOB_IRQ SWI3_IRQn
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static inline void hal_swi_init(void)
|
||||
{
|
||||
/* No platform-specific initialization required. */
|
||||
}
|
||||
|
||||
/* Split architecture uses max. two SWI */
|
||||
#define HAL_SWI_RADIO_IRQ EGU0_IRQn
|
||||
#define HAL_SWI_WORKER_IRQ RTC0_IRQn
|
||||
|
||||
#if !defined(CONFIG_BT_CTLR_LOW_LAT) && \
|
||||
(CONFIG_BT_CTLR_ULL_HIGH_PRIO == CONFIG_BT_CTLR_ULL_LOW_PRIO)
|
||||
#define HAL_SWI_JOB_IRQ HAL_SWI_WORKER_IRQ
|
||||
|
||||
static inline void hal_swi_lll_pend(void)
|
||||
{
|
||||
NVIC_SetPendingIRQ(HAL_SWI_RADIO_IRQ);
|
||||
}
|
||||
|
||||
#else
|
||||
#error "We need to use an unused IRQ line to implement a second SW IRQ. "
|
||||
#endif
|
||||
|
||||
static inline void hal_swi_worker_pend(void)
|
||||
{
|
||||
NVIC_SetPendingIRQ(HAL_SWI_WORKER_IRQ);
|
||||
|
@ -70,5 +48,3 @@ static inline void hal_swi_job_pend(void)
|
|||
{
|
||||
NVIC_SetPendingIRQ(HAL_SWI_JOB_IRQ);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SOC_SERIES_NRF53X */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue