Migrating from PPI to DPPI

I'm trying to port a PPI application to an nrf5340. I'm quite puzzled, as it would appear there is no obvious way to achieve what I'm trying to do.

In short, I have a setup where the events E should trigger tasks T accordingly to the relation below. Events originate by timers (E1-4 TIM3, E5 TIM4), and the tasks are simple GPIOTE clear/set

e1 --> t1,t5
e2 --> t2,t6
e3 --> t3,t5
e4 --> t4,t6
e5 --> t2,t4,t6

I'm using the gppi API, as I would like to support both nrf52 and nrf53 families. As far as I understand DPPI does not allow to associate multiple channels to the same task/event. This seems to make it impossible to achieve, as either tasks or events need to be connected to multiple channels.

I think I'm missing something since this was feasible with PPI and does not seem like a very strange use case to me :D

Thanks!

Parents Reply
  • Thanks. As far as I can see, this use case is different from the example you linked. I'm familiar with how to connect multiple events and multiple tasks to the same DPPI channel. The problem I have here is that some tasks should be triggered by multiple DPPI channels (e.g. t6).

    This was achieved in PPI with forks, but I cannot reproduce it with DPPI. Looking forward to your solution!

    Best,

    Andrea

Children
  • Hi Andrea,

    Yaxit said:
    The problem I have here is that some tasks should be triggered by multiple DPPI channels (e.g. t6).

    The only possible option I see is to use the many-to-many connection and set up channel groups for each event-tasks group. I am not sure if that will allow you to have one event publish to several channels or have one task subscribe to several channels, though. It is not clear from the documentation and I have not found anyone internally who's tried this yet.

    You may have already tried out the channel groups?

    Best regards,

    Maria

  • Hi, I have not tried this yet but I too had the impression that it would not help. The EGU solution seems interesting though, I'll try that first.

    Since the behaviour of groups is not very clear, it might be still useful to try it out and then update the documentation?

Related