Hi.
I got a problem about McBSP & EDMA debugging in silicon real-time mode in ccs.
I want to see infinite EDMA loop (same Param2) and ISR function call using TCC & Event Trigger (by EDMA Int8)
But It works just one time (ISR function called only one time).
Please let me know how can I solve it.
here is my EDMA & ISR function code.
// ======================================================
// EDMA function
// ======================================================
void EDMA_Initial(void){
EMCR = 0xFFFFFFFF; // Event missed clear register
QEMCR = 0xFFFFFFFF; // QDMA Event missed clear register
CCERRCLR = 0xFFFFFFFF; // Error clear register
DRAE1 = 0x00000004; // Enable DMA Channel to Shadow region
DMAQNUM0 |= (0 << 8); // E2 in queued on Q0
CCSTAT = 0x00000000; // Status register clear
ECR1 = 0xFFFFFFFF; // Event clear register
EECR1 = 0xFFFFFFFF; // Event enable clear register
SECR1 = 0xFFFFFFFF; // Secondary event clear register
USTIMER_delay(5);
OPT2 = (0 << 23 | // ITCCHEN Intermediate transfer completion chaining enable
0 << 22 | // TCCHEN Transfer complete chaining is enabled
0 << 21 | // ITCINTEN Intermediate transfer completion interrupt is enable
1 << 20 | // TCINTEN Transfer complete interrupt enable
2 << 12 | // TCC Transfer complete code (channel 2)
0 << 11 | // TCCMODE Normal completion
0 << 2 ); // SYNCDIM A-synchronized
SRC2 = 0x01D10000; // Channel source address (McBSP DRR)
A_B_CNT2 = ((range_num*scan_num) << 16 | // BCNT number of arrays in 1 frame
4 << 0 ); // ACNT bytes in array / 1st dimension
DST2 = (uint32_t)tempRX;
SRC_DST_BIDX2 = (4 << 16 | // Destination B index = same ACNT
0 << 0 ); // Source B index
LINK_BCNTRLD2 = (0 << 16 | // B count reload
65535 << 0 ); // Link address (null)
SRC_DST_CIDX2 = (0 << 16 | // Destination C index
0 << 0 ); // Source C index
CCNT2 = (0 << 16 | // reserve
1 << 0 ); // C counter number of frames
EESR1 = 0x00000004; // channel & param 2
IESR1 = 0x00000004; // Interrupt Enable Set Register (channel 2)
}
// ======================================================
// ISR function
// ======================================================
interrupt void EDMA_ISR(void)
{
printf(" EDMA_ISR test START !!!!!! \n");
ICR1 = 0x00000004; // Interrupt Clear Register
}
Thanks.
Woo.