krise
驱动牛犊
驱动牛犊
  • 注册日期2004-12-01
  • 最后登录2005-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1416回复:10

关于读d12缓冲区的问题

楼主#
更多 发布于:2005-04-04 10:24
1.主机向d12写数据,单片机从d12缓冲区把数据读出,在主程序中有一段查询bEPPflags.ep2_rxdone是否为1的程序,若为1则把该标志清0并读取EpBuf内容。如果去掉这段程序,直接读EpBuf内容会不会出现什么问题呢?这段程序有什么用呢?
2.单片机向d12缓冲区写数据,主机从d12读数据时,若主机没有及时读走数据,这样的话单片机可以一直写数据到d12缓冲区么?反向的传输(即主机通过d12向单片机发送数据)中若单片机不能及时取走数据,主机是不能向d12写的,不知两边的机制是不是一样的?
谢谢指点!
tottiman
驱动牛犊
驱动牛犊
  • 注册日期2005-01-21
  • 最后登录2005-09-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-04 10:47
一般向缓冲区写的时候,若主机没有及时读走数据,前面的数据就会被后面的冲掉,所以我想在写的后面,立刻读,也许可以
krise
驱动牛犊
驱动牛犊
  • 注册日期2004-12-01
  • 最后登录2005-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-04-05 08:49
现在我的问题是:我的主机不能及时读出数据,因此会丢包,不知道有没有什么方法可以控制单片机向d12的写过程,使它不会覆盖d12的缓冲区造成丢包?谢谢大侠指点!!!
dnet008
驱动牛犊
驱动牛犊
  • 注册日期2005-01-23
  • 最后登录2006-02-10
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-04-05 12:45
看一下这个函数的用法D12_ReadInterruptRegister,成功写了数据并被主机取走后,会有相应的中断位产生的,可以通过查询的方式来解决。
while((D12_ReadInterruptRegister() & D12_INT_ENDP2IN) != D12_INT_ENDP2IN);
D12_ReadLastTransactionStatus(5); // Clear interrupt flag
krise
驱动牛犊
驱动牛犊
  • 注册日期2004-12-01
  • 最后登录2005-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-04-05 14:38
这个中断是主机读走数据后才产生的么?我是在d12本来的固件程序上改的,它本来就有当这个中断产生后清中断标志位的处理,就是和你的建议中一样的处理方法,但是我收到的数据就会丢包。
我的理解是当单片机向d12的缓冲区写了数据后这个中断就会产生。
不知道我的理解对不对?主机读走数据后还有什么标志会改变么?
谢谢你的指点!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-04-05 16:47
数据发送走后中断才能产生
krise
驱动牛犊
驱动牛犊
  • 注册日期2004-12-01
  • 最后登录2005-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-05 17:23
这样呀?那么在主机读走数据并且执行了清中断标志后,d12的in缓冲区有没有被自动清空呢?实在是感谢大侠的指点!
dnet008
驱动牛犊
驱动牛犊
  • 注册日期2005-01-23
  • 最后登录2006-02-10
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-06 09:22
不管有没有被清空,反正你可以把后续的数据往in endpoint里面写了。
krise
驱动牛犊
驱动牛犊
  • 注册日期2004-12-01
  • 最后登录2005-04-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-06 10:29
谢谢各位的帮助!!!虽然我的问题还是没有解决,但是至少我的概念上有了进步,谢谢!以后有问题再请教各位了!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-04-06 11:25
这样呀?那么在主机读走数据并且执行了清中断标志后,d12的in缓冲区有没有被自动清空呢?实在是感谢大侠的指点!

自动清空了
shader
驱动牛犊
驱动牛犊
  • 注册日期2004-07-13
  • 最后登录2006-03-16
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-06-28 08:37
如果设备一次发送128字节,而主机一次只读取64字节的话,应该会出现丢包的现象,即主机只能读到设备发送的头64字节,然后通过中断告诉设备可以继续发送了,结果设备发送了新的128字节。实际情况是不是这样呢?
游客

返回顶部