[Ethernet]

- optimize packet transfer to EMAC

[Test_GPIO]
- only create packet once too speed up burst TX

git-svn-id: http://moon:8086/svn/mips@64 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
2015-12-13 18:07:51 +00:00
parent 55d383181b
commit 5c62994932
2 changed files with 19 additions and 5 deletions
+16 -2
View File
@@ -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();
+3 -3
View File
@@ -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++;