OO,
ES=0的时间里,不会漏接串口数据吗?
/********************************************************************
函数功能:将串口缓冲区中的数据发送到端点2的函数。
入口参数:无。
返 回:无。
备 注:无
********************************************************************/
void SendUartDataToEp2(void)
{
uint8 Len;
//暂时禁止串行中断,防止UartByteCount在中断中修改而导致不同步
ES=0;
//将串口缓冲区接收到的字节数复制出来
Len=UartByteCount;
//检查长度是否为0,如果没有收到数据,则不需要处理,直接返回
if(Len==0)
{
ES=1; //记得打开串口中断
return;
}
//检查Len字节个数据是否跨越了缓冲区边界,如果跨越了,那么本次只发送
//跨越边界之前的数据,剩余的数据留待下次发送。否则,可以一次发送全部。
if((Len+UartBufferOutputPoint)>BUF_LEN)
{
Len=BUF_LEN-UartBufferOutputPoint;
}
//修改缓冲区数据字节数
UartByteCount-=Len;
//到这里可以打开串口中断了
ES=1;
//将数据写入到端点2输入缓冲区
D12WriteEndpointBuffer(5,Len,UartBuffer+UartBufferOutputPoint);
//修改输出数据的位置
UartBufferOutputPoint+=Len;
//如果已经到达缓冲区末尾,则设置回开头
if(UartBufferOutputPoint>=BUF_LEN)
{
UartBufferOutputPoint=0;
}
//只有两个缓冲区都满时,才设置端点2输入忙
if((D12ReadEndpointStatus(5)&0x60)==0x60)
{
Ep2InIsBusy=1;
}
}
////////////////////////End of function////////////////////////////// |