Всем привет!

Имеется устройство на базе МК 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 (например, через какой-нибудь регистр) и в этом ли вообще дело? Или, выражаясь по-другому, как избавиться от функции задержки?