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

来源:互联网 发布:电脑桌面文件恢复软件 编辑:程序博客网 时间:2024/06/10 17:28
书接上回

接下来,是两个用户自定义的请求;
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 0
原创粉丝点击