USB论坛-百合电子工作室USB专题站

 找回密码
 我要注册
搜索
热搜: USB学习板
查看: 9177|回复: 1
打印 上一主题 下一主题

学习板源码里“#define D12_SETUPPACKET 0x20”这句代码为什么要定义成0x20

[复制链接]

12

主题

0

好友

100

积分

产品用户

Rank: 4

跳转到指定楼层
楼主
发表于 2015-10-10 12:09:21 |只看该作者 |倒序浏览
如题,为什么要定义成0x20
回复

使用道具 举报

6

主题

0

好友

1158

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2015-10-10 15:06:53 |只看该作者
首先看D12_SETUPPACKET用在什么地方,它出现在如下代码里:
[code=cpp]void ep0_rxdone(void)
{
  INT8U ep_last, i;
  INT8U req[sizeof(DEVICE_REQUEST)];

  ep_last = D12_ReadLastTransactionStatus(0);       //清除中断寄存器状态,取得最后处理状态
  if (ep_last & D12_SETUPPACKET) {           //如果收到了建立包(Setup包)[/code]

其中D12_ReadLastTransactionStatus函数是读PDIUSBD12的最后处理状态寄存器,此寄存器结构如下(请查D12数据手册):

数据接收/发送成功 1 表示数据已经成功地接收或发送  
错误代码
SETUP 设置信息包   1 表示最后成功接收的信息包有一个 SETUP 标志 对IN 缓冲区进行读总为 0  
数据 0/1 包  1 表示最后成功接收/发送包含有一个 DATA1 PID  
前一状态未读   1 表示在前一状态被读出之前发生了第二个事件

位5代表设置信息包,当这个位为1时代表收到一个SETUP包,什么是SETUP包,可以参考USB协议。而0x20转换成二进制是00100000,正好是第5位的值是1,所以要这样定义


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要注册

USB开发网 (渝ICP备09006681号-4)

GMT+8, 2024-4-20 14:08 , Processed in 0.054842 second(s), 19 queries .

百合电子工作室版权所有
回顶部