Цитата
Ну, это пока еще не разборщик smile.gif
Будем потихоньку разбираться с этими разборщиками.

Вот наваял для разборки запроса от хоста Get_stat_dev,
может что тоже нужно подправить, может в обращениях к регистрам что подправить?
CODE
//-------------------------------------------------------------------------------
void end_point_read(DWORD EP, BYTE *dat){
DWORD LenByt, n;
/* */
EP &=0x0F;
LenByt = (AT91C_BASE_UDP->UDP_CSR[EP] >> 16) & 0x07FF;
for (n = 0; n < LenByt; n++) {
*dat++ = (BYTE) AT91C_BASE_UDP->UDP_FDR[EP];
}//end for
/* */
}//end
//-------------------------------------------------------------------------------
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;
}
//-------------------------------------------------------------------------------
void Get_stat_dev(DWORD EP){
BYTE OPT[2];
EP &=0x0F;
/* */
OPT[0] = (POW_BUS | IGNOR_SIG);
OPT[1] = 0;
AT91C_BASE_UDP->UDP_CSR[EP] |= AT91C_UDP_DIR;
end_point_write(EP,OPT,2);
while(!(AT91C_BASE_UDP->UDP_CSR[EP] & AT91C_UDP_RXSETUP));
AT91C_BASE_UDP->UDP_CSR[EP] &= ~AT91C_UDP_RXSETUP;
AT91C_BASE_UDP->UDP_CSR[EP] &= ~AT91C_UDP_DIR;
}//end void Get_stat_dev(void)
//-------------------------------------------------------------------------------