基本固件框架的追踪研读之SETUP命令的处理7

书接上回

接下来,是两个用户自定义的请求;
case SC_SetData:                          //向端口发送数据
        DR_SetData();
break;
case SC_ReadData:                         //读端口数据
        DR_ReadData();
break;
//用户添加
#define SC_SetData              0xB1    //自定义请求   
#define SC_ReadData             0xB2    //自定义请求    

下来看DR_SetData();

BOOL DR_SetData(void)     //向端口发送数据
{
    EP0BUF[0]=0xB1;
    EP0BCH=0;
    EP0BCL=2;
    EZUSB_Delay(100);
    OED=0xFF;               //OED定义为输出端口
    IOD=EP0BUF[1];
    EP0CS |= bmHSNAK;
    return(TRUE);
}
1、向EP0BUF[0]写0xB1;
2、写字节计数寄存器;
3、延时100ms;
4、将Port E设置成输出;
5、将EP0BUF[1]赋给Port E;
6、

这里写图片描述

文档中关于Port D的介绍如下;
这里写图片描述
这里写图片描述


而函数DR_ReadData();是函数DR_SetData();的逆过程,不再赘述,只在此贴出代码:
BOOL DR_ReadData(void)        //读端口数据
{
    OED=0x00;               //OED定义为输入端口
    EP0BUF[0]=0xB2;
    EP0BUF[1] =IOD;
    EP0BCH=0;
    EP0BCL=2;
    EP0CS |= bmHSNAK;
    return(TRUE);
}


下面这段代码可忽略:
 default:                     // *** Invalid Command
     if(DR_VendorCmnd())
        EZUSB_STALL_EP0();            // Stall End Point 0

最后,

   // Acknowledge handshake phase of device request
   EP0CS |= bmHSNAK;

这句话解释了前面的代码,缺少清除HSNAK的语句。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值