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的功能
所以想這樣做,謝謝