阅读:1012回复:1
各位大侠,请不吝赐教!!一个没想明白的问题!!
/端点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吗??为什么? |
|
沙发#
发布于:2004-07-25 14:42
今天周末,为什么没有高手来顶一下,郁闷!!!
|
|