- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于68013的GPIF
美光的gpif时序控制这部分的工作主要是控制fx2什么情况下采集sensor的数据。它在初始化的时候被调用,在以后要用的时候靠主机启动一次,它会按照以前的设好的工作方式工作
首先是设置时钟,使用的是内部的时钟
而且ifclk不能输出,如果允许输出,那么会在图像采集的时候会有干扰出现。
接下来处理的是地址输出信号。在本例子中没有用到。选择的是disable all
接下来设置采集信号rdy 这些信号的采集是根据电路的连接来设置的:
从电路上可以看出 rdy0 rdy2都连接的是行有效信号,rdy1和rdy3都是连接的帧有效信号。Rdy4连接的是pixclk信号,这样可以根据具体的情况来设置
设置完成这部分以后基本上就可以进行状态编程了。
根据美光的芯片的输出特性在行有效的时候根据像素的时钟输出像素。所以在行有效的时候进入到数据采集的状态
在进入到数据采集的状态以后就看内部的机制是不是决定它停止采集进入到空闲的状态。
注意在这个状态的时候要注意是要处于循环的状态。而且在这个时候数据是高电平的有效状态,也就是表示数据采集的状态。
在生成的.c文件中要稍微的作一下修改才能使用。
关于const char xdata InitData[7] 要初始化为:
0xE0,0x00,0x00,0x0e,0xEE,0xFC,0x00
它们所代表的意思如下:
GPIFREADYCFG = InitData[ 0 ];
GPIFCTLCFG = InitData[ 1 ];
GPIFIDLECS = InitData[ 2 ];
GPIFIDLECTL = InitData[ 3 ];
GPIFWFSELECT = InitData[ 5 ];
GPIFREADYSTAT = InitData[ 6 ];
还有要处理的地方就是:
PORTCCFG = 0xFF; // [7:0] as alt. func. GPIFADR[7:0]
OEC = 0xFF; // and as outputs
PORTECFG |= 0x80; // [8] as alt. func. GPIFADR[8]
OEE |= 0x80; */ // and as output
一定要屏掉这一块的程序
开始我不知道GPIF是什么时候开始调用什么时候开始结束的
其实那个专门编程的GPIF文件是在设备初始化的时候做好了准备,然后什么时候启动这种控制还是在主程序中来决定的,在本程序中他是每一行启动一次GPIF的传输。然后一行结束以后开始停止GPIF的调用 然后在最后完成一帧传输的时候同样也是将数据传输结束。
启动gpif的条件是首先设置好gpif的计数器然后判断6号端点是不是空的,如果是空的那么就启动波形传输,如果不是空的那么就等待6号端点的数据上传。
while(!(GPIFTRIG0x80)flag_within_time);这句话的意思是在指定的时间内等待gpif的传输结束。为了确保传输结束再写一次GPIFABORT这一次确实结束gpif的传输。
理论上,所有在in端点的数据都会被主机按照事先确定好的包大小进行打包然后向上传输给主机。但是对于主机要求的分辨率它所代表的数据量可能不是包大小的整数倍那么,剩下的不足的数据一定要强行的提交上去。
它是在 while(height)
{
// set the GPIF transaction size
GPIFTCB0=BYTE_X(1,width);
GPIFTCB1=BYTE_X(0,width);
// pause while we wait for the fifo to empty
// disable sensor clock
CPUCS = 0x10;
while(!(EP68FIFOFLGS0x04)flag_within_time); // when ep6 is reach the pragramme flag
CPUCS = 0x12;
// capture the line
i=EP6GPIFTRIG; SYNCDELAY;
// wait for finish of transfer
while(!(GPIFTRIG0x80)flag_within_time); // TRANSFER END
length-=width;
height-- ;
}
除了这些还有很多不是很清楚地地方。关于流状态的设置,干什么用的也不是很清楚。
关于gpif的几个寄存器的总结如下:
GPIFREADYCFG只有高三位是有效的数据位:
最高位b7是
文档评论(0)