Design background:
A Master DSP (TMS320c6711D) is configured to collect data from two slave DSPs (TMS320c6711D) on McBSP at 2.17MHz clock rate. Master DSP is generating clock and frame sync for the communication. EDMA is linked to McBSP receive.
EDMA Interrupt code is as below...
-----------------------------------------------------------------------------------------------------------------------
interrupt void edma_ISR()
{
/* change the ping pong buffer by checking address of buffer in use. take the alternate one */
if (*((volatile unsigned int *) (EVENTD_PARAMS + DST)) <
(unsigned int) &mcbsp_rcv_buffer[PONG])
available_rcv_buf = 1;
else
available_rcv_buf = 0;
/* reset the interrupt */
*(volatile unsigned int *)(CIPR) = 0x00002000;
/* process the data*/
get_source_data();
mcbsp0_rcv_complete = 1;
}
----------------------------------------------------------------------------------------------
EDMA Configuration is as below..............
void edma_init()
{
available_rcv_buf = PONG;
/* EDMA MAIN CHANNEL for Mcbsp transmit main channel */
*((unsigned int *) (EVENTD_PARAMS + OPT)) = 0x303D0002;
*((unsigned int *) (EVENTD_PARAMS + SRC)) = McBSP0_DRR;
*((unsigned int *) (EVENTD_PARAMS + CNT)) = 30;
*((unsigned int *) (EVENTD_PARAMS + DST)) = (unsigned int)&mcbsp_rcv_buffer[PING];
*((unsigned int *) (EVENTD_PARAMS + IDX)) = 0;
*((unsigned int *) (EVENTD_PARAMS + LNK)) = (EVENTN_PARAMS & 0xffff) ;
/* EDMA RELOAD CHANNEL for Mcbsp receive (PONG) */
*((unsigned int *) (EVENTN_PARAMS + OPT)) = 0x303D0002;
*((unsigned int *) (EVENTN_PARAMS + SRC)) = McBSP0_DRR;
*((unsigned int *) (EVENTN_PARAMS + CNT)) = 30;
*((unsigned int *) (EVENTN_PARAMS + DST)) = (unsigned int) &mcbsp_rcv_buffer[PONG];
*((unsigned int *) (EVENTN_PARAMS + IDX)) = 0;
*((unsigned int *) (EVENTN_PARAMS + LNK)) = (EVENTO_PARAMS & 0xffff) ;
/* EDMA RELOAD CHANNEL for Mcbsp receive (PING) */
*((unsigned int *) (EVENTO_PARAMS + OPT)) = 0x303D0002;
*((unsigned int *) (EVENTO_PARAMS + SRC)) = McBSP0_DRR;
*((unsigned int *) (EVENTO_PARAMS + CNT)) = 30;
*((unsigned int *) (EVENTO_PARAMS + DST)) = (unsigned int) &mcbsp_rcv_buffer[PING];
*((unsigned int *) (EVENTO_PARAMS + IDX)) = 0;
*((unsigned int *) (EVENTO_PARAMS + LNK)) = (EVENTN_PARAMS & 0xffff) ;
*((unsigned int *) EER) = 0x00002000; /* enable event 13 &14 McBSP0 Rcv */
*((unsigned int *) CIER)= 0x00002000; /* enable interrupt 13 & 14 */
}
-----------------------------------------------------------------------------------------------------
Problem Symptoms seen from field:
After the unit ran for some months.. EDMA interrupts stopped occuring.
------------------------------------------------------
Question and request for clues:
Is it possible that EDMA Interrupts stop happening in this Master DSP. If so what can lead to it.
Any clues would be highly helpful.