Цитата
Прерывание ENDBUSRES мешает мне передать дескриптор устройства на хост:
подключаю устройство (на AT91RM9200) к компьютеру, включаю PullUp,
возникает прер-ие ENDBUSRES,
затем прер-ие EPOINT0 - получаю пакет SETUP (запрос дескриптора устройства),
передаю первые 8 из 18 байт,
снова прерывание по EPOINT0 - по флагу TX_COMP,
передаю следующие 8 байт дескриптора,
а вот здесь снова возникает прерывание по ENDBUSRES
и я уже никогда не передаю последние 2 байта дескриптора устройства.
Это типичный "глюк" Windows который вводит в ступор программистов.
Windows посылает запрос с разрешенной длиной ответа 256 байт, а реально после приема первого пакета в 8 байт(или 16 зависит от длины эндпоита) Сразу генерит сброс шины.
По приему сигнала ENDBUSRES устройство должно прекратить передачу.
Затем Windows определив длину ответа, еще раз пошлет запрос с разрешенной длиной ответа равной длине дескриптора.
Но в любом случае ENDBUSRES нужно отрабатывать одинаково.
C RXRSM у меня тоже были проблемы(SAM7S128)
Некорректно был составлен стартап от IAR
После добавления 8 сбросов контроллеру прерывания, до разрешения прерываний
Код
for (j=0; j<8; j++) AT91C_BASE_AIC->AIC_EOICR = 0;
Все заработало.
О "глюке" Windows я читал по моему здесь, в конце документа:
http://www.beyondlogic.org/usbnutshell/usb-in-a-nutshell.pdf