blackdream2
驱动牛犊
驱动牛犊
  • 注册日期2004-07-24
  • 最后登录2006-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1012回复:1

各位大侠,请不吝赐教!!一个没想明白的问题!!

楼主#
更多 发布于:2004-07-24 21:17
/端点0OUT中断
void ep0_rxdone(void)
{
unsigned char ep_last, i;

ep_last = D12_ReadLastTransactionStatus(0); //清中断标志

if (ep_last & D12_SETUPPACKET) {
//接收到SETUP包
ControlData.wLength = 0;
ControlData.wCount = 0;

if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
(unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) ) {
//SETUP包出错,返回
D12_SetEndpointStatus(0, 1);
D12_SetEndpointStatus(1, 1);
bEPPflags.bits.control_state = USB_IDLE;
return;
}

ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);

//对控制端点的输入/输出进行应答
D12_AcknowledgeEndpoint(0);
D12_AcknowledgeEndpoint(1);

ControlData.wLength = ControlData.DeviceRequest.wLength;
ControlData.wCount = 0;

if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {
//从主机传输数据
bEPPflags.bits.setup_packet = 1;
bEPPflags.bits.control_state = USB_TRANSMIT; /* get command */
}
else {
if (ControlData.DeviceRequest.wLength == 0) {
bEPPflags.bits.setup_packet = 1;
bEPPflags.bits.control_state = USB_IDLE; /* set command */
}
else {
if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE) {
//接收数据长度为0
bEPPflags.bits.control_state = USB_IDLE;
D12_SetEndpointStatus(0, 1);
D12_SetEndpointStatus(1, 1);
}
ControlData.DeviceRequest.wLength在接收到Setup包后由第七个字节可得到.为何ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE时USB为空闲状态,发送的字节不能大于MAX_CONTROLDATA_SIZE吗??为什么?
blackdream2
驱动牛犊
驱动牛犊
  • 注册日期2004-07-24
  • 最后登录2006-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-25 14:42
今天周末,为什么没有高手来顶一下,郁闷!!!
游客

返回顶部