可以看到共有6个管道,也就是68013所有的端点全用上了,Endpoint 0(当然不会显示在这里),Endpoint 1 IN,Endpoint 1 OUT,以及4个大端点,分别是Endpoint 2、Endpoint 4、Endpoint 6、Endpoint 8,这些可以查看初始化函数TD_Init(void)看一下,代码如下,
EP1OUTCFG = 0xA0;
EP1INCFG = 0xA0;
SYNCDELAY; // see TRM section 15.14
EP2CFG = 0xA2;
SYNCDELAY;
EP4CFG = 0xA0;
SYNCDELAY;
EP6CFG = 0xE2;
SYNCDELAY;
EP8CFG = 0xE0;
同时看一下函数 TD_Poll(void),是一个空函数。块传输的功能是通过中断来实现的,查一下中断函数,以端点的中断函数为例,代码如下,
void ISR_Ep2inout(void) interrupt 0
{
WORD count;
WORD i;
if(!(EP2468STAT & bmEP6FULL))
{ // check EP6 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full
APTR1H = MSB( &EP2FIFOBUF );
APTR1L = LSB( &EP2FIFOBUF );
AUTOPTRH2 = MSB( &EP6FIFOBUF );
AUTOPTRL2 = LSB( &EP6FIFOBUF );
count = (EP2BCH << 8) + EP2BCL;
// loop EP2OUT buffer data to EP6IN
for( i = 0x0000; i < count; i++ )
{
// setup to transfer EP2OUT buffer to EP6IN buffer using AUTOPOINTER(s)
EXTAUTODAT2 = EXTAUTODAT1;
}
EP6BCH = EP2BCH;
SYNCDELAY;
EP6BCL = EP2BCL; // arm EP6IN
SYNCDELAY;
}
EZUSB_IRQ_CLEAR();
EPIRQ = bmBIT4;
}
其它的端点与此相似,下面看一下实际操作。按下图操作,为了在一幅图里说明问题,将发送的数据定为16个,如下,
可以看到通过Endpoint 2发出去16个字节5,再按下图操作,
余下的功能,自己看程序吧,很简单,不会有看不懂的地方的。
良子.2010年
欢迎交流:liangziusb@163.com
QQ:392425239
文章评论(0条评论)
登录后参与讨论