diff --git a/src/ethernet.c b/src/ethernet.c index c0c3307..4466a3b 100644 --- a/src/ethernet.c +++ b/src/ethernet.c @@ -75,7 +75,8 @@ uint32_t Eth_pkt_send(packet_t *pPacket) volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_TX_CTRL; volatile uint32_t *pEmac_size = (uint32_t*)SYS_EMAC_TX_SIZE; volatile uint32_t *pEmac_data = (uint32_t*)SYS_EMAC_DATA; - + uint32_t *pData = (uint32_t*)pPacket->pkt_buf; + uint32_t i, num_words, num_bytes; num_bytes = pPacket->size; @@ -90,9 +91,22 @@ uint32_t Eth_pkt_send(packet_t *pPacket) if (num_bytes & 3) num_words++; + while(num_words >= 8) + { + *pEmac_data = pData[i+0]; + *pEmac_data = pData[i+1]; + *pEmac_data = pData[i+2]; + *pEmac_data = pData[i+3]; + *pEmac_data = pData[i+4]; + *pEmac_data = pData[i+5]; + *pEmac_data = pData[i+6]; + *pEmac_data = pData[i+7]; + i += 8; + num_words -= 8; + } for (i=0; i < num_words; i++) { - *pEmac_data = ((uint32_t*)pPacket->pkt_buf)[i]; + *pEmac_data = pData[i]; } EMAC_TX_commit(); diff --git a/src/test_gpio.c b/src/test_gpio.c index 1cafe72..3646813 100644 --- a/src/test_gpio.c +++ b/src/test_gpio.c @@ -200,7 +200,7 @@ int main() volatile uint32_t *pEmac_data = (uint32_t*)SYS_EMAC_DATA_CACHED; volatile uint32_t *pEmac_maddr = (uint32_t*)SYS_EMAC_MADDR; volatile uint8_t *pEmac_maddr8 = (uint8_t*)SYS_EMAC_MADDR; - uint8_t buffer[2048], data[1024]; + uint8_t buffer[2048], data[1460]; packet_t packet; ARP *pARP; IPV4 *pIPV4; @@ -385,10 +385,10 @@ int main() */ start = clock(); + Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, eth_bcst); + UDP_create(&packet, myIP, 10001, arpIpDst, 10002, data, sizeof(data)); for (j=0; j < 10000; j++) { - Eth_pkt_create(&packet, TYPE_PROTO_IP, eth_myself, eth_bcst); - UDP_create(&packet, myIP, 10001, arpIpDst, 10002, data, sizeof(data)); size = Eth_pkt_send(&packet); tx_byte_cnt += size; tx_pkt_cnt++;