资 源 简 介
**端点Bulk传输***
1、该实验利用端点2和端点6进行BULK传输,端点2配置成OUT,512size,Bulk模式,4缓冲,Manual-OUT;端点6配置成IN,512size,Bulk模式,4缓冲,Manual-IN。
2、利用开发板上的串口0,把从OUT端点2接收到的数据发送到串口0,把串口接收到的串口数据,通过4缓冲的端点6发送主机。
3、在端点2 0UT的中断服务程序中,表示端点2已经接收到一包数据了,在此直接调用Seria1 SendString(EP2FIFOBUF,(EP2BCH<<8)| EP2BCL,0)函数把从USB接收到的数据发送到串口0,然后OUTPKTEND=0x82;表示数据不提交到GPIF或者slave fifo,允许接收下一包数据。
4、在串口0的中断服务程序中接收到串口0数据后,if (!(EP2468STAT&0x20))首先判断端点6的FIFO是否己满,此标志为‘1’表示端点6的4个BUFFER都己有数据,并且已经提变给USB了,但是HOST没有来取走,此时不能访问端点6。如果端点未满则直接存储数据到端点6中。If((ReceiveCount0==EndPoint6_MaxInLength)||(temp_data= =0x0A))表示当接收到的数据已经够一个包时或者收到0x0A (换行)时,此时我们就提变一包数据到USB。EP6BCH=ReceiveCount0>>8;EP6BCL= ReceiveCount0即是提变一包数据的语句。所以在这个中断服务程序中,会不断的接收数据,当满一个包时就提交数据。在这里,由于端点6是4缓冲方式,所以最多能够接收4包数据,当接收了4包数据后H0ST还没来取数据时,端点6的满标志会置‘1’,表示端点己满,固件不能再访问端点6了。如果收到换行符(0x0A)时,表示此次数据传输结束,因为0x0A之前接收的数据都是以满包封包的,所以要想结束一次数据传输,最后一个包必须是非满包或者零包,程序最后判断如果0x0A这包数据也恰好为满包的话,紧接着提变一个零包来结束一次数据传输。