Ниже приведен кусок основного цикла программы, отвечающий за формирование и отправку данных через UDP. При приеме данных на хост периодически теряются пакеты (60 байт), а то и по несколько пакетов за раз. Количество потерь возрастает, если подключать девайс к более слабой машине.
Код
while(1)
{
if(recA_1) //если 32-битное слово готово к отправке на хост
{
if(!(regUDP->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXPKTRDY)) //если свободен буфер UDP
{
unsigned int crc = 0;
unsigned int by = recA_1;
for(unsigned int ib=0;ib<32;ib++) //Подсчет бита четности
{
crc = crc^(by&0x1);
by >>=1;
}
if(crc)
{
unsigned int rec = recA_1;
regUDP->UDP_FDR[AT91C_EP_IN] = 11; //командное слово
regUDP->UDP_FDR[AT91C_EP_IN] = rec&0xff; //Разбивка 32-битного передаваемого слова на байты
unsigned int m_stat = rec>>8;
regUDP->UDP_FDR[AT91C_EP_IN] = m_stat&0xff;
m_stat = rec>>16;
regUDP->UDP_FDR[AT91C_EP_IN] = m_stat&0xff;
m_stat = rec>>24;
regUDP->UDP_FDR[AT91C_EP_IN] = m_stat&0xff;
kA--; // счетчик записанных слов в FIFO UDP
}// if(rcrc1)
}
recA_1 = 0;
if(kA==0) //Если FIFO заполнен (12 слов по 5 байт, 60 байт)
{
regUDP->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
regUDP->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
kA=12;
}
}
}//while(1)
Почему потеря при приеме хостом идет пакетами? Как пользоваться 2-мя банками при передачи на хост?