阅读:3012回复:4
cypress例子bulkloop改进版,请大侠们指教!
===========================================================================
功能:EP2out写入2048字节数据,用“AUTOPOINTER”复制到 EP6,再重EP6读出。 现象:只有第一和第三个512字节的数据是正确的,第二和第四个 512字节的数据是错误的。 请大侠们指正啊! =========================================================================== 以下代码跟上述图片的代码是一样的,图片有彩色,是为了让大侠们看着更方便! void TD_Init(void) // Called once at startup { // set the CPU clock to 48MHz CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1) ; // set the slave FIFO interface to 48MHz IFCONFIG |= 0x40; EP1OUTCFG = 0xA0; EP1INCFG = 0xA0; SYNCDELAY; // see TRM section 15.14 EP2CFG = 0xA0; //512*4 SYNCDELAY; EP6CFG = 0xE0; //512*4 SYNCDELAY; // enable dual autopointer feature AUTOPTRSETUP |= 0x01; Rwuen = TRUE; // Enable remote-wakeup } void TD_Poll(void) // Called repeatedly while the device is idle { WORD i; WORD count; if(!(EP2468STAT & bmEP2EMPTY)) { // check EP2 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty if(!(EP2468STAT & bmEP6FULL)) { // check EP6 FULL(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is full APTR1H = MSB( &EP2FIFOBUF ); //取高8位 //old name,new name is AUTOPTR1H APTR1L = LSB( &EP2FIFOBUF ); //取低8位 AUTOPTRH2 = MSB( &EP6FIFOBUF ); //Autopointer 2 Address HIGH AUTOPTRL2 = LSB( &EP6FIFOBUF ); count = (EP2BCH << 8) + EP2BCL; //妈的,即使EP2写入一个数count也会=2048 // loop EP2OUT buffer data to EP6IN // for( i = 0x0000; i < count; i++ ) for( i = 0x0000; i < 2048; i++ ) { // setup to transfer EP2OUT buffer to EP6IN buffer using AUTOPOINTER(s) EXTAUTODAT2 = EXTAUTODAT1; } // EP6BCH = EP2BCH; // SYNCDELAY; // EP6BCL = EP2BCL; // arm EP6IN // SYNCDELAY; // EP2BCL = 0x80; // re(arm) EP2OUT } } EP6BCH =0x02; //好像只能是0x0200,其他都有问题 SYNCDELAY; EP6BCL = 0x00; // arm EP6IN SYNCDELAY; } |
|
沙发#
发布于:2007-08-24 11:22
感觉这个例子很重要啊,能解决很多问题,是新手的必经之路啊!
请成功调试过bulkloop例子的大侠出来讲两句啊!! |
|
板凳#
发布于:2007-08-25 10:06
============================================================================
怎么还没大侠出来解救啊?我问问题都是搜索过以前的帖子才问的,以前也有人问过类似的问题,但是解答得不够具体而一了了之,望大侠们能再次出手相救,把问题解决得彻底一点。 还有,PDF上明明说EP6BCH 和EP2BCH 能设为1024大小的,可是我设EP6BCH =0x04;就会出错, 非的设EP6BCH =0x02; 才行,为什么?? 那位大侠能详细的解释一下EP2BCH,EP2BCL,EP6BCH,EP6BCL,在out或in的情况下的用法及含义啊? |
|
地板#
发布于:2007-08-27 10:07
还没人回贴,我每天来报到一次,我顶......
|
|
地下室#
发布于:2007-09-03 09:05
dsar.a51对EP的定义修改过没有?
|
|