I am using an ADSP-21479 with SPORT 1 configured for receive using DMA:
SPCTL1 = SLEN32 | FSR | BHD | CKRE | SPEN_A | SDEN_A;
When the DMA completes an interrupt occurs as expected. Inside the interrupt, I was expecting to be able to disable the DMA and the SPORT, reconfigure the DMA registers, then re-enable the SPORT and the DMA as follows:
SPCTL1 &= ~(SPEN_A | SDEN_A);
CSP1A = HIGH_SPEED_SPORT_BUF_LEN;
IISP1A = (unsigned int) uiaHighSpeedRxBuffer;
IMSP1A = 1;
CPSP1A = 0;
SPCTL1 |= (SPEN_A | SDEN_A);
The above code however did not work. I got the first interrupt but never got any new ones.
When I changed the last line such that the entire control register was configured again as follows:
SPCTL1 |= (SLEN32 | FSR | BHD | CKRE | SPEN_A | SDEN_A);
I would continue to get interrupts.
Is there any particular reason as to why the control register has to be completely reset?