[圈圈教你玩USB] 请教OO,关于USB2UART

[复制链接]
3091|1
 楼主| Liuyk_0321 发表于 2009-8-7 10:31 | 显示全部楼层 |阅读模式
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//////////////////////////////
computer00 发表于 2009-8-10 00:58 | 显示全部楼层
由于执行时间很短,所以是不会丢失中断的。中断来了不是要马上就要处理的,只要在下一次中断到来之前,响应它就行了。暂时没有处理的中断,等你打开中断时,它自然就会响应,不会丢失。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

66

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部