При всем уважении и usb2 читал и в ореховой скорлупе читал Инициируемм ендпойнты пралльно по спецификации (изменяем пример, добавляем ендпойнт с соответствующими параметрами):
/* Endpoint 1 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x00 + EP_NUMBER_OUT, // bEndpointAddress, Endpoint 01 - OUT
0x03, // bmAttributes INT
0x20, // wMaxPacketSize
0x00,
0x0A, // bInterval
/* Endpoint 2 descriptor */
0x07, // bLength
0x05, // bDescriptorType
0x80 + EP_NUMBER_IN, // bEndpointAddress, Endpoint 01 - IN
0x03, // bmAttributes INT
0x20, // wMaxPacketSize
0x00,
0x0A // bInterval
И что же мы видим в функции енумерации:
if (wIndex == 1)
pUDP->UDP_CSR[1] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT);
else if (wIndex == 2)
pUDP->UDP_CSR[2] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN);
else if (wIndex == 3)
pUDP->UDP_CSR[3] = (AT91C_UDP_EPEDS | T91C_UDP_EPTYPE_ISO_IN);
AT91F_USB_SendZlp(pUDP);
Замечу, что ни EP2, ни EP3 в примере не пользуются, а тип EP2 в регистрах контроллера при прохождении программы по некоторым веткам меняется.
До приведения в соответствие кода, так ничего толком и не заработало.
ЗЫ1: Почему неделю ? Потому что по обеденным перерывам :)
ЗЫ2: Таки непонятно, не разу не видел от вас вопросов
ЗЫ3: До этого делал аналогичную еконфигурацию на пик18м контроллере
ЗЫ4: На счет баранов, новых ворот и космической глупости я бы поосторожнее высказывался :)