lecko 0 19 октября, 2011 Опубликовано 19 октября, 2011 · Жалоба Всем привет! Имеется устройство на базе МК LPC2478, которое при подключении к компьютеру определяется как Mass Storage Device. Имеется код, который по специальной команде (отличающейся от стандартной команды чтения) должен послать 512 байт из массива. Вот код BYTE * buffer=(BYTE * )malloc(sizeof(BYTE)*512); DWORD res; BYTE i=0,j=0; CSW.dDataResidue = 512; BulkStage=MSC_BS_DATA_IN; fill(0,buffer,135,1);//заполняем массив while(CSW.dDataResidue>0) { delayMs(0,1); USB_WriteEP(MSC_EP_IN, (BYTE*)&mci_buffer[i*64],64); CSW.dDataResidue-=64; i++; } BulkStage = MSC_BS_DATA_IN_LAST; CSW.bStatus = CSW_CMD_PASSED; free(mci_buffer); В таком виде код работает. Однако если удалить строчку delayMs(0,1); , то передача не проходит. Насколько я понимаю, для отработки функции USB_WriteEP требуется какое-то время. Код функции USB_WriteEP взят из стандартной библиотеки Keil DWORD USB_WriteEP (DWORD EPNum, BYTE *pData, DWORD cnt) { DWORD n; USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_WR_EN; TX_PLENGTH = cnt; for (n = 0; n < (cnt + 3) / 4; n++) { TX_DATA = *((__packed DWORD *)pData); pData += 4; } USB_CTRL = 0; WrCmd(CMD_SEL_EP(EPAdr(EPNum))); WrCmd(CMD_VALID_BUF); return (cnt); } Вопрос: можно ли как-то отследить состояние выполнения записи на endpoint (например, через какой-нибудь регистр) и в этом ли вообще дело? Или, выражаясь по-другому, как избавиться от функции задержки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться