10.3.5.8 Transfer Without DMA
Important: When not used, the DMA should be disabled to make
sure it cannot be left enabled by a previous USB transfer session. If this occurred, the DMA
could process data before an interrupt without the user’s knowledge.
The recommended procedure to disable the DMA is as follows:
// Reset IP UDPHS
BASE_UDPHS->UDPHS_CTRL &= ~UDPHS_EN_UDPHS;
BASE_UDPHS->UDPHS_CTRL |= UDPHS_EN_UDPHS;//
With OR without DMA !!!
for( i=1; i<=DMA_CHANNEL_NBR); i++ )
// RESET endpoint canal DMA:
// DMA stop channel command
BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMACONTROL = 0; // STOP
command
// Disable endpoint
BASE_UDPHS->UDPHS_EPT[i].UDPHS_EPTCTLDIS |= 0XFFFFFFFF;
// Reset endpoint config
BASE_UDPHS->UDPHS_EPT[i].UDPHS_EPTCTLCFG = 0;
// Reset DMA channel (Buff count and Control field)
BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMACONTROL = 0x02; // NON
STOP command
// Reset DMA channel 0 (STOP)
BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMACONTROL = 0; // STOP
command
// Clear DMA channel status (read the register for clear it)
BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMASTATUS =
BASE_UDPHS->UDPHS_DMA[i].UDPHS_DMASTATUS;
}