Цитата(aaarrr @ Oct 25 2015, 19:07)

Хост сначала запрашивает 8 байт дескриптора устройства, поэтому фраза "количество прерываний" несколько настораживает. Можете рассказать подробнее, что и в какой последовательности происходит?
Не совсем так по поводу запроса дескриптора устройства. Хост не может запрашивать 8 байт. Он запрашивает намного больше. Но после отправки первых 8 байт (для Windows) должен сделать USB Reset. За тем, по новой, запрос дескриптора устройства, если все в порядке, установка адреса и за тем уже все прочее.
У меня вот такой порядок прерываний (флаги OTG_FS):
1. OTG_FS_GINTSTS_USBRST /* USB device bus reset */
2. OTG_FS_GINTSTS_ENUMDNE /* Enumeration done */
3. OTG_FS_GINTSTS_RXFLVL /* Receive FIFO non-empty */
4. OTG_FS_GINTSTS_RXFLVL /* Receive FIFO non-empty */
5. OTG_FS_GINTSTS_USBRST /* USB device bus reset */
6. OTG_FS_GINTSTS_RXFLVL /* Receive FIFO non-empty */
7. OTG_FS_GINTSTS_RXFLVL /* Receive FIFO non-empty */
8. OTG_FS_GINTSTS_OEPINT /* EP OUT event */
8.1. OTG_FS_DOEPINTx_STUP/* Setup Phase Done (control EPs) */ - Здесь обрабатывам запрос и разрешаем прерывание TX FIFO empty */
9. OTG_FS_GINTSTS_RXFLVL /* Receive FIFO non-empty */
10. OTG_FS_GINTSTS_IEPINT /* EP IN event */
10.1 OTG_FS_DIEPINTx_TXFE /* IN endpoint FIFO empty */ - Здесь отправляем данные хосту - дескриптор устройтсва, первые 8 байт */
11. OTG_FS_GINTSTS_RXFLVL /* Receive FIFO non-empty */ - Не понял че такое???
10. OTG_FS_GINTSTS_IEPINT /* EP IN event */ -ага! данные улетели. Наверное...
12. OTG_FS_GINTSTS_OEPINT /* EP OUT event */ - вы че творите???
12.1. 8.1. OTG_FS_DOEPINTx_STUP/* Setup Phase Done (control EPs) */ - Это че за запрос??? В поле bRequest = 0 */
Потом куча прерываний OTG_FS_GINTSTS_RXFLVL.
Потом сброс шины.
Потом все по новой
Отредактировал
В каждом прерывании нужный флаг закрывается - пишется единица в соответствующий бит/регистр