感觉固件要写的东西还是比较少的,主要是SlaveFIFO的配置。使用端点2,in传输,端点描述符为: db DSCR_ENDPNT_LEN ;; Descriptor length 在这里将{zd0}包设为512bytes。然后就是初始化时的SLaveFIFO配置,同步,AUTO IN,端点2,基本上是TRM中的实例,稍作修改,需要注意的是特殊寄存器连续设置时要延时SYNCDELAY,TRM中的代码有两处好像掉了,我当初照着弄的时候就有问题,后来加上就好了。设置CLKOUT输出驱动Sensor: CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1|bmCLKOE) ; 其他的地方参照TRM的9.3.10的例子,代码我就不贴了.我是将端点8改为2。其他配置也采用端点2的配置,另外端点2设置为512×4倍缓冲,有个问题就是我如果设置为1024的话,会出错,不知道为什么?看网上好多设为1024的也是类似问题,貌似是cypress的驱动不支持1024. 接下来就是sensor部分的初始化,主要是对snesor寄存器参数配置;这里就有个问题了,EZUSB提供的I2C函数,ReadI2C真不知道咋用,汗!看好多人也是这问题,读到的数都是错误的。没办法,只能操作I2C那三个寄存器了。。。郁闷,Cypress也写的不清不楚的。 {zh1}就是Vendor命令中的处理了,在接收到上位机开始采集一帧图像的Vendor命令后,反复查询,知道VSYNC信号的到来,马上清空FIFO,然后返回,保证一帧图像的完整性。 switch (SETUPDAT[1]){ case VX_B2:{ ...... While(VSYNC) {SYNCDELAY; ...... }} 【谷】 |