Я отправляю на хост небольшими пакетами, не больше 55 байт, поэтому использую только один банк UDP. Основная задача, максимально уменьшить время работы с UDP, то есть мне необходимо записать в FIFO пакет данных, запустить UDP и больше не задерживаться с UDP. Прерывания UDP включены только для ЕР0. То есть, если при подготовки следующего пакета для передачи, UDP не готов, то передача этого пакета хосту пропускается (протокол допускает потерю данных) исходя из этих условий я составил следующую функцию записи в UDP:
Код
__ramfunc static uint AT91F_UDP_Write(AT91PS_CDC pCdc, u8 *pData, uint txlength)// Send through endpoint 2
{
AT91PS_UDP pUDP = pCdc->pUdp;
uint cpt = 0;
//Если FIFO свободна, то производим запись, нет
if(!(pUDP->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXPKTRDY))
{
pUDP->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
cpt = txlength;
while (cpt--) pUDP->UDP_FDR[AT91C_EP_IN] = *pData++;
pUDP->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
}
return txlength;
}
действительно ли такая функйия будет пропускать пакеты, в случае занятого буфера? или есть варианты более скоростной передачи по усб?