31.7.1.8 Receiving Frames
When a frame is received and the receive circuits are enabled, the ETH checks the address and, in the following cases, the frame is written to system memory:
- If it matches one of the four Specific Address registers
- If it matches one of the four type ID registers
- If it matches the hash address function
- If it is a broadcast address (0xFFFFFFFFFFFF) and broadcasts are allowed
- If the ETH is configured to “copy all frames”
The register receive buffer queue pointer points to the next entry in the receive buffer descriptor list and the ETH uses this as the address in system memory to write the frame to.
Once the frame has been completely and successfully received and written to system memory, the ETH then updates the receive buffer descriptor entry (see Receive Buffer Description Entry) with the reason for the address match and marks the area as being owned by software. Once this is complete, a receive complete interrupt is set. Software is then responsible for copying the data to the application area and releasing the buffer (by writing the ownership bit back to 0).
If the ETH is unable to write the data at a rate to match the incoming frame, then a receive overrun interrupt is set. If there is no receive buffer available, i.e., the next buffer is still owned by software, a receive buffer not available interrupt is set. If the frame is not successfully received, a statistics register is incremented and the frame is discarded without informing software.