阅读:5263回复:20
CY7C68013 slave fifo模式 (高手请进!!!)
大家好:
我现在在用CY7C68013和OV7640做视频设备,现在我想采用slvae fifo传数据 现在有2个问题: 1。我现在IFCLK连PCLK 27M , SLWR 低, FD[7:0]=Y[7:0],其它管脚都不接,但现在传输速度只有3。1MB/s,这也太慢了点吧,请问如何能提高传输速度,或者说是因为硬件连接限制了这个速度,或者是OV7640(640 x 480 )给数据的速度就只这么快呢? 2。现在我可以用512大小每个包的传数据,用的EP6,AUTOIN=0,因为我想在每个包前面加上个2个字节的数据头。 根据资料我应该可以用source in的方法的,我的想法是:先让FIFO取512个数据,然后判断是不是写满了,如果满了我修改前2个字节,EP6FIFOBUF[0]=0x02;EP6FIFOBUF[1]=0x08;然后再EP6BCH=0x02;EP6BCL=0x00;提交。 但我现在用寄存器EP68FIFOFLGS的FF去判断我的FIFO是否装满了,总觉得不能在正确判断(有的包前面加了,有的包前面没加)不知道到底应该怎么才能正确判断FIFO什么时候装满了。 请个位高手能帮忙指点下,我这问题到底出在哪里? 谢谢拉,感激不尽,本人在线等! 十万火急,谢谢~! 谢谢~! |
|
沙发#
发布于:2007-02-13 09:08
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2007-02-13 09:18
我的问题跟你一样,我的固件是这样做的,问题是保不丢了,但是上面没有数据(只有包号,其余数据不变),这是我的固件
void ISR_Sof( void ) interrupt 0 { // check the microframe counter // firmware send data 16 WORD per 8microframe //if(MICROFRAME==0x00) //{ if((EP68FIFOFLGS&0X40)) // programable bit trigle //if(EP8FIFOBCL==0x20) { FIFORESET=0X80; SYNCDELAY; EP8FIFOBUF[0] = Framecnt; EP8FIFOBUF[1] = Framecnt; Framecnt++; //commet EP8BCH=0X00; SYNCDELAY; EP8BCL=0X20; SYNCDELAY; //INPKTEND=0X82; //SYNCDELAY; FIFORESET=0X08; SYNCDELAY; FIFORESET=0X00; SYNCDELAY; } EZUSB_IRQ_CLEAR( ); USBIRQ = bmSOF; // Clear SOF IRQ } 请问您是怎么写的,能交流一下吗? |
|
|
地板#
发布于:2007-02-13 10:00
建议楼主去看看FX2 TechRefManual.pdf , FIFO的空满是自动给出的 ,只要不满就可以往里写,只要不空就可以读, 有flagb和flagc信号给出
|
|
|
地下室#
发布于:2007-02-13 11:56
wjt810907
把 你 QQ号 写给我 短消息也可以,直接写上来也可以 可能现在我和你进度差不多 讨论下吧~! 我把我QQ短消息给你算了 你加我 |
|
5楼#
发布于:2007-02-13 22:39
我希望和楼上的同行聊聊,我的QQ:576406185
|
|
|
6楼#
发布于:2007-02-14 14:14
首先我很佩服作者的这个想法,在前面加写自己的数据我想你是为了同步。你应该也碰到了图像数据丢失的情况,也就是说图像会晃动的情况。至于你所说的速度会慢的问题肯定是会存在的,对于这方面的数据接收你如果需要快速的接收的话,你就不要去干预他。另外在你人工干预的情况下去添加数据头8051cpu的处理速度是不能跟上FIFO的速度的,所以会出现有的加上了,有的又加不上。所以你可以在你的驱动端做优化,提高取数据的效率,或者在firmware端加上逻辑处理芯片(CPLD),祝你好运。关于wjt810907的处理方法作一些简单的数据传输是没有问题的,但是这样的图像数据传输是行不通的,原因就是速度太慢,祝你们好运!
|
|
7楼#
发布于:2007-02-14 20:37
楼上的高手:我请教你一个问题:
我用68013和OV2610采集图象,像素时钟PCLK接68013IFCLK,SLWR接地或者接HREF行参考信号,用端点2(512字节)自动进(FIFO)方法,但是得到的图象数据512字节都是一样的,什么问题,请指导。 |
|
|
8楼#
发布于:2007-02-15 13:58
这可能是你的图像数据根本就没有收到。给你一些调试建议:
1. 检查对ov2610的控制命令发送是否正确,查看PCLK信号是否与你控制的频率一致 2. 场同步信号VSYNC用作同步信号,查询或者中断均可,用这个作为你的EP2启动信号 3. 检查你对端点的配置是否正确,应用层以及驱动工作是否配合正确 4. 你要确定对Sensor德控制没有问题,这个是前提 5. 如果还是不行请把你的firmware中初始化端点的代码贴出来让我看看 |
|
9楼#
发布于:2007-02-16 00:44
VSYNC怎么启动EP2啊? 用WHILE做判断,在TD_POLL里面进行吗?
SENSOR的控制应该没什么问题,可以忘寄存器里面写东西,而且肯定写了有效果,但我不能让SENSOR的VSYNC信号和HREF信号停止,来做同步。 那几个寄存器HSTART,VSTART,HSTOP,VSTOP不能让SENSOR停止发送PCLK |
|
10楼#
发布于:2007-02-20 00:11
可不可以1次提交640 每个包啊?
|
|
11楼#
发布于:2007-02-21 22:23
reanchear :你好
首先感谢你的解答,我觉得你说的很对,是图像数据根本就没有收到。现在,我考虑是不是IFCLK上升沿有效,而像素时钟PCLK也是上升沿有效,也就是说图象数据还没有稳定,地址就加一了,所以不能采到数据。出于这样的考虑,我把IFCLK的极性改变了一下,通过IFCONFIG.4=1,之后,就能采到数据了。 新的问题是:在上位机显示的图象,整个屏幕分成2-4块,我想是错怎帧问题,但是,怎么解决呀,我没有对ov2610进行控制,也就是说,只要上电,数据图象就不断输出。 我想这样设计: PCLK接68013的IFCLK;VSYNC接INT0(设置为边沿触发,高到低触发),HREF信号与一IO口相与接SLWR,68013SLCS接地,FIFOADDR0与FIFOADDR1接地是用EP2; 工作过程: 当VSYNC来的时候(由高到低变化时)激发INT0中断,中断程序控制与HREF信号相与的 IO口为高,SLWR信号有效,写数据到FIFO,当下一场VSYNC有效时,中断程序控制与HREF信号相与的 IO口为低,SLWR信号无效,这样,只采样一桢图象数据,就不会错桢了吧。新手,请多多指教。 另外,怎样实现HREF信号与一IO口相与? 68013口电压3.3V,OV输出数据电压2.5V,怎么相与那? 先 谢谢指导! |
|
|
12楼#
发布于:2007-02-23 13:25
同样的问题 不知道怎么“与” 顶一个!
我的屏幕垂直分成了5个部分,另外还是那个问题,怎么用VSYNC控制EP2的启动啊? |
|
13楼#
发布于:2007-02-23 19:16
bennydice:咱俩联系一下,希望和你讨论!QQ:576406185
|
|
|
14楼#
发布于:2007-02-24 20:43
|
|
|
15楼#
发布于:2007-02-25 09:03
引用第5楼mclmsy于2007-02-13 22:39发表的“”: 我的: 22952089 |
|
|
16楼#
发布于:2007-03-06 14:51
哪个能具体说说怎么用外部中断和YSYNC一起做同步啊?
谢谢拉~! |
|
17楼#
发布于:2007-05-08 09:51
解决没,解决了来说说
|
|
|
18楼#
发布于:2007-05-09 15:49
希望和大家一起来讨论一下!
|
|
|
19楼#
发布于:2007-05-09 16:02
QQ:33115030
|
|
|
上一页
下一页