Part Number: TMS320C6748
code gen tools 7.4.23
so here is what is going on. we are calling hEdma = edma3init(0, &result); to initialize the EDMA3 and with that comes the setup with the event combiner and interrupts. i just started getting the EDMA3 to work with our McBSP setup. i seem to have everything set up right as the EDMA3 will channel sort and properly links in the ping pong buffers so it seems. it runs nonstop and memory is always moving. my problem is that my call back routine only gets called once for each channel (rx and tx) and then never again.
my main channel requested like this:
uint32_t MemcpychId = EDMA3_DRV_HW_CHANNEL_EVENT_5; uint32_t tcc = EDMA3_DRV_TCC_ANY;
/* TRANSMIT */ result = EDMA3_DRV_requestChannel (hEdma, &MemcpychId, &tcc, (EDMA3_RM_EventQueue)0, &EDMAMcBSP1Txcallback, NULL);
and the link channels are requested like so:
uint32_t MemcpychIdtemp = EDMA3_DRV_LINK_CHANNEL; tcc = EDMA3_DRV_TCC_ANY;
result = EDMA3_DRV_requestChannel(hEdma, &MemcpychIdtemp, &tcc, 0, &EDMAMcBSP1Txcallback, NULL);
so they all have the same call back function. they all are initialized for TCINT
result = EDMA3_DRV_setOptField (hEdma, MemcpychId, EDMA3_DRV_OPT_FIELD_TCINTEN, EDMA3_DRV_TCINTEN_EN);
result = EDMA3_DRV_setOptField (hEdma, McBSP1TxParamTable[count], EDMA3_DRV_OPT_FIELD_TCINTEN, EDMA3_DRV_TCINTEN_EN); //inside a for loop for the link channels
this is a similar problem that i have had with the event combiner when i tried to use it directly for the McBSP RRDY and XRDY interrupts. it would fire the interrupt once and then never again. up until now the only way to handle interrupts for the McBSP has been to set up the interrupts directly in the HWI module.
my system IER is showing the proper interrupts are enabled, the GIE is enabled, my EER shows the events are enabled. my IFR is not showing anything.
is the event combiner not capable of handling interrupts like this? i know it works for basic memory copy without an issue with the EDMA3 and i have used it for other interrupts that don't fire so frequently like uart and LCD controller.
Please make sure you read the forum guidelines first.
In reply to Yordan Kovachev:
In reply to cobsonchael:
Search for answers, Ask a question, click Resolved when complete, Help others, Learn more.
In reply to RandyP:
the tcc gets cleared out of the channel when the interrupt happens, it seems. reloading it may have nothing to do with interrupt flags but it does give the channel a tcc number to handle when the transfer is complete. what i don't understand is why the tcc gets cleared upon a completed transfer.
i think you misunderstand. we never use the EDMA for mcbsp before, we used the HWI module for the RRDY and XRDY events directly. this is our first go at using the EDMA for mcbsp
thanks for the follow up Randy
i am using a ping/pong method with linked param sets. i am setting the TCC in the setup now, not the ISR. i likely wouldn't have this problem if i just did a getParam->setParam to copy the channels but since this is my first go-round with the EDMA and McBSP i kind of wanted to be explicit to get it to work first, then optimize it when it works. the only thing i am doing inside the ISR is a GetParam to see which buffer is loaded in the param so i know which way to set my pingpong variable before i issue a SWI. is there a better way to figure out ping vs pong?
All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.
TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs andembedded processors, along with software, tools and the industry’s largest sales/support staff.