Nxp Semiconductors UM10237 用户手册

下载
页码 792
UM10237_2
© NXP B.V. 2008. All rights reserved.
User manual
Rev. 02 — 19 December 2008 
379 of 792
NXP Semiconductors
UM10237
Chapter 13: LPC24XX USB device controller
If a new descriptor has to be read, the DMA engine will calculate the location of the DDP 
for this endpoint and will fetch the start address of the DD from this location. A DD start 
address at location zero is considered invalid. In this case the NDDR interrupt is raised. 
All other word-aligned addresses are considered valid.
When the DD is fetched, the DD status word (word 3) is read first and the status of the 
DD_retired bit is checked. If not set, DDP points to a valid DD. If DD_retired is set, the 
DMA engine will read the control word (word 1) of the DD.
If Next_DD_valid bit is set, the DMA engine will fetch the Next_DD_pointer field (word 0) 
of the DD and load it to the DDP. The new DDP is written to the UDCA area.
The full DD (4 words) will then be fetched from the address in the DDP. The DD will give 
the details of the DMA transfer to be done. The DMA engine will load its hardware 
resources with the information fetched from the DD (start address, DMA count etc.).
If Next_DD_valid is not set and DD_retired bit is set, the DMA engine raises the NDDR 
interrupt for this endpoint and clears the corresponding EPxx_DMA_ENABLE bit.
14.5.3 Transferring the data
For OUT endpoints, the current packet is read from the EP_RAM by the DMA Engine and 
transferred to the USB RAM memory locations starting from DMA_buffer_start_addr. For 
IN endpoints, the data is fetched from the USB RAM at DMA_buffer_start_addr and 
written to the EP_RAM. The DMA_buffer_start_addr and Present_DMA_count fields are 
updated after each packet is transferred.
14.5.4 Optimizing descriptor fetch
A DMA transfer normally involves multiple packet transfers. Hardware will not re-fetch a 
new DD from memory unless the endpoint changes. To indicate an ongoing multi-packet 
transfer, hardware sets an an internal flag called DMA_PROCEED.
The DMA_PROCEED flag is cleared after the required number of bytes specified in the 
DMA_buffer_length field is transferred. It is also cleared when the software writes into the 
USBEpDMADis register. The ability to clear the DMA_PROCEED flag allows software to 
to force the DD to be re-fetched for the next packet transfer. Writing all zeros into the 
USBEpDMADis register clears the DMA_PROCEED flag without disabling DMA operation 
for any endpoint.
14.5.5 Ending the packet transfer
On completing a packet transfer, the DMA engine writes back the DD with updated status 
information to the same memory location from where it was read. The 
DMA_buffer_start_addr, Present_DMA_count, and the DD_status fields in the DD are 
updated. 
A DD can have the following types of completion:
Normal completion - If the current packet is fully transferred and the 
Present_DMA_count field equals the DMA_buffer_length, the DD has completed 
normally. The DD will be written back to memory with DD_retired set and DD_status set 
to NormalCompletion. The EOT interrupt is raised for this endpoint.