UM10503
All information provided in this document is subject to legal disclaimers.
© NXP B.V. 2012. All rights reserved.
User manual
Rev. 1.3 — 6 July 2012
577 of 1269
NXP Semiconductors
UM10503
Chapter 23: LPC43xx USB0 Host/Device/OTG controller
23.10.11.2 Building a transfer descriptor
Before a transfer can be executed from the linked list, a dTD must be built to describe the
transfer. Use the following procedure for building dTDs:
Allocate 8-DWord dTD block of memory aligned to 8-DWord boundaries. Example: bit
address 4:0 would be equal to “00000”.
Write the following fields:
1. Initialize first 7 DWords to 0.
2. Set the terminate bit to “1”.
3. Fill in total bytes with transfer size.
4. Set the interrupt on complete if desired.
5. Initialize the status field with the active bit set to “1” and all remaining status bits set to
“0”.
6. Fill in buffer pointer page 0 and the current offset to point to the start of the data buffer.
7. Initialize buffer pointer page 1 through page 4 to be one greater than each of the
previous buffer pointers.
23.10.11.3 Executing a transfer descriptor
To safely add a dTD, the DCD must follow this procedure which will handle the event
where the device controller reaches the end of the dTD list at the same time a new dTD is
being added to the end of the list.
Determine whether the linked list is empty: Check DCD driver to see if pipe is empty
(internal representation of linked list should indicate if any packets are outstanding).
Linked list is empty
1. Write dQH next pointer AND dQH terminate bit to 0 as a single DWord operation.
2. Clear active and halt bits in dQH (in case set from a previous error).
Fig 59. Software link pointers
Head Pointer
Tail Pointer
current
next
Endpoint
QH
completed dTDs
queued dTDs