LPC23xx Ethernet Transmit

Started by kurt_sterckx December 28, 2006
I am currently experimenting with LPC2368 Ethernet features using
the MCB2300 board from Keil. For the testing I use a polling method
to transmit messages. I have setup the ethernet and PHY accordingly
to the Keil and InterNiche examples(are almost the same). I have
setup 4 packet buffers each with there own descriptor and status in
the ethernet ram). The application puts some data in the packet,
updates the control word of the descriptor and increments
TXPRODUCEINDEX to transmit the message.

It works fine if I set both LAST and Interrupt bits in the
Transmiter Descriptor Control word.

It also works if I set only the Interrupt bit in the Transmiter
Descriptor Control word, but it generates a underrun error, like I
expected (I only give one packet).

It won't work if I only set the LAST bit. The TXConsumeIndex won't
be updated, and no status info will be written. The Done bit in TSV0
get set, but none of the bits in IntStatus. The TxStatus bit in
Status will also be 1 (meaning transmission is still busy).
The TXConsumeIndex is incremented from the moment I send a next
packet (ignoring the fact that the previous one is still busy). I
can keep sending packets this way.

I don't use interrupts, so I didn't activate them.

Can't it be that the Ethernet control only updates TxConsumeIndex
after transmitting a packet when the Interrupt bit in the Transmiter
Descriptor Control word is set ?

Has anyone with experience of the LPC23xx confirm this ?

Regards,

Kurt

An Engineer's Guide to the LPC2100 Series

Hello Kurt,

I had the same problem on a LPC2387 and your solution worked!
Thanks a lot!

Best wishes,
Frederico
--- In l..., "kurt_sterckx" wrote:
>
> I am currently experimenting with LPC2368 Ethernet features using
> the MCB2300 board from Keil. For the testing I use a polling method
> to transmit messages. I have setup the ethernet and PHY accordingly
> to the Keil and InterNiche examples(are almost the same). I have
> setup 4 packet buffers each with there own descriptor and status in
> the ethernet ram). The application puts some data in the packet,
> updates the control word of the descriptor and increments
> TXPRODUCEINDEX to transmit the message.
>
> It works fine if I set both LAST and Interrupt bits in the
> Transmiter Descriptor Control word.
>
> It also works if I set only the Interrupt bit in the Transmiter
> Descriptor Control word, but it generates a underrun error, like I
> expected (I only give one packet).
>
> It won't work if I only set the LAST bit. The TXConsumeIndex won't
> be updated, and no status info will be written. The Done bit in TSV0
> get set, but none of the bits in IntStatus. The TxStatus bit in
> Status will also be 1 (meaning transmission is still busy).
> The TXConsumeIndex is incremented from the moment I send a next
> packet (ignoring the fact that the previous one is still busy). I
> can keep sending packets this way.
>
> I don't use interrupts, so I didn't activate them.
>
> Can't it be that the Ethernet control only updates TxConsumeIndex
> after transmitting a packet when the Interrupt bit in the Transmiter
> Descriptor Control word is set ?
>
> Has anyone with experience of the LPC23xx confirm this ?
>
> Regards,
>
> Kurt
>