打印
[圈圈教你玩USB]

请教OO,关于USB2UART

[复制链接]
2378|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

粉丝