發新話題
打印

f340 bulk

f340 bulk

example bulk的程式遇到一些問題,想請教一下有沒有人可以幫我解惑
目前想用bulk來當溝通介面類似UART的型式
在Receive data這裡遇到頻頸
我在Receive_Setup()裡去做一個測試
Buffer[1] = 0x20;
Buffer[2] = 0x00;
我修改了準備要回傳的資料長度,好比本來應該要回傳0x40 bytes的資料,我只回傳0x20 bytes的資料
這樣的測試就出現問題 ~ 在usb hound可以看到我有回傳02 20 00,接著預計回傳32 bytes的資料就沒有回傳了

其實我最終的目地是想在USB_ISR裡去攔截中斷事件,再去處理我要做的事
好比我MCU要去控制週邊的設備,處理好之後再把狀況經由原來的USB_ISR的機制回傳給HOST
例如:
void USB_ISR () interrupt 8
{
   BYTE bCommonInt, bInInt, bOutInt;
   UINT delay = 60000;

   // Read interrupt registers
   UREAD_BYTE(CMINT, bCommonInt);
   UREAD_BYTE(IN1INT, bInInt);
   UREAD_BYTE(OUT1INT, bOutInt);

   // Check for reset interrupt
   if (bCommonInt & rbRSTINT)
   {
      // Call reset handler
     USBReset();
      M_State = ST_WAIT_DEV;
   }

   // Check for Endpoint0 interrupt
   if (bInInt & rbEP0)
   {
      // Call Endpoint0 handler
      Endpoint0();
   }
// 加入的測試程式
   FIFORead(0x02, 3, &Buffer);
   if (Buffer[0] == 0x00 && Buffer[1] == 0xff && Buffer[2] == 0xff)
   {
        while(delay--); //測式中斷點
           // 我想攔截host給的00 ff ff之後,在這邊去處理控制週邊的事
           // 再把狀態的情況和資料放在USB BUFF裡,讓系流把資料回傳
   }
// 加入的測試程式

   // Endpoint1 IN
   if (bInInt & rbIN1)
   {
         if (M_State == ST_RX_FILE)    // Ack Transmit complete, go to RX state
         {
           M_State = (ST_TX_ACK);
         }
         if (M_State == ST_TX_FILE)    // File block transmit complete,
                                               // go to TX state
         {
           // Go to Idle when done
           M_State = (BlocksWrote == NumBlocks) ? ST_IDLE_DEV : ST_TX_FILE;      
         }
   }

   // Endpoint2 OUT
   if (bOutInt & rbOUT2)
   {
      // Call Endpoint2 OUT handler
      BulkOrInterruptOut(&gEp2OutStatus);

      M_State = (M_State == ST_IDLE_DEV) ? ST_RX_SETUP : ST_RX_FILE;
   }

   State_Machine();
}

以上是我目前遇到的問題,麻煩各位了
PS.我想應該有人會想說幹嘛不用UART就好了~ 因為想在傳輸速度上能快一點,也正好F340有USB的功能
    所以想這樣做,謝謝

TOP

接著預計回傳32 bytes的資料就沒有回傳了
=>要看看是否有將資料正確的填入記憶體中,與設定要傳送資量長度與指標

TOP

發新話題