|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
在做一个上位机和FPGA的通信,通过cy7c68013的GPIF_FIFO来通信,下面是68013的固件的初始化,帮我看看问题出在哪里,我已经搞了好几天了,具体的设置如下:
// EP2OUT, bulk, size 512, 4x buffered,autoout,byte
// EP6IN, bulk, size 512, 4x buffered,autoin,byte
代码如下:
void TD_Init(void) // Called once at startup
{
// set the CPU clock to 48MHz
CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);
GpifInit (); // initialize GPIF registers
SYNCDELAY;
EP2CFG = 0xA0; // EP2OUT, bulk, size 512, 4x buffered
SYNCDELAY;
EP6CFG = 0xE0; // EP6IN, bulk, size 512, 4x buffered
SYNCDELAY;
FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions
SYNCDELAY; //
FIFORESET = 0x02; // reset, FIFO 2
SYNCDELAY; //
FIFORESET = 0x06; // reset, FIFO 6
SYNCDELAY; //
FIFORESET = 0x00; // deactivate NAK-ALL
SYNCDELAY; //
EP2FIFOCFG = 0x10; // auto out mode, disable PKTEND zero length send, byte ops
SYNCDELAY;
EP6FIFOCFG = 0x08; // auto in mode, disable PKTEND zero length send, byte ops
SYNCDELAY;
// out endpoints do not come up armed
// since EP2OUT is quad buffered we must write dummy byte counts four times
EP2BCL = 0x80; // arm EP2OUT by writing byte count w/skip.
SYNCDELAY;
EP2BCL = 0x80;
SYNCDELAY;
EP2BCL = 0x80;
SYNCDELAY;
EP2BCL = 0x80;
SYNCDELAY;
}
在TD_Poll()的代码如下,这里有个问题,不是说是autoout的方式的吗,怎么还要cpu处理,而且下面的代码不太懂,也不知道是否正确,在一篇论文里面看到的,帮忙解释一下里面的具体内容,非常感谢!!
void TD_Poll(void)
{
// 完成FIFO的写操作,从EP2-OUT写到外部FIFO中
/*****************************************************************************/
if ( ! ( EP2468STAT & bmEP2EMPTY ) )
{
SYNCDELAY;
EP2BCL=0x00; //SKIP=0,这里不就是手动在处理数据吗??为什么,autoout是什么意思呢?
}
if(GPIFTRIG & 0x80)
{
if(!(EP24FIFOFLGS & 0x20))
{
GPIF_SetAddress(ADDRESS_FIFO1); //设置地址
GPIFTCB0=EP2FIFOBCL;
SYNCDELAY;
GPIFTCB1=EP2FIFOBCH;
SYNCDELAY;
GPIF_FIFOWrite(0); //触发FIFO写波形
}
}
还有:我看到些资料说要在 初始化那里添加
REVCTL=0x03;
不知道为什么?
我发现加了这句之后 在上位机(用USB Console)就不能发数据到EP2了,迷惑中……? |
|