Commit e7799d49 authored by Vinayak Kariappa Chettimada's avatar Vinayak Kariappa Chettimada Committed by Fabio Baltieri
Browse files

Bluetooth: Controller: Separate Tx/Rx frame spacing

Separate Tx/Rx frame spacing.

Signed-off-by: default avatarVinayak Kariappa Chettimada <vich@nordicsemi.no>
parent cbae5d5f
Loading
Loading
Loading
Loading
+6 −1
Changes for subsys/bluetooth/controller/ll_sw/lll_conn.h: 6 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -43,10 +43,15 @@ struct lll_conn {
	uint8_t access_addr[4];
	uint8_t crc_init[3];

	uint16_t tifs_tx_us;
	uint16_t tifs_rx_us;
	uint16_t tifs_hcto_us;
	uint16_t tifs_cis_us;

	uint16_t handle;
	uint16_t interval;
	uint16_t latency;

	uint16_t latency;
	uint16_t latency_prepare;
	uint16_t lazy_prepare;
	uint16_t latency_event;
+5 −0
Changes for subsys/bluetooth/controller/ll_sw/lll_conn_iso.h: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -36,6 +36,11 @@ struct lll_conn_iso_stream {
	uint32_t offset;            /* Offset of CIS from start of CIG in us */
	uint32_t sub_interval;      /* Interval between subevents in us */
	uint8_t  nse:5;             /* Number of subevents */

	/* Frame Spacing */
	uint16_t tifs_us;

	/* Stream parameters */
	struct lll_conn_iso_stream_rxtx rx; /* RX parameters */
	struct lll_conn_iso_stream_rxtx tx; /* TX parameters */

+1 −1
Changes for subsys/bluetooth/controller/ll_sw/nordic/lll/lll_central.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -186,7 +186,7 @@ static int prepare_cb(struct lll_prepare_param *p)

	radio_isr_set(lll_conn_isr_tx, lll);

	radio_tmr_tifs_set(EVENT_IFS_US);
	radio_tmr_tifs_set(lll->tifs_rx_us);

#if defined(CONFIG_BT_CTLR_DF_CONN_CTE_RX)
	/* If CTE RX is enabled and the PHY is not CODED, store channel used for
+5 −5
Changes for subsys/bluetooth/controller/ll_sw/nordic/lll/lll_central_iso.c: 5 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -306,7 +306,7 @@ static int prepare_cb(struct lll_prepare_param *p)

	radio_isr_set(isr_tx, cis_lll);

	radio_tmr_tifs_set(EVENT_IFS_US);
	radio_tmr_tifs_set(cis_lll->tifs_us);

#if defined(CONFIG_BT_CTLR_PHY)
	radio_switch_complete_and_rx(cis_lll->rx.phy);
@@ -501,7 +501,7 @@ static void isr_tx(void *param)
	LL_ASSERT(!radio_is_ready());

	/* +/- 2us active clock jitter, +1 us PPI to timer start compensation */
	hcto = radio_tmr_tifs_base_get() + EVENT_IFS_US +
	hcto = radio_tmr_tifs_base_get() + cis_lll->tifs_us +
	       (EVENT_CLOCK_JITTER_US << 1) + RANGE_DELAY_US +
	       HAL_RADIO_TMR_START_DELAY_US;

@@ -527,13 +527,13 @@ static void isr_tx(void *param)
	radio_gpio_lna_setup();

#if defined(CONFIG_BT_CTLR_PHY)
	radio_gpio_pa_lna_enable(radio_tmr_tifs_base_get() + EVENT_IFS_US -
	radio_gpio_pa_lna_enable(radio_tmr_tifs_base_get() + cis_lll->tifs_us -
				 (EVENT_CLOCK_JITTER_US << 1) -
				 radio_tx_chain_delay_get(cis_lll->tx.phy,
							  cis_lll->tx.phy_flags) -
				 HAL_RADIO_GPIO_LNA_OFFSET);
#else /* !CONFIG_BT_CTLR_PHY */
	radio_gpio_pa_lna_enable(radio_tmr_tifs_base_get() + EVENT_IFS_US -
	radio_gpio_pa_lna_enable(radio_tmr_tifs_base_get() + cis_lll->tifs_us -
				 (EVENT_CLOCK_JITTER_US << 1) -
				 radio_tx_chain_delay_get(0U, 0U) -
				 HAL_RADIO_GPIO_LNA_OFFSET);
@@ -1044,7 +1044,7 @@ static void isr_prepare_subevent(void *param)
	radio_tmr_rx_disable();
	radio_tmr_tx_enable();

	radio_tmr_tifs_set(EVENT_IFS_US);
	radio_tmr_tifs_set(cis_lll->tifs_us);

#if defined(CONFIG_BT_CTLR_PHY)
	radio_switch_complete_and_rx(cis_lll->rx.phy);
+13 −10
Changes for subsys/bluetooth/controller/ll_sw/nordic/lll/lll_conn.c: 13 added lines, 10 removed lines.
Original line number Diff line number Diff line
@@ -403,7 +403,7 @@ void lll_conn_isr_rx(void *param)
#endif /* CONFIG_BT_PERIPHERAL */
		}
	} else {
		radio_tmr_tifs_set(EVENT_IFS_US);
		radio_tmr_tifs_set(lll->tifs_rx_us);

#if defined(CONFIG_BT_CTLR_PHY)
		radio_switch_complete_and_rx(lll->phy_rx);
@@ -436,7 +436,7 @@ void lll_conn_isr_rx(void *param)
	radio_gpio_pa_setup();

	pa_lna_enable_us =
		radio_tmr_tifs_base_get() + EVENT_IFS_US + cte_len - HAL_RADIO_GPIO_PA_OFFSET;
		radio_tmr_tifs_base_get() + lll->tifs_tx_us - cte_len - HAL_RADIO_GPIO_PA_OFFSET;
#if defined(CONFIG_BT_CTLR_PHY)
	pa_lna_enable_us -= radio_rx_chain_delay_get(lll->phy_rx, PHY_FLAGS_S8);
#else /* !CONFIG_BT_CTLR_PHY */
@@ -462,7 +462,7 @@ void lll_conn_isr_rx(void *param)
		lll->empty = 0U;

		/* Setup deferred tx packet set */
		tx_defer_us = radio_tmr_tifs_base_get() + EVENT_IFS_US -
		tx_defer_us = radio_tmr_tifs_base_get() + lll->tifs_tx_us -
			      HAL_RADIO_TMR_DEFERRED_TX_DELAY_US;
		defer_us = radio_tmr_isr_set(tx_defer_us, isr_tx_deferred_set,
					     param);
@@ -575,11 +575,11 @@ void lll_conn_isr_tx(void *param)
	/* Clear radio tx status and events */
	lll_isr_tx_status_reset();

	/* setup tIFS switching */
	radio_tmr_tifs_set(EVENT_IFS_US);

	lll = param;

	/* setup tIFS switching */
	radio_tmr_tifs_set(lll->tifs_tx_us);

#if defined(CONFIG_BT_CTLR_DF_CONN_CTE_RX)
#if defined(CONFIG_BT_CTLR_DF_PHYEND_OFFSET_COMPENSATION_ENABLE)
	enum radio_end_evt_delay_state end_evt_delay;
@@ -616,6 +616,7 @@ void lll_conn_isr_tx(void *param)

#if defined(CONFIG_BT_CTLR_DF_PHYEND_OFFSET_COMPENSATION_ENABLE)
	/* Use special API for SOC that requires compensation for PHYEND event delay. */

#if defined(CONFIG_BT_CTLR_PHY)
	radio_switch_complete_with_delay_compensation_and_tx(lll->phy_rx, 0, lll->phy_tx,
							     lll->phy_flags, end_evt_delay);
@@ -660,7 +661,7 @@ void lll_conn_isr_tx(void *param)
#endif /* CONFIG_BT_CTLR_DF_CONN_CTE_TX */

	/* +/- 2us active clock jitter, +1 us PPI to timer start compensation */
	hcto = radio_tmr_tifs_base_get() + EVENT_IFS_US +
	hcto = radio_tmr_tifs_base_get() + lll->tifs_hcto_us +
	       (EVENT_CLOCK_JITTER_US << 1) + RANGE_DELAY_US +
	       HAL_RADIO_TMR_START_DELAY_US;
#if defined(CONFIG_BT_CTLR_DF_CONN_CTE_TX)
@@ -701,13 +702,15 @@ void lll_conn_isr_tx(void *param)
#if defined(HAL_RADIO_GPIO_HAVE_LNA_PIN)
	radio_gpio_lna_setup();
#if defined(CONFIG_BT_CTLR_PHY)
	radio_gpio_pa_lna_enable(radio_tmr_tifs_base_get() + EVENT_IFS_US - 4 -
	radio_gpio_pa_lna_enable(radio_tmr_tifs_base_get() + lll->tifs_rx_us -
				 (EVENT_CLOCK_JITTER_US << 1) -
				 radio_tx_chain_delay_get(lll->phy_tx,
							  lll->phy_flags) -
				 HAL_RADIO_GPIO_LNA_OFFSET);
#else /* !CONFIG_BT_CTLR_PHY */
	radio_gpio_pa_lna_enable(radio_tmr_tifs_base_get() + EVENT_IFS_US - 4 -
				 radio_tx_chain_delay_get(0, 0) -
	radio_gpio_pa_lna_enable(radio_tmr_tifs_base_get() + lll->tifs_rx_us -
				 (EVENT_CLOCK_JITTER_US << 1) -
				 radio_tx_chain_delay_get(0U, 0U) -
				 HAL_RADIO_GPIO_LNA_OFFSET);
#endif /* !CONFIG_BT_CTLR_PHY */
#endif /* HAL_RADIO_GPIO_HAVE_LNA_PIN */
Loading