Allocating the SAADC to multiple DPPI channels

Hi,

I would like to enable the SAADC to read multiple DPPI channels. I am using a timer to publish multiple channels and my code looks like this:

	NRF_TIMER1->PUBLISH_COMPARE[0] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_0;
	NRF_SAADC->SUBSCRIBE_SAMPLE = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_0;

	NRF_TIMER1->PUBLISH_COMPARE[1] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_1;
	NRF_GPIOTE->SUBSCRIBE_SET[1] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_1;
	NRF_SAADC->SUBSCRIBE_SAMPLE = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_1;

	NRF_TIMER1->PUBLISH_COMPARE[2] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_2;
	NRF_GPIOTE->SUBSCRIBE_CLR[1] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_2;
	NRF_SAADC->SUBSCRIBE_SAMPLE = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_2;
	
	NRF_TIMER1->PUBLISH_COMPARE[3] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_3;
	NRF_GPIOTE->SUBSCRIBE_SET[2] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_3;
	NRF_SAADC->SUBSCRIBE_SAMPLE = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_3;

	NRF_TIMER1->PUBLISH_COMPARE[4] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_4;
	NRF_GPIOTE->SUBSCRIBE_CLR[2] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_4;
	NRF_SAADC->SUBSCRIBE_SAMPLE = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_4;

	NRF_TIMER1->PUBLISH_COMPARE[5] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_5;

However, the SAADC is only triggered at the last SAADC subscription call: NRF_SAADC->SUBSCRIBE_SAMPLE = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_4. 

Is there any way that I can trigger multiple SAADC reads within the DPPI channels?

The timer1 is initialized with the following:

static void timer1_init(void)
{
	nrfx_err_t err = NRFX_SUCCESS;
	nrfx_timer_config_t timer_cfg = NRFX_TIMER_DEFAULT_CONFIG;
	timer_cfg.bit_width = NRF_TIMER_BIT_WIDTH_32;

	err = nrfx_timer_init(&timer1, &timer_cfg, timer1_evt_handler);
	if(err != NRFX_SUCCESS)
	{
		LOG_ERR("Error! Could not initialize TIMER1: %d\n", err);
	}

	nrfx_timer_extended_compare(&timer1, NRF_TIMER_CC_CHANNEL0, nrfx_timer_us_to_ticks(&timer1, 800), NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, false);
	nrfx_timer_extended_compare(&timer1, NRF_TIMER_CC_CHANNEL1, nrfx_timer_us_to_ticks(&timer1, 100), NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, false);
	nrfx_timer_extended_compare(&timer1, NRF_TIMER_CC_CHANNEL2, nrfx_timer_us_to_ticks(&timer1, 200), NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, false);
	nrfx_timer_extended_compare(&timer1, NRF_TIMER_CC_CHANNEL3, nrfx_timer_us_to_ticks(&timer1, 300), NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, false);
	nrfx_timer_extended_compare(&timer1, NRF_TIMER_CC_CHANNEL4, nrfx_timer_us_to_ticks(&timer1, 400), NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, false);
	nrfx_timer_extended_compare(&timer1, NRF_TIMER_CC_CHANNEL5, nrfx_timer_us_to_ticks(&timer1, 1000), NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, false);
}

Thanks!

Ted

Parents Reply Children
Related