[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:
+15
-1
@@ -75,6 +75,7 @@ uint32_t Eth_pkt_send(packet_t *pPacket)
|
|||||||
volatile uint32_t *pEmac_ctrl = (uint32_t*)SYS_EMAC_TX_CTRL;
|
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_size = (uint32_t*)SYS_EMAC_TX_SIZE;
|
||||||
volatile uint32_t *pEmac_data = (uint32_t*)SYS_EMAC_DATA;
|
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;
|
uint32_t i, num_words, num_bytes;
|
||||||
|
|
||||||
@@ -90,9 +91,22 @@ uint32_t Eth_pkt_send(packet_t *pPacket)
|
|||||||
if (num_bytes & 3)
|
if (num_bytes & 3)
|
||||||
num_words++;
|
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++)
|
for (i=0; i < num_words; i++)
|
||||||
{
|
{
|
||||||
*pEmac_data = ((uint32_t*)pPacket->pkt_buf)[i];
|
*pEmac_data = pData[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
EMAC_TX_commit();
|
EMAC_TX_commit();
|
||||||
|
|||||||
+3
-3
@@ -200,7 +200,7 @@ int main()
|
|||||||
volatile uint32_t *pEmac_data = (uint32_t*)SYS_EMAC_DATA_CACHED;
|
volatile uint32_t *pEmac_data = (uint32_t*)SYS_EMAC_DATA_CACHED;
|
||||||
volatile uint32_t *pEmac_maddr = (uint32_t*)SYS_EMAC_MADDR;
|
volatile uint32_t *pEmac_maddr = (uint32_t*)SYS_EMAC_MADDR;
|
||||||
volatile uint8_t *pEmac_maddr8 = (uint8_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;
|
packet_t packet;
|
||||||
ARP *pARP;
|
ARP *pARP;
|
||||||
IPV4 *pIPV4;
|
IPV4 *pIPV4;
|
||||||
@@ -385,10 +385,10 @@ int main()
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
start = clock();
|
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++)
|
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);
|
size = Eth_pkt_send(&packet);
|
||||||
tx_byte_cnt += size;
|
tx_byte_cnt += size;
|
||||||
tx_pkt_cnt++;
|
tx_pkt_cnt++;
|
||||||
|
|||||||
Reference in New Issue
Block a user