реклама на сайте
подробности

 
 
> CDC USB в LPC2148 (IAR)
ivstech
сообщение Oct 22 2007, 15:36
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 204
Регистрация: 5-01-06
Пользователь №: 12 860



Переделал usb_demo (USB HID) в CDC (использую BULK ENDPOINT2 IN и OUT для передачи данных). OUT работает нормально.

IN (данные передаются в HOST по нажатию кнопки в устройстве) передает только 1 раз, при повторном нажатии в терминальную программу ничего не приходит, при третьем вызове циклится на if ((USB_Cmd(CMD_USB_SET_EP_STAT + ENP2_IN,0) & 1) == 0) ...
Код
// DataSize д.б. меньше размера пакета для конечной точки

void CDC_SendDataByEP2 (unsigned char * Data, unsigned int DataSize)
{
  unsigned int * pData = (unsigned int *)Data;
  unsigned int i;
  int ZeroLength = 0;

  // Select Endpoint
  USBCTRL_bit.LOG_ENDPOINT = ENP2_IN>>1;
  USBCTRL_bit.WR_EN = 1;
  TPKTLEN = i;

  do
  {
    TDATA = *pData++;
  }
  while (USBCTRL_bit.WR_EN);

  // Validate buffer
  USB_ValidateBuffer(ENP2_IN);

  // следующий код отсутствует в AN10420 (CDC для KEIL)

  // если его убрать, то при повторной передаче HOST все равно ничего не получит

  // Wait until data is send or overwrite by setup packet
  while ((ENDPINTS & (1<<ENP2_IN)) == 0)
  {
    if ((USB_Cmd(CMD_USB_SET_EP_STAT + ENP2_IN,0) & 1) == 0)
    {
      if((ENDPINTS & (1<<ENP2_IN)) == 0)
      {
        USB_Cmd(CMD_USB_SEL_CLR_INT_EP + ENP2_IN,0);
        return;
      }
    }
  }

  USB_Cmd(CMD_USB_SEL_CLR_INT_EP + ENP2_IN,0);
  ENDPINTCLR = (1<<ENP2_IN);
}


функция USB_Cmd(CMD_USB_SET_EP_STAT + ENP2_IN,0) возвращает при первом вызове CDC_SendDataByEP2 значение 0, как и должно быть. При втором вызове CDC_SendDataByEP2 значение 64, при третьем 97 ( 97&1=1 - с установленным флагом Stall).



Подскажите, пожалуйста, в чем может быть причина.Спасибо!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 11:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01343 секунд с 7
ELECTRONIX ©2004-2016