阅读:1314回复:4
(usb-d12)端点0-OUT中断的处理........(请各位帮帮忙,急!!谢谢了))
请问在该中断的处理中,最后几行:
else if (bEPPflags.bits.control_state == USB_RECEIVE) { i =D12_ReadEndpoint(0, EP0_PACKET_SIZE, ControlData.dataBuffer + ControlData.wCount); ControlData.wCount += i; if( i != EP0_PACKET_SIZE || ControlData.wCount >= ControlData.wLength) { bEPPflags.bits.setup_packet = 1; bEPPflags.bits.control_state = USB_IDLE; -------1 } } else { bEPPflags.bits.control_state = USB_IDLE; -------2 } 该语句共有两句1,2 bEPPflags.bits.control_state = USB_IDLE; 请问在判断数据已经接受完毕后使其为IDLE状态,可在得出数据还没有完之后怎么也是IDLE状态呢?????? 不是说数据一次没有取完,则赋为RECEIVE态,等待第二次的out中断的到来吗??如果为IDLE态,那他又是如何工作的呢???? [编辑 - 3/6/03 by bjvid] |
|
沙发#
发布于:2003-03-06 10:38
太深噢了!
|
|
|
板凳#
发布于:2003-03-06 10:49
关键是这一条语句:bEPPflags.bits.setup_packet = 1;
当i>ControlData.wLength 表示数据一次不能发送完毕,并置bEPPflags.bits.setup_packet = 1;同时进入IDLE状态,并发送数据给pc机,当接收到pc的应答信号以后,mcu会将留下的数据继续发送给pc. |
|
|
地板#
发布于:2003-03-06 11:08
不是啊,这应该是pc将数据给mcu啊???
还有就是----1--句是表示数据传完了,所以bEPPflags.bits.setup_packet = 1; 从而进入mainloop中处理 而----2----句是表示数据还未传完吧????? 我觉得该句应该为: bEPPflags.bits.control_state = USB_RECEIVE; 等待再一次的out中断的到来,对吗???? |
|
地下室#
发布于:2003-03-06 11:38
这个问题 我建议你仔细看一下 周立功 的固件编程指南!
后面的 控制端点处理程序 流程图解释的很详细!!! |
|