[an error occurred while processing this directive]
|
Спасибо, но похоже, дело не в этом.
Всего пытаюсь отправить в ответ 8 байт из 26-байтного дескриптора. 8 это максимальный размер пакета для EP0. По описанию, прерывание на команду обрабатывается так.
• Host sends a SETUP packet.
• Host sends a DATA packet (80 06 00 01 00 001200).
(В моем случае получено 80 06 0100 0000 0040, т.е. ждут максимум 0x40 байт ответа)
• Device sends an ACK packet.
• An EP0 interrupt is triggered and the USB EP0 handler is called:
– No transfer is in progress; SETUP_END and SENT_STALL are both 0 while OUT_PKT_RDY is 1.
(Именно так)
• Handler reads the EP0 FIFO and decodes command (GET_DESCRIPTOR_DEVICE).
(Да, она самая 06 01 00 - GET_DESCRIPTOR(DESCR_DEVICE,0))
• Handler calls function to handle GET_DESCRIPTOR command.
• Function programs INDEX to 0. (Выбор банка регистров EP0)
• Function programs CLR_OUT.
• Function loads the first packet into the EP0 FIFO, keeping track of the next packet to be loaded.
(загрузил первые 8 байт из 26 байтного дескриптора устройства, в первых 8-ми есть размер и тип структуры)
• Function sets IN_PKT_RDY and returns.
• Handler exits.
Все флаги выставил в нужной последовательности.
По сбросу IN_PKT_RDY должно произойти очередное прерывание, что 8 байт ушли и пора загрузить следующую порцию. Но вот не приходит, а идет ресет.
E-mail: info@telesys.ru