I am currently developing ethernet drivers for the evaluation board MPC8569E-MDS-PB. I have managed to have it working and sending frames to the network, which I can see on my computer using Wireshark, so that I know for sure that it is sending them. I am disabling both caches in order to not have any problems between the MURAM in QUICC Engine and the RAM of the evaluation target. However, all this only works when I run the program step by step AND when I am checking in the debugger the memory where the buffer descriptors are. I can see that the buffer is written, then the buffer descriptor is filled with the appropriate values and the frame is sent.
The problem comes when I try to let the processor run free sending frames every certain intervals of time. If for example I have a while(1) loop in main() that simply sends a frame every X seconds and I have it running free, no frames are sent into the network at all. However, when I halt the processor in the debugger and read the memory where the buffer descriptors are, at that exact moment all of the frames that should have been sent while executing normally are suddenly sent all at once. The frames are not sent unless the processor is halted and the where the buffer descriptors are placed is read. This makes it impossible to debug a TCP/IP stack, since the reception and transmission of frames is only done everytime the processor is halted.
All this doesn't happen with other drivers; for example, I have the UART configured and, while the processor is running free, I can communicate with it and have it transmit and receive using interrupts without any problem at all. This makes me think that the problem might be with the relation between the MURAM and the RAM where the buffer descriptors and buffers are placed.
Any idea as to why this might be happening would be appreciated. I am using debugger and probe from Green Hills, but I don't think that has any relation with the matter.