72.24 UDPHS DMA Channel Control Register
Channel 0 is not used.
Bits [31:2] are only writable when issuing a channel Control Command other than “Stop Now”.
For reliability it is highly recommended to wait for both UDPHS_DMASTATUS.CHAN_ACT and CHAN_ENB flags at 0, thus ensuring the channel has been stopped before issuing a command other than “Stop Now”.
Name: | UDPHS_DMACONTROLx |
Offset: | 0x0318 + (x-1)*0x10 [x=1..7] |
Reset: | 0x00000000 |
Property: | Read/Write |
Bit | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | |
BUFF_LENGTH[15:8] | |||||||||
Access | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Reset | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | |
BUFF_LENGTH[7:0] | |||||||||
Access | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Reset | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
Access | |||||||||
Reset |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
BURST_LCK | DESC_LD_IT | END_BUFFIT | END_TR_IT | END_B_EN | END_TR_EN | LDNXT_DSC | CHANN_ENB | ||
Access | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Reset | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 31:16 – BUFF_LENGTH[15:0] Buffer Byte Length (Write-only)
This field determines the number of bytes to be transferred until end of buffer. The maximum channel transfer size (64 Kbytes) is reached when this field is 0 (default value). If the transfer size is unknown, this field should be set to 0, but the transfer end may occur earlier under UDPHS device control.
When this field is written, the UDPHS_DMASTATUS.BUFF_COUNT field is updated with the write value.
Bit 7 – BURST_LCK Burst Lock Enable
Value | Description |
---|---|
0 | The DMA never locks bus access. |
1 | USB packets system data bursts are locked for maximum optimization of the bus bandwidth usage and maximization of fly-by system bus burst duration. |
Bit 6 – DESC_LD_IT Descriptor Loaded Interrupt Enable
Value | Description |
---|---|
0 | UDPHS_DMASTATUS.DESC_LDST rising will not trigger any interrupt. |
1 | An interrupt is generated when a descriptor has been loaded from the bus. |
Bit 5 – END_BUFFIT End of Buffer Interrupt Enable
Value | Description |
---|---|
0 | UDPHS_DMASTATUS.END_BF_ST rising will not trigger any interrupt. |
1 | An interrupt is generated when the UDPHS_DMASTATUS.BUFF_COUNT reaches zero. |
Bit 4 – END_TR_IT End of Transfer Interrupt Enable
Value | Description |
---|---|
0 | UDPHS device initiated buffer transfer completion will not trigger any interrupt at UDPHS_STATUS.END_TR_ST rising. |
1 | An interrupt is sent after the buffer transfer is complete, if the UDPHS device has ended the buffer transfer. Use when the receive size is unknown. |
Bit 3 – END_B_EN End of Buffer Enable (Control)
Value | Description |
---|---|
0 | DMA Buffer End has no impact on USB packet transfer. |
1 | Endpoint can validate the packet (according to the values programmed in the UDPHS_EPTCTL.AUTO_VALID and SHRT_PCKT fields) at DMA Buffer End, i.e., when the UDPHS_DMASTATUS.BUFF_COUNT reaches 0. This is mainly for short packet IN validation initiated by the DMA reaching end of buffer, but could be used for OUT packet truncation (discarding of unwanted packet data) at the end of DMA buffer. |
Bit 2 – END_TR_EN End of Transfer Enable (Control)
Used for OUT transfers only.
Value | Description |
---|---|
0 | USB end of transfer is ignored. |
1 | UDPHS device can put an end to the current buffer transfer. When set, a BULK or INTERRUPT short packet or the last packet of an ISOCHRONOUS (micro) frame (DATAX) will close the current buffer and the UDPHS_DMASTATUS.END_TR_ST flag will be raised. This is intended for UDPHS non-prenegotiated end of transfer (BULK or INTERRUPT) or ISOCHRONOUS microframe data buffer closure. |
Bit 1 – LDNXT_DSC Load Next Channel Transfer Descriptor Enable (Command)
If the CHANN_ENB bit is cleared, the next descriptor is immediately loaded upon transfer request.
LDNXT_DSC | CHANN_ENB | Description |
---|---|---|
0 | 0 | Stop now |
0 | 1 | Run and stop at end of buffer |
1 | 0 | Load next descriptor now |
1 | 1 | Run and link at end of buffer |
Value | Description |
---|---|
0 | No channel register is loaded after the end of the channel transfer. |
1 | The channel controller loads the next descriptor after the end of the current transfer, i.e., when the UDPHS_DMASTATUS.CHANN_ENB bit is reset. |
Bit 0 – CHANN_ENB (Channel Enable Command)
Value | Description |
---|---|
0 | DMA channel is disabled at and no transfer will occur upon request. This bit is also cleared by hardware when the channel source bus is disabled at end of buffer. If the UDPHS_DMACONTROL.LDNXT_DSC bit has been cleared by descriptor loading, the firmware will have to set the corresponding CHANN_ENB bit to start the described transfer, if needed. If the LDNXT_DSC bit is cleared, the channel is frozen and the channel registers may then be read and/or written reliably as soon as both UDPHS_DMASTATUS.CHANN_ENB and CHANN_ACT flags read as 0. If a channel request is currently serviced when this bit is cleared, the DMA FIFO buffer is drained until it is empty, then the UDPHS_DMASTATUS.CHANN_ENB bit is cleared. If the LDNXT_DSC bit is set at or after this bit clearing, then the currently loaded descriptor is skipped (no data transfer occurs) and the next descriptor is immediately loaded. |
1 | The UDPHS_DMASTATUS.CHANN_ENB bit will be set, thus enabling DMA channel data transfer. Then, any pending request will start the transfer. This may be used to start or resume any requested transfer. |