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
  • 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?

Children
No Data
Related