Всем добрый вечер. На основе проекта usb-device-hid-transfer-project из примеров IAR 5.4 и собственных знаний по USB пишу своё HID-устройство. В цело половина этапа энумерации уже преодолена (реализована передача общих запросов, осталась передача запроса класса устройства). Но даже эта половина запросов работает нестабильно. В процессе энумерации host может 3 раза запросить device descriptor а потом перевести устройство в suspend (хотя я вижу что я отправил этот дескриптор). Или какой-либо другой дескриптор (но чаще именно на device descriptor). Или после запроса device descriptor наступает bus reset. Также бывает что все запросы (те которые уже реализованы) проходят гладко и у меня даже появляется неопознанное hid-устройство. Подозреваю что это косяки моей программы (пример из IAR вроде работает хотя и ужасно запутан) - возможно в реализации обработки прерываний от UDP.
Интересует ссылка на какой-либо работающий (и не такой запутанный как иаровский) проект (под любой компилятор) с ипользованием USB в sam7s но обязательно с прерываниями. Хочу сравнить реализацию обработчика прерываний и найти "10 отличий".
По-поводу своего проекта - помимо прерываний UDP используется PIT (раз в 1мС), USART0 (115200, в процессе энумерации через него выводятся различные сообщения), PIO (тоже по прерываниям но они практически не задействованы). Startup-код уверяет что возможны вложенные прерывания.
Не может-ли большое кол-во источников прерываний и возможность вложенных прерываний влиять на процесс энумерации? Ведь некоторые этапы энумерации ограничены во времени а вложенные прерывания задерживаю работу обработчика прерываний UDP или чтото в этом духе.
Вобщем буду благодарен всем кто даст ссылки на проекты или что-либо посоветут по организации работы UDP.
|