我把USB配置成打印类,从主机接收数据,目前想实现数据流控:
1、系统从USB接口接收数据,存入到用户缓冲区,等待用户处理
2、当用户缓冲区满时,USB接口停止接收数据
3、当系统处理完用户数据时,即用户缓冲区空时,USB接口恢复接收数据
我的处理方法如下:
void EP1_OUT_Callback(void)
{
uint8_t Receive_Buffer[64];
uint8_t count_out;
uint8_t i;
count_out = GetEPRxCount(ENDP1);
PMAToUserBufferCopy(Receive_Buffer, ENDP1_RXADDR,count_out);
/* 数据转移到用户缓冲区 */
for(i = 0; i < count_out ;i++)
{
usebuffer[index++] = Receive_Buffer[i];
}
if(index > 1024)
{
/* 用户缓冲区满 */
SetEPRxStatus(ENDP1, EP_RX_VALID);
}
else
{
SetEPRxStatus(ENDP1, EP_RX_DIS);
}
}
int main()
{
....
for(;;)
{
getdata(); /* 从useBuffer中读取数据,index-- ,并处理数据 */
if(index < 128)
{
SetEPRxStatus(ENDP1, EP_RX_VALID);
}
}
....
}
系统跑起来后,接收一段数据后,就无法继续接收数据了,
哪位大侠帮忙看看? |