10.3.5.8 Transfer Without DMA
Important: If the DMA is not to be used, it is necessary to disable it, otherwise it
can be enabled by previous versions of software without warning. If this should occur, the DMA
can process data before an interrupt without knowledge of the user.
The recommended means to disable DMA are 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<=((BASE_UDPHS->UDPHS_IPFEATURES &
UDPHS_DMA_CHANNEL_NBR)>>4); 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;
}