Вот функция конфигурирования конечной точки. Для нулевой точки пишу size = 8.
CODE
//------------------------------------------------------------------------------
/// Конфигурирование конечной точки
//------------------------------------------------------------------------------
static void ConfigureEndpoint(const int EndpointNum)
{
unsigned char Type;
unsigned char EndpointDir;
if (EndpointNum == 0)
{
Endpoint[EndpointNum].size=8;
Type= 0;
EndpointDir = 0;
}
else
{
//Other Endpoints
}
//Настройка регистра UDP_ CSRx [x = EndpointNumber]
SET_CSR(EndpointNum, (unsigned int)AT91C_UDP_EPEDS | (Type << 8) | (EndpointDir << 10));
Endpoint[EndpointNum].state = UDP_ENDPOINT_IDLE;
if (Type == 0) //Если точка контрольная, то разрешить прерывание EPxINT [x = EndpointNumber]
{
AT91C_BASE_UDP->UDP_IER = (1 << EndpointNum);
}
}
Макросы действительно большие, но атмеловский код работает, а мой нет. Вот и пытаюсь приближать. Как только получится результат, я перепишу весь код заново попроще

А это:
Код
if (count!=0){return;}
count++;
Для того, чтобы прошел только один RXSETUP...
Причина редактирования: Уменьшение видимого размера цитаты исходника.