| Example |
void send_frame (OS_FRAME *frame) {
/* Send frame to EMAC ethernet controller */
U32 idx,len;
U32 *sp,*dp;
idx = MAC_TXPRODUCEINDEX;
sp = (U32 *)&frame->data[0];
dp = (U32 *)Tx_Desc[idx].Packet;
/* Copy frame data to EMAC packet buffers. */
for (len = (frame->length + 3) >> 2; len; len--) {
*dp++ = *sp++;
}
Tx_Desc[idx].Ctrl = (frame->length-1) | (TCTRL_INT | TCTRL_LAST);
/* Start frame transmission. */
if (++idx == NUM_TX_FRAG) idx = 0;
MAC_TXPRODUCEINDEX = idx;
}
|