Implementing EGU with DPPI

I am looking to implement EGU with DPPI, however I can only find two examples in sdk-nrf repo...

https://github.com/nrfconnect/sdk-nrf/blob/main/samples/tfm/tfm_secure_peripheral/src/main.c

https://github.com/nrfconnect/sdk-nrf/blob/main/samples/bluetooth/radio_coex_3wire/src/main.c

...both of which aren't much of a help for my specific application. I am looking for a bit of guidance or direction to find more examples. 

This is the current DPPI setup, I would like to have four trigger channels which will excite the device and ADC will sample on the rising and falling edges at a specific acquisition times. 

	 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;

GPIOTE is working as expected but the ADC does not sample until the last line, it seems that you cannot trigger the SAADC in multiple channels and this is why I want to use EGU in a setup like the following. 

        NRF_TIMER1->PUBLISH_COMPARE[0] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_0;
	    NRF_GPIOTE->SUBSCRIBE_OUT[1] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_0;
        NRF_EGU0->SUBSCRIBE_TRIGGER[0] = 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_OUT[1] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_1;
        NRF_EGU0->SUBSCRIBE_TRIGGER[1] = 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_OUT[2] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_2;
        NRF_EGU0->SUBSCRIBE_TRIGGER[2] = 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_OUT[2] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_3;
        NRF_EGU0->SUBSCRIBE_TRIGGER[3] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_3;

        NRF_EGU0->PUBLISH_TRIGGERED[0] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_4;
        NRF_EGU0->PUBLISH_TRIGGERED[1] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_4;
        NRF_EGU0->PUBLISH_TRIGGERED[2] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_4;
        NRF_EGU0->PUBLISH_TRIGGERED[3] = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_4;
        NRF_SAADC->SUBSCRIBE_SAMPLE = DPPIC_SUBSCRIBE_CHG_EN_EN_Msk | dppi_channel_4;

 To recap, I am using NRF5340 and am looking for a bit of guidance on how to proceed or direction to find more examples on using EGU with DPPI.

Parents Reply Children
  • Hi, 

    Just to confirm, with GPPI I can:

    1. Associate one task or event with more than one channel, a PPI feature and SAADC in my case?

    2. Associate one channel with multiple tasks and multiple events, a DPPI feature and Timer and GPIOTE in my case?

    If I am correct could you please provide an example that uses both of these features. If this is not possible could you please explain how this is implemented with EGU?

Related