Greeting again everyone!.
I am using beaglebone with angstrom.
I am trying( by writing a kernel module ) to loop two dma channels together but i cant figure out how....
Here is what i want. i want the completion of the 1st channel to trigger the final interrupt(callback1) and also channel 2.
and at the completion of channel 2 to trigger the final interrupt (callback2) and also channel 1. etc... creating a loop between ch1 and ch2.
By linking the channels it seems that i cant link channel 2 back to channel 1. (
edma_link(ch1, ch2);
edma_link(ch2, ch1); system fail.
i can only link ch2 on its self
edma_link(ch1, ch2);
edma_link(ch2, ch2);
but i dont want that.
By chaining the final interrupt is not going off. so i dont want that either.
I tried to link edma_link(ch1, ch2) then chain ch2 with a ch3 and have edma_link(ch3, ch1);
but then ch1 callback1 returns DMA_CC_ERROR with its paramset being NULL (so the error is from that).
Any suggestions ?
I am working on EDMA ATM as well. I was curious if you could write a little bit about how you are initializing the channels and setting up the transfers. Are you writing a kernel module for this and interfacing to it in user-space?Appreciate any insight, having a hard time digging up info on using EDMA on the Beaglebone
On Thursday, November 7, 2013 10:06:53 AM UTC-5, jimmy....@gmail.com wrote:Greeting again everyone!.
I am using beaglebone with angstrom.
I am trying( by writing a kernel module ) to loop two dma channels together but i cant figure out how....
Here is what i want. i want the completion of the 1st channel to trigger the final interrupt(callback1) and also channel 2.
and at the completion of channel 2 to trigger the final interrupt (callback2) and also channel 1. etc... creating a loop between ch1 and ch2.
By linking the channels it seems that i cant link channel 2 back to channel 1. (edma_link(ch1, ch2);
edma_link(ch2, ch1); system fail.i can only link ch2 on its self
edma_link(ch1, ch2);
edma_link(ch2, ch2);but i dont want that.
By chaining the final interrupt is not going off. so i dont want that either.
I tried to link edma_link(ch1, ch2) then chain ch2 with a ch3 and have edma_link(ch3, ch1);but then ch1 callback1 returns DMA_CC_ERROR with its paramset being NULL (so the error is from that).
Any suggestions ?
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups "BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Thank you so much for your help Dimitris!Currently studying all of the EDMA code available to me, the starter ware looks useful but seems to run on bare metal HW, addressing memory directly.I'm stuck on two things I don't quite understand:Interfacing between KERNEL DRIVER and USERLAND CODEI have a kernel module and I have userland code, is there a good example of what should be in KO and what should be in O file?If I define a function in the KO file, how do I address that function in the userland file?Are there parts of this that is REQUIRED to be inside the KO file?andVirtual versus PhysicalIt seems that there is Virtual Memory and Physical Memory, and Virtual DMA Channels and Physical DMA Channels.Where can I learn about the difference, and which to use?How do I address PHYSICAL MEMORY ADDRESS: 0x49000000 (EDMA3CC PID Register) - tried using HWREG(<PHYMEMADDR>) but it errors, do I use VIRTUAL MEM ADDR? If so, what's the best way to write code so it always uses the virtual, rather than physical? I'm aware of Page Table data structures, they're supposed to map between PHY and VIRT but I don't see any uses of them in this EDMA code I'm looking at.Regards,