unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len,unsigned char * buf)<br />{<br /> unsigned char i, j;<br /> if(bEPPflags.bits.in_isr == 0)<br /> DISABLE;<br /> outportb(D12_COMMAND, endp);<br /> if((inportb(D12_DATA) & D12_FULLEMPTY) == 0) <br /> {<br /> if(bEPPflags.bits.in_isr == 0)<br /> ENABLE;<br /> return 0;<br /> }<br /> outportb(D12_COMMAND, 0xF0);<br /> j = inportb(D12_DATA);<br /> j = inportb(D12_DATA);<br /> if(j > len)<br /> j = len;<br /> for(i=0; i<j; i++)<br /> *(buf+i) = inportb(D12_DATA);<br /> outportb(D12_COMMAND, 0xF2);<br /> if(bEPPflags.bits.in_isr == 0)<br /> ENABLE;<br /> return j;<br />}<br /><br />这个程序中的if((inportb(D12_DATA) & D12_FULLEMPTY) == 0)<br />说是判断缓冲区是否为空,如果为空返回,<br />它的定义是这样子的<br />#define D12_FULLEMPTY 0x01<br />这个0x01是随便的一个数呢?还是PDIUSBD12内部必须的,<br />outportb(D12_COMMAND, 0xF0);<br /> j = inportb(D12_DATA);<br /> j = inportb(D12_DATA);<br />这个为什么要对j进行两次的赋值呢?<br />谢谢大侠的回答!
|