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

标题: 学习板源码里“#define D12_SETUPPACKET 0x20”这句代码为什么要定义成0x20 [打印本页]

作者: 玩玩    时间: 2015-10-10 12:09
标题: 学习板源码里“#define D12_SETUPPACKET 0x20”这句代码为什么要定义成0x20
如题,为什么要定义成0x20
作者: baiheee    时间: 2015-10-10 15:06
首先看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数据手册):
[attach]32[/attach]
数据接收/发送成功 1 表示数据已经成功地接收或发送  
错误代码
SETUP 设置信息包   1 表示最后成功接收的信息包有一个 SETUP 标志 对IN 缓冲区进行读总为 0  
数据 0/1 包  1 表示最后成功接收/发送包含有一个 DATA1 PID  
前一状态未读   1 表示在前一状态被读出之前发生了第二个事件

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







欢迎光临 USB论坛-百合电子工作室USB专题站 (http://usb.baiheee.com/usb_bbs/) Powered by Discuz! X2.5