玩玩 发表于 2015-10-10 12:09:21

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

如题,为什么要定义成0x20

baiheee 发表于 2015-10-10 15:06:53

首先看D12_SETUPPACKET用在什么地方,它出现在如下代码里:
void ep0_rxdone(void)
{
  INT8U ep_last, i;
  INT8U req;

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

其中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,所以要这样定义


页: [1]
查看完整版本: 学习板源码里“#define D12_SETUPPACKET 0x20”这句代码为什么要定义成0x20