Цитата(aaarrr @ Oct 3 2007, 18:15)

TXCOMP нужно снимать после установки TXPKTRDY. Обращайте внимание на сноски Warning в DS.
вот, переписал как советовали, прогоните у себя ,пожалуйста
while(1)
{
value++;
*AT91C_UDP_CSR |= 0x8000;
while(!(*AT91C_UDP_CSR & 0x4));
len = ((*AT91C_UDP_CSR) >> 16) & 0xFFFF;
for (i = 0; i < len; i++)
{
buf[value][i] = *AT91C_UDP_FDR;
}
/***************************************************************/
/***************************************************************/
*AT91C_UDP_CSR |= 0x80; //set DIR
while(!(*AT91C_UDP_CSR & 0x80));// wait
*AT91C_UDP_CSR &= 0xFFFFFFFB; //clear RXSETUP
while((*AT91C_UDP_CSR & 0x04));// wait
////////////////////////////////////
for(i = 0; i < 8; i++)
{
*AT91C_UDP_FDR = *(point++);
}
*AT91C_UDP_CSR |= 0x10; //set TXPKTRDY
while(!(*AT91C_UDP_CSR & 0x10));// wait
*AT91C_UDP_CSR &= 0xFFFFFFFE;//clear TXCOMP
while((*AT91C_UDP_CSR & 0x04));// wait
//////////////////////////////
while(!(*AT91C_UDP_CSR & 0x1));//// *AT91C_UDP_CSR &= 0xFFFFFFFE;
for(i = 0; i < 8; i++)
{
*AT91C_UDP_FDR = *(point++);
}
*AT91C_UDP_CSR |= 0x80; //set DIR
while(!(*AT91C_UDP_CSR & 0x80));// wait
*AT91C_UDP_CSR |= 0x10;//set TXPKTRDY
while(!(*AT91C_UDP_CSR & 0x10));// wait
*AT91C_UDP_CSR &= 0xFFFFFFFE;//clear TXCOMP
while((*AT91C_UDP_CSR & 0x04));// wait
//////////////////////////////
while(!(*AT91C_UDP_CSR & 0x1));// wait finish send <---------- вот здесь зависает !!!!!
for(i = 0; i < 2; i++)
{
*AT91C_UDP_FDR = *(point++);
}
*AT91C_UDP_CSR |= 0x80; //set DIR
while(!(*AT91C_UDP_CSR & 0x80));// wait
*AT91C_UDP_CSR |= 0x10;//set TXPKTRDY
while(!(*AT91C_UDP_CSR & 0x10));// wait
*AT91C_UDP_CSR &= 0xFFFFFFFE;//clear TXCOMP
while((*AT91C_UDP_CSR & 0x04));// wait
while(!(*AT91C_UDP_CSR & 0x1));// wait finish send
*AT91C_UDP_CSR &= 0xFFFFFFFE;
}