RTC+DPPI+SPIM+DMA

HI

I am using the nrf54l15 SDK version ncs3.0.0 and the Zephyr example. Currently, I am connecting a sensor via SPIM30 and need to read the sensor's data every second, which amounts to 200 bytes. To achieve low power consumption, I aim to minimize CPU intervention and plan to use RTC + DPPI + SPIM + DMA to directly store the data into an array. After each second of reading, the new data will be saved immediately following the last 200 bytes in the array until 10 seconds of data are collected, at which point the CPU will perform centralized processing.

1. Is this approach feasible?
2. If feasible, are there any example routines for RTC, DPPI, SPIM + DMA? If so, where can I find them?
3. If I use a timer instead of RTC for timing, will the power consumption be higher?

Thanks!

Parents Reply Children
  • Thank you for your reply.
    I am currently using the GRTC for timing, but I am encountering some issues.

    I am currently using NRF54L15 with SDK version 3.0.0, and I want to implement GRTC auto-reload without using interrupts. My main goal is to reduce CPU usage and utilize the peripheral DPPI for operations as much as possible.

    1. The manual states that only Channel 0 supports hardware auto-reload, while other channels can be configured via the CC_ADD register. However, in Zephyr, Channel 0 is already used for RTOS timing, so I am applying for other channels for comparison.

    2. For other channels, I am trying to implement GRTC auto-reload using DPPI, but there seems to be no CC_ADD operation among the tasks.

    Does this mean I cannot avoid interrupts to achieve GRTC compare reloading?

    Thanks

  • Hi there, we are trying the same thing with the GRTC channel 0.

    Channel 0 is hard-coded as the main channel in `nrf_grtc.h`.
    Is it safe to change this value? Or is channel 0 hardcoded in other places as well?

    Zephyr doesn't seem to be using the Interval feature.

  • I didn't use channel 0 and assigned other channels instead, as I saw that channel 0 was occupied in my Zephyr-based code.

Related