- During the remaining very short procedure HWI are disabled to avoid interferences.
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
- During the remaining very short procedure HWI are disabled to avoid interferences.
Ok false alarm.
I had the SOFT option of McBsp0 on and this gave me wrong results after emulation halt. Once SOFT mode has been disabled all worked (at least for loop). Sorry for mistake.
I attach my working code with a first polling phase to get the McBsp sample tx start and a second phase where McBsp Tx isr (mcbsptx0isr) start Edma tx and Edma Rx with the right phase for loop (mode == 0). There is also the normal operation case with ADS8363 initialization (mode = 1, still not tested but should be fine);
EDMA_intEnable(TX0TCCINT); // Enable Edma TX0 TCC interrupt
EDMA_intEnable(RX0TCCINT); // Enable Edma RX0 TCC interrupt
EDMA_intEnable(TX1TCCINT); // Enable Edma TX1 TCC interrupt
EDMA_intEnable(RX1TCCINT); // Enable Edma RX1 TCC interrupt
IRQ_enable(IRQ_EVT_EDMAINT); // Enable Edma interrupt
int i; // auxiliary loop variable
HWI_disable(); // disable all interrupts
if(mode == 0) tx0InitFlag = 1; else tx0InitFlag = 4; // set flag for isr operation mode
// loop waiting for start of McBsp0 TX cycle
MCBSP_write(hMcbsp0, 0x0000); // write at McBSP0 DXR
for(i=0;i<10;i++);
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write(hMcbsp0, 0x0000); // write at McBSP0 DXR
for(i=0;i<10;i++);
while(!MCBSP_xrdy(hMcbsp0));
/* enable McBsp0 Tx interrupt: Edma TX0 and RX0 will be started by isr */
IRQ_enable(IRQ_EVT_XINT0);
HWI_enable();
TSK_sleep(10); // wait a bit
/* start Edma TX1 */
MCBSP_write(hMcbsp1, 0x0000); // write at McBSP1 DXR
for(i=0;i<10;i++);
while(!MCBSP_xrdy(hMcbsp1));
MCBSP_write(hMcbsp1, 0x0000); // write at McBSP1 DXR
for(i=0;i<10;i++);
while(!MCBSP_xrdy(hMcbsp1));
EDMA_enableChannel(tx1EdmaH);
/* start Edma RX1 */
MCBSP_read(hMcbsp1); // double McBsp0 read access to empty all registers
MCBSP_read(hMcbsp1);
EDMA_enableChannel(rx1EdmaH);
TSK_sleep(10); // wait initialization to complete
/* ISR */
void mcbsp0txisr() {
switch(tx0InitFlag) {
/* LOOP mode init */
case 1: MCBSP_write(hMcbsp0, 0x0000); // write 0 at DXR0 and lower XRDY
MCBSP_write(hMcbsp0, 0x0000); // write 0 at DXR0 and lower XRDY
EDMA_clearChannel(tx0EdmaH); // clear Edma TX0
EDMA_enableChannel(tx0EdmaH); // start Edma TX0
tx0InitFlag++; // prepare next step
break;
case 2: MCBSP_write(hMcbsp0, 0x0000); // write 0 at DXR0 and lower XRDY
tx0InitFlag++; // prepare next step
break;
case 3: IRQ_disable(IRQ_EVT_XINT0); // disable this interrupt
MCBSP_read(hMcbsp0); // double McBsp0 read access to empty all registers
MCBSP_read(hMcbsp0);
EDMA_clearChannel(rx0EdmaH); // start Edma TX0
EDMA_enableChannel(rx0EdmaH); // start Edma TX0
tx0InitFlag = 0; // reset sequence
break;
/* OP mode init */
case 4: MCBSP_write(hMcbsp0, 0x1020); // ads8363: remove channel indication bit
tx0InitFlag++; // prepare next step
break;
case 5: MCBSP_write(hMcbsp0, 0x1022); // ads8363: enable write to REFDAC1 on next access
tx0InitFlag++; // prepare next step
break;
case 6: MCBSP_write(hMcbsp0, 0x01ff); // ads8363: enable REFDAC1 at 2.5V
tx0InitFlag++; // prepare next step
break;
case 7: MCBSP_write(hMcbsp0, 0x1025); // ads8363: enable write to REFDAC2 on next access
tx0InitFlag++; // prepare next step
break;
case 8: MCBSP_write(hMcbsp0, 0x01ff); // ads8363: enable REFDAC2 at 2.5V
tx0InitFlag++; // prepare next step
break;
case 9: IRQ_disable(IRQ_EVT_XINT0); // disable this interrupt
MCBSP_write(hMcbsp0, 0x0000); // write 0 at DXR0 and lower XRDY
EDMA_clearChannel(tx0EdmaH); // clear Edma TX0
EDMA_enableChannel(tx0EdmaH); // start Edma TX0
MCBSP_read(hMcbsp0); // double McBsp0 read access to empty all registers
MCBSP_read(hMcbsp0);
EDMA_clearChannel(rx0EdmaH); // start Edma TX0
EDMA_enableChannel(rx0EdmaH); // start Edma TX0
tx0InitFlag = 0; // reset sequence
break;
/* DEFAULT */
default: MCBSP_write(hMcbsp0, 0x0000);
break; // write 0 at DXR0 and lower XRDY
}
}