Ethernet (ETH): media access control (MAC) with DMA controller RM0090
947/1422 Doc ID 018909 Rev 4
then the DMA marks the first transfer from the buffer as the start of frame. If a descriptor is 
marked as last (LS bit in TDES0), then the DMA marks the last transfer from that data buffer 
as the end of frame. The receive DMA transfers data to a buffer until the buffer is full or the 
end of frame is received. If a descriptor is not marked as last (LS bit in RDES0), then the 
buffer(s) that correspond to the descriptor are full and the amount of valid data in a buffer is 
accurately indicated by the buffer size field minus the data buffer pointer offset when the 
descriptor’s FS bit is set. The offset is zero when the data buffer pointer is aligned to the 
databus width. If a descriptor is marked as last, then the buffer may not be full (as indicated 
by the buffer size in RDES1). To compute the amount of valid data in this final buffer, the 
driver must read the frame length (FL bits in RDES0[29:16]) and subtract the sum of the 
buffer sizes of the preceding buffers in this frame. The receive DMA always transfers the 
start of next frame with a new descriptor.
Note: Even when the start address of a receive buffer is not aligned to the system databus width 
the system should allocate a receive buffer of a size aligned to the system bus width. For 
example, if the system allocates a 1024 byte (1 KB) receive buffer starting from address 
0x1000, the software can program the buffer start address in the receive descriptor to have 
a 0x1002 offset. The receive DMA writes the frame to this buffer with dummy data in the first 
two locations (0x1000 and 0x1001). The actual frame is written from location 0x1002. Thus, 
the actual useful space in this buffer is 1022 bytes, even though the buffer size is 
programmed as 1024 bytes, due to the start address offset.
29.6.5 DMA arbiter
The arbiter inside the DMA takes care of the arbitration between transmit and receive 
channel accesses to the AHB master interface. Two types of arbitrations are possible: 
round-robin, and fixed-priority. When round-robin arbitration is selected (DA bit in 
ETH_DMABMR is reset), the arbiter allocates the databus in the ratio set by the PM bits in 
ETH_DMABMR, when both transmit and receive DMAs request access simultaneously. 
When the DA bit is set, the receive DMA always gets priority over the transmit DMA for data 
access.
29.6.6  Error response to DMA
For any data transfer initiated by a DMA channel, if the slave replies with an error response, 
that DMA stops all operations and updates the error bits and the fatal bus error bit in the 
Status register (ETH_DMASR register). That DMA controller can resume operation only 
after soft- or hard-resetting the peripheral and re-initializing the DMA.
29.6.7 Tx DMA configuration
TxDMA operation: default (non-OSF) mode
The transmit DMA engine in default mode proceeds as follows:
1. The user sets up the transmit descriptor (TDES0-TDES3) and sets the OWN bit 
(TDES0[31]) after setting up the corresponding data buffer(s) with Ethernet frame data.
2.  Once the ST bit (ETH_DMAOMR register[13]) is set, the DMA enters the Run state.
3.  While in the Run state, the DMA polls the transmit descriptor list for frames requiring 
transmission. After polling starts, it continues in either sequential descriptor ring order 
or chained order. If the DMA detects a descriptor flagged as owned by the CPU, or if an 
error condition occurs, transmission is suspended and both the Transmit Buffer