阅读:1526回复:4
寻找cahwlx1982 ,送给你的100
你好!你所说的时序是什么意思呢?
我现在只完成一个简单的任务,用gpif方式读取存储器的内容,现在还没有接外部设备,只是用示波器测量开发板的GPIF 的地址位和CTL控制为.我发现是可以启动GPIF波形的,按照技术说明当EP6FIFO的装满后GPIF就应该暂停的,但在我没有通过控制面板取数的情况下,示波器显示GPIF的波形没有停止. 好心的大哥,求你赐教,我的老师都没有办法指导我,临近毕业了,我还要找工作啊,谢谢 这就是我的固件. void TD_Init(void) // Called once at startup { BREAKPT &= ~bmBPEN; // to see BKPT LED go out TGE Rwuen = TRUE; // Enable remote-wakeup GpifInit(); // EP2 512 BULK OUT 4x SYNCDELAY; // see TRM section 15.14 EP2CFG = 0xA2; //512PACKET; SYNCDELAY; // EP4CFG = 0x20; // clear valid bit SYNCDELAY; // EP6CFG = 0xE0; // clear valid bit SYNCDELAY; // EP8CFG = 0x60; // clear valid bit SYNCDELAY; // FIFORESET = 0x80; // activate NAK-ALL to avoid race conditions SYNCDELAY; // FIFORESET = 0x02; // reset, FIFO 2 SYNCDELAY; // FIFORESET = 0x04; // reset, FIFO 4 SYNCDELAY; // FIFORESET = 0x06; // reset, FIFO 6 SYNCDELAY; // FIFORESET = 0x08; // reset, FIFO 8 SYNCDELAY; // FIFORESET = 0x00; // deactivate NAK-ALL SYNCDELAY; // 8-bit bus (WORDWIDE=1)... EP2FIFOCFG = 0x00;//AUTO OUT 8-BIT BUS SYNCDELAY; EP6FIFOCFG = 0x00;//AUTO IN 8-BIT BUS // setup INT4 as internal source for GPIF interrupts // using INT4CLR (SFR), automatically enabled INTSETUP |= 0x03; // Enable INT4 FIFO/GPIF Autovectoring SYNCDELAY; // used here as "delay" EXIF &= ~0x40; // just in case one was pending... SYNCDELAY; // used here as "delay" GPIFIRQ = 0x03; SYNCDELAY; // GPIFIE = 0x03; // Enable GPIFWF interrupt SYNCDELAY; // EIE |= 0x04; // Enable INT4 ISR, EIE.2(EIEX4=1) EP6GPIFFLGSEL=0x02; SYNCDELAY; GPIFREADYCFG=0x20; } void TD_Poll(void) // Called repeatedly while the device is idle { if( GPIFTRIG & 0x80 ) { if(!(EP68FIFOFLGS &0x01)) { Peripheral_SetAddress(0); Peripheral_SetEP6GPIFTC( 512 ); Peripheral_FIFORead(2); } else { SYNCDELAY; INPKTEND=0x06; } } } |
|
沙发#
发布于:2004-12-14 09:45
好象应该是大姐。
到这 http://www.zstel.com/zsbbs/main.htm 去找她。 至少能找到她的 email |
|
板凳#
发布于:2004-12-14 11:51
呵呵……,wdy9927说的对!我不是大哥!
恩……,看了一下,你的程序,感觉你有很多的错误!也许你是直接拷贝原有的程序,是不是呀?但是你有没有认真的核对过呢? 先指正你里面的一些错误吧! (1)// EP2 512 BULK OUT 4x SYNCDELAY; // see TRM section 15.14 EP2CFG = 0xA2; //512PACKET; 你这样定义是2XBUFFER,512个字节 应该是0XA0 (2)EP6CFG = 0xE0; // clear valid bit你这个也有问题呀!你这样写是定义EP6为输出端点4X,512个字节,而不是clear valid bit (3)EP2FIFOCFG = 0x00;//AUTO OUT 8-BIT BUS SYNCDELAY; EP6FIFOCFG = 0x00;//AUTO IN 8-BIT BUS 按你的定义,应该是“手动”的方式,在初始化的时候应该要 SYNCDELAY; // EP2BCL = 0x80; // arm first buffer SYNCDELAY; // EP2BCL = 0x80; // arm second buffer SYNCDELAY; // EP2BCL = 0x80; // arm third buffer SYNCDELAY; // EP2BCL = 0x80; // arm fourth buffer SYNCDELAY; 而你没有这样设置! 另外呢,你在TD_POLL里面 SYNCDELAY; INPKTEND=0x06; 这个是自动的方式用的呀? 你应该用的不是这个,而是:EP6BCL = 0x00; 明白我的意思吗?要是不明白的话,自己再看看资料!上面说的很清楚的! (4),你说的是“用gpif方式读取存储器的内容,现在还没有接外部设备”,按我就不明白了,你把GPIFADR[8:0]接哪里了呀?怎么通讯呀?要是没有接的话,那么你的“Peripheral_SetAddress(0); ”不是多余的吗?压根就不需要! (5)你说的"按照技术说明当EP6FIFO的装满后GPIF就应该暂停的"不错是有这个功能的,但是呢,在设置GPIF波形的时候要将他做为你的"FIFOFlag"作为你的一个RDY信号,然后在波形中让他满足条件就跳到"IDLE",你也可以用TC来控制! 从这些错误来看,你压根就没有理解GPIF是什么,那么你的GPIF波形肯定就更是漏洞百出,另外呢,建议你接几个RDY信号,控制你的波形用的! 所以我建议你到www.cypress.com上面下载一个GPIF文档,名字叫“EZ-USB FX2 GPIF Primer”,好好的看看例题和讲解!也许不要着急!很快就明白怎么去设计了! 不要太心急了,还是花一点时间好好的看看文档吧!你的每一步都是设计好了,再开始调试你的程序吧! 呵呵,说的有一点的乱哦!我的表达水平不是很好,不知道你是不是看的明白我的意思! 祝你好运,朋友!!! |
|
地板#
发布于:2004-12-14 16:25
谢谢你啊,大姐.
我继续努力中. 我的外部存储器电路已经做好了,只是测量的时候把电路撤了,只用示波器测量所需要的控制信号是否正确. 您的话对我来说帮助很大 谢谢 我会再开帖送您分数的 谢谢 |
|
地下室#
发布于:2004-12-14 19:12
认真的看资料,相信你很快自己就可以解决很多的问题的!
|
|