zephyrproject-rtos / zephyr

Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
https://docs.zephyrproject.org
Apache License 2.0
10.72k stars 6.55k forks source link

Hardware Triggered DMA #64302

Open danielb-tkjcy3rq opened 12 months ago

danielb-tkjcy3rq commented 12 months ago

Is your feature request related to a problem? Please describe. I'm currently writing an application to generate custom waveform using iMXRT 1160. Outsize Zephyr, I would use NXP SDK to periodically trigger DMA to transfer data from memory to peripheral (GPIO) using a timer (PIT). I'm now hoping to use Zephyr in my next project but I can't see a way of doing this using the current DMA API. One option is to include the correct haders in hal/nxp in my application and write my code that way, but I feel like that isn't the best way to do it.

Describe the solution you'd like Ideal solution would be for the DMA API to allow the user to choose periodic hardware triggering.

Describe alternatives you've considered An alternative would be to include the vendor SDK in my zephyr application and drive the hardware directly to achieve the periodic triggering.

Additional context Add any other context or graphics (drag-and-drop an image) about the feature request here.

github-actions[bot] commented 12 months ago

Hi @danielb-tkjcy3rq! We appreciate you submitting your first issue for our open-source project. 🌟

Even though I'm a bot, I can assure you that the whole community is genuinely grateful for your time and effort. 🤖💙

teburd commented 12 months ago

I think this is partially possible with the dma slot being used by the edma driver, see https://github.com/zephyrproject-rtos/zephyr/blob/main/drivers/dma/dma_mcux_edma.c#L324

The meaning is pretty clear from the sdk doc comment https://github.com/nxp-mcuxpresso/mcux-sdk/blob/main/drivers/dmamux/fsl_dmamux.h#L107

It's unclear how this would be done in a sort of abstract way though, in saying device X is the trigger source (in this case a PIT instance).

Reassigned to David Leach who is the lead for NXP as he might have better insights or have someone in mind with better insights on how this might be accomplished with Zephyr or how to best use the mcux sdk with Zephyr to bypass the Zephyr APIs.