阅读:1193回复:3
<PDIUSBD12USB固件编程与驱动开发》中一个不明白的地方!
看这书中的固件中,看到了这个位置P83页:
void trans_data() { ussigned char len,exp; if(controlData.dataBuffer[5]==0x81) { D12_writeendpoint(5,controldata.databuffer[3],epbuf); } if(controldata.databuffer[5]==0x80) { exp=d12_readendpointstatus(4); exp&=0x60; if(exp==0x60) len=d12_readendpoint(4,64,epbuf); } single_transmit(0,0); } 大家看看,有一个问题: 我觉得读取端点得操作,应该是在相应端点的中断处理程序中,而不应该是在这个程序里,假如在这里进行读入操作,会不会不会读到数据呢?很有可能在这时pc还没发送数据过来呢! |
|
沙发#
发布于:2004-02-27 11:58
你说的没错!在ep0_rx中的第一个if语句中就复职了
|
|
板凳#
发布于:2004-02-27 09:47
这样来说应该是这样的了,当setuppacket标志被设置以后,不仅是setup包已经接受到了,而且只要是setup包以后还有数据包也已经收到了,所以在void trans_data()函数里用读出数据命令是可以读出数据的,但是实际上数据已经被读入到了contorl_xfer的databuffer数组里啦,我想应该可以直接拿出来用了,不用再读了吧。而且再读的话,好像缓存区里的数据已经被清除了呀,是不是?
|
|
地板#
发布于:2004-02-26 19:24
trans_data( )是处理厂商请求时被调用,见P70页的control_handler( )函数和P83页的read_write_register( ),而在MAINLOOP.C中调用control_handler( )(请参见87页)之前需要判断是否是SETUP包,当然已经收到数据了!
|
|
|