Вот функция которая записывает в конечную точку байты.:
CODE
//-------------------------------------------------------------------------------
DWORD end_point_write(DWORD EP, BYTE dat[], DWORD len) {
DWORD n;
/* */
EP &= 0x0F;
/* */
if (AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXPKTRDY) {
if ((DualBankEP & (1 << EP)) && (TxDataBank[EP] == 0)) {
TxDataBank[EP] = 1;
} else {
return 0;
}
}//end if AT91C_UDP_TXPKTRDY
for (n = 0; n < len; n++){
AT91C_BASE_UDP->UDP_FDR[EP] = dat[n];
}
AT91C_BASE_UDP->UDP_CSR[EP] |= AT91C_UDP_TXPKTRDY;
while(!(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_TXCOMP));
AT91C_BASE_UDP->UDP_CSR[EP] &= ~AT91C_UDP_TXCOMP;
return len;
}
//-------------------------------------------------------------------------------
сначала здесь записываются в буфер конечной точки байты , после устанавливается флаг окончания записи,
далеше в цикле while ожидаю когда хост подтвердит получение байт, установкой флага AT91C_UDP_TXCOMP,
а если этого не произойдет, то программа зависнет в этом месте.
Как получше это обработать, может еще какие флаги проверять, или таймаут добавить ?
Причина редактирования: Уменьшение видимого размера исходника.