Hi FB
I don't see the control field initialisation values, which are a possible cause of problems.
Here is a code for the RX buffer descriptor initialisation from the uTasker project - it is identical for the M5223x and M5225x. Maybe you see something(?)
EMRBR = pars->usSizeRx; // set receive buffer size
ptrRxBd = ptrBD = (M5223X_FEC_BD *)uMallocAlign((MAX_MALLOC)(sizeof(M5223X_FEC_BD)*NUMBER_OF_RX_BUFFERS_IN_ETHERNET_DEVICE), 16); // define memory for rx buffer descriptors (aligned on 16 byte boundary)
ERDSR = (unsigned long)ptrBD; // set pointer to receive descriptor ring
ptrBuffer = (unsigned char *)uMallocAlign((MAX_MALLOC)(pars->usSizeRx*NUMBER_OF_RX_BUFFERS_IN_ETHERNET_DEVICE), 16); // get rx buffer memory
for (i = 0; i < NUMBER_OF_RX_BUFFERS_IN_ETHERNET_DEVICE; i++) { // initialise each Rx buffer descriptor
if (i == (NUMBER_OF_RX_BUFFERS_IN_ETHERNET_DEVICE - 1)) {
ptrBD->usBDControl = (EMPTY_BUFFER | WRAP_BIT);
}
else {
ptrBD->usBDControl = EMPTY_BUFFER;
}
ptrBD->ptrBD_Data = ptrBuffer;
ptrBuffer += pars->usSizeRx;
ptrBD++;
}
Regards
Mark
www.uTasker.com
- OS, TCP/IP stack, USB, device drivers and simulator for M521X, M521XX, M5221X, M5222X, M5223X, M5225X. One package does them all - "Embedding it better..."