I know, third post, sorry, but here we go
so after i was able to run the edma without crashing and using it successfully for manual transfers i developed some questions that the documentation doesn't seem to be clear enough about (for me anyway).
i am using C6748 on a custom board, EDMA3 v 2.11.14
so my questions are:
1) I am able to create a random channel that i am using for basic memcpy purposes. it works like a charm. however i have read that for basic, async, memcpy like events i should be using the QDMA. i tried to set up the QDMA but i never could get it to execute. so when i looked at the qdma example i noticed that the code made it seem like if you are doing and AB transfer using the QDMA you need to "trigger" the QDMA bcnt times in order for the whole thing to complete. i was hoping to be able to use it like the regular dma where i issue an AB transfer and just issue it once and be done. is that the way that QDMA's work or am i wrong in my interpretation and i should try again to get it to work? when i was trying to get it to work it was giving me channel #160 for a channel when i requested "any" channel but no errors. is that normal? also i was having a hard time requesting a qdma channel on queue 0 but on queue 1 i never have a problem (by problem i mean the system would hang forever in request channel). is there a reason for this?
2) the 6748 seems to have 2 instances of the EDMA3 installed on it. in the example code they have an array for the edma handle and call edma3init for both of the instances. i did the same thing and no errors. my issue happens when i request a channel using hdma[1] instead of hdma[0]. i get error -139 every time. is there some trick to requesting a channel from handle 1 instead of using handle 0?
3) this one i think i understand but i want verification. each edma instance has 32 channels and 128 param sets. each channel has a specific param set with leaves 96 param sets that are not associated with a channel. when i request "any" channel i get a live channel with my param set, but when i request "any link" channel i get a param set without a channel associated with it so i do not use up a live channel just for a link param. is this correct?
4) if i am able to request a channel from handle instance 1 instead of handle instance 0 can i still assign it to queue 0 or does handle instance 1 have a specific set of queues?
5) i know that edma3init creates semaphores. this implies to me that the LLD uses pends and posts in the code. does this mean that edma lld calls can only be done from a task? if i am wrong about this can i make calls to the edma lld calls before sysbios has started or does sysbios need to be running?
6) here is a longer one. i am trying, now, to setup the edma to McBSP events. i am able to follow the logic for setting up the transfer for sorting multi channel data. my issue comes from setting up the system. the example appears to me to be how to take a whole buffer of already gathered data and sort it into 2 buffers. that is not what i want to do. i assumed the example of channel sorting was meant for this sort of thing at first but when i look at it and see that it has an acnt*bcnt*ccnt size transfer and we are reading 1 sample (2 bytes) at a time it will try to transfer a*b*c amount of data every time the mcbsp sync happens while also sending me an interrupt on every event - which is wrong. i want it to do 2 bytes at a time until the buffer size is reached and then interrupt me when i have a complete buffer. how does one accomplish this? this might be what i see FIFO mode is for, am i right? i am having a hard time finding a clear explanation about what FIFO mode is and when to use it (the comments in the header file make it seem like it is used for circular buffers). the examples seem to be for GPIO events but mcXsp events. also i see in the document EDMA_LLD.pdf they say to set the bcntrld to be the value of bcnt. i don't understand well what this value is used for and what loading it with something does. in addition, do i have to disable my interrupt handler for this event when i set the DMA to trigger off of it? do i leave my interrupt active? does it not matter? what do i do with this interrupt for an event i no longer need an interrupt for but i need events to still happen for the edma to trigger off of? Told you it was a longer one.