usb2.0高速视频采集之68013A寄存器配置说明

  任何的固件编程离不开与与原理图参考,图纸中所采用的是USB的Slave_fifo传输方式,具体配置与图纸对应即可。

•USB_IFCLK:同步Slave_FIFO模式,输入频率范围5M-48M,在FPGA内部将此信号配置为CMOS摄头cmos_pclk,传感器像素时钟的输出端,作为数据采集时钟和 68013与FPGA通信的同步时钟。

assign USB_Data = cmos_data;

•FLAGA/FLAGB/FLAGC/FLAGB:对应FX2LP输出的FIFO状态信息。在写入FIFO或者 读FIFO之前,需先判断FIFO内部满、空等。

•SLCS:FIFO的片选信号,外部逻辑控制,当SLCS无效时,不可进行数据传输。

•SLOE:FIFO的输出使能,外部逻辑控制,当SLOE无效时,数据线不输出有效数据。

•SLRD:FIFO读信号,外部逻辑控制,控制读FIFO。

•USB_WR:FIFO写信号,外部逻辑控制,同步写时,在SLWR有效时的每个IFCLK的上 升沿数据被写入,FIFO指针递增。

assign USB_WR = i2c_config_done & cmos_href & USB_Trigger

USB_WR在CMOS摄像头配置完成,CMOS传感器数据行同步信号和USB_Trigger均有效时,允许写入FIFO操作。

•USB_PA0:外部中断信号。通过CMOS_VSYNC信号来触发中断。该信号是CMOS传感 器像素数据场同步信号输出。代表每帧图像输入的结束,下一帧图像输入的开始。

•USB_FD[0..7]:8位数据传输位。在FPGA内部,将此信号直接连接至传感器像素的输出。

assign USB_Data = cmos_data;//cmos_data为传感器像素时钟输出数据位,8位。

•FIFOADR0/FIFOADR1:选择四个FIFO端点的地址线,外部逻辑控制。68013内部有四个FIFO。

•PKTEND:包结束信号。正常情况下,外部逻辑像FIFO中写入数据时,当写入FIFO端点 的字节数等于固件设定的包大小时,数据将自动打包传输。但外部逻辑传输小数设定的 包大小时,只需在写入一定数目字节后,使PKTEND信号有效,无论外部逻辑写入多 少自己,将自动打包传输。在固件当中,设置PKTEND低有效,此处直接进行拉高处 理,说明每次传输只能固定数据包大小传输。

二、USB68013固件程序解读

首先简要介绍下CYPRESS提供的固件编程框架,用户只需要在我们提供的框架基础上添加修改少量的代码,即可完成固件的编程。框架内部提供了钩子函数,用户在钩子函数中添加自己的代码,完成编程。

固件复位上电时,先初始化一些全局变量,接着调用初始化钩子函数TD_Init(),开中断,等待设备重枚举完成,最后进入while(1)循环语句,执行任务调度。这里不具体说了参考源程序,框架的源文件和头文件如下所示。


EZUSB.LIB


EZUSB库文件


EZUSB.h


EZUSB头文件


fx2regs.h


FX2寄存器头文件


fx2.h


预定义,宏及函数声明


fw.c


固件框架源文件


dscr.a51


USB描述符列表,用户可修改


USBJmpTb.OBJ


中断跳转函数目标文件


syncdly.h


同步延时,定义了程序短延时函数SYNCDELAY


intrins.h


C51一些数据类型及函数定义


intr.c


外部中断处理文件


app_xxx.c


用户钩子函数文件,可修改,用户代码

除此以外,我们需要了解的函数包括:

•void TD_Init():此函数在USB启动后只调用一次。此函数主要添加USB数据传输的初始化代码,也就是传输之前要配置的。通过68013内部寄存器,配置好时钟、FIFO、中断等。

•void TD_Poll():用户调度程序,USB在空闲时反复执行该函数,通常将反复执行的代码放着里面。

•void ISR_EXTR0(void) interrupt  0:外部中断处理函数,当外部中断产生时,程序跳转至此,执行该中断子程序。

■void TD_Init(void)

1、设置CPU即68013时钟为24MHZ。设置时钟寄存器CPUCS=0x0a;其中CPUCS寄 存器如下所示:

CPUCS

•PORTCSTB --- 1表示读写端口C时产生RD#和WR#信号,0不产生读写信号,默认 为0。

•CLKSPD1,CLKSPD0 --- CPU时钟设置。如下表所示:

在CC1601采集卡版本中,可以通过此寄存器修改给cmos提供的时钟,12M、24M、48M。

注意:时钟设置太高,可能导致cmos输出不正常。降低时钟可以降低帧率,会增加稳定性。

•CLKINV --- 时钟状态反转

•CLKOE --- 时钟使能

2、接口配置寄存器IFCONFIG

设置IFCONFIG=0x03; //选择为外部时钟,同步SlaveFIFO模式,输入//IFCLK(5-48MHZ)(0000_0011)

IFCONFIG

•IFCLKSRC --- 0外部时钟源,1内部时钟源。

•3048MHZ --- 0 IFCLK时钟为30M,1 IFCLK时钟为48M。

•IFCLKOE --- IFCLK时钟输出使能,0关闭,1打开。

•IFCLKOL ---IFCLK信号反正,0不反转,1反转

•ASYNC --- GPIF同步或异步操作,0同步,1异步

•GSTATE---GPIF状态输出使能,0关闭,1使能,引脚PE0 PE1 PE2和GPIF状态GSTATE0,GSTATE1,GSTATE2。

•IFCFG0,IFCFG1 --- 模式设置,决定了端口引脚功能。

3、REVCTL芯片版本控制寄存器

设置REVCTL=0x03;

REVCTL

该寄存器在SLAVE FIFOS编程中用到,建议设置b1b0=11。

4、端点1IN和1OUT配置寄存器

由驱动设计可知,只用到了FIFO 2。因此这两个寄存器直接采用默认值即可,只作简单介绍。

TYPE1,TYPE0 --- 端点类型见下表。

5、端点2、4、6、8配置寄存器

由于只用到了端点2,因此设置EP2CFG=0xE0;对于EP2CFG寄存器如下所示。

•VALID --- 0端点无效,1端点有效。

•DIR --- 端点方向,0=OUT方向,1=IN方向,默认端点2,4位IN,端点6,8为OUT。

•TYPE1,TYPE0 --- 端点类型,如下表所示。

•SIZE --- 缓冲区大小(仅端口2和端点6),0=512字节,1=1024字节

•BUF1,BUF0 --- 端点缓冲区个数(仅端口2和端点6)。

将其设置为端点2有效,IN方向,批量传输方式,传输字节为512B,四缓冲方式。

而将EP4CFG、EP6CFG、EP8CFG均设置为无效。

6、Slave FIFO端点2/4/6/8 FIFO配置

设置EP2FIFOCFG=0x08;表示FIFO 8位输入模式。

•INFM1 --- 1表示IN端点满减1。

•OEP1 --- 1表示OUT端点空加1。

•AUTOOUT --- 1表示数据自动提交OUT端点FIFO,0表示手动。

•AUTOIN --- 1表示IN端点FIFO数据自动呈交SIE,0表示手动。

•ZEROLENIN --- 1表示使能零长度IN端点数据包,0表示非使能。

•WORDWIED --- 数据宽度,0表示8bit,1表示16bit。

对于其他FIFO,由于没用到,直接配置成0x00。

7、设置SLWR为高电平有效,其他为低电平有效。通过PORTACFG和FIFOPINPOLAR    寄存器来设置。

PORTACFG

PORTACFG |=0x40表示SLCS设置为复用引脚功能,且低电平有效。

FIFOPINPOLAR

0 表示低电平有效

1表示高电平有效

这里FIFOPINPOLAR = 0x07将SLWR设置为高电平有效,其余的设置为低电平 有效。

8、端点2 AUTOIN数据长度设置

设置EP2AUTOINLENH = 0x02;//包长度高字节,自动传送包大小为512B。

EP2AUTOINLENL=0x00;

9、AUTOPTRSETUP |= 0x01;//使能自动指针特征,可以很方便在两个内存间传输数 据。

10、SLAVE FIFOs FLAGx配置寄存器

PINFLAGSAB = 0x00;

SYNCDELAY;

PINFLAGSCD = 0x00;

SYNCDELAY;

硬件驱动中都没用到该部分,忽略不计。

11、复位FIFO寄存器

FIFORESET

NAKALL --- 0表示关闭NAK功能,1表示用NAK响应主控器请求。在复位端点 时,为了保证复位正常,防止主控器请求的干扰,先写入0x80,复位完成后,再 写入0x00,以此响应请求。如下所示:

FIFORESET = 0x80;// activate NAK-ALL to avoid race conditions

FIFORESET = 0x02;// reset, FIFO 2

FIFORESET = 0x04;// reset, FIFO 4

FIFORESET = 0x06;// reset, FIFO 6

FIFORESET = 0x08;// reset, FIFO 8

FIFORESET = 0x00;// deactivate NAK-AL

12、配置68013内核引脚

如原理图所示,USB_PA0作为中断源,输入至USB68013,设置USB_PA0引脚为 输入引脚。而USB_PD5作为USB_Trigger,输出至FPGA,可认为是68013给予 FPGA的反馈信号。因此,设置USB_PD5为输出引脚。

•程序中设置PD5为输出引脚,且初始化PD5为0。

OED |= (1<<5);//PD5 0:Input; 1:output

//OED = 0x20;

PD5 = 0;

OED端口D输出使能寄存器

•程序中设置PA0为中断触发源。

OEA端口A输出使能寄存器

设置PA0为输入引脚,即默认D0=0;并将PA0设置为外部中断INT0#。

OEA &= ~(1<<0); //PA0-INT0 0:Input

//OEA=0x00;

PORTACFG |= (1<<0);  //Configure PA0 as INT0#

//PORTACFG = 0x01;

13、特殊功能寄存器TCON

通过特殊功能TCON来设定INT0#的中断类型。当IT0=1时,采用上升沿触发中 断,当IT0=0时,采用低电平触发中断。设置IE=1允许中断,IE=0禁止中断。

IT0 = 1; //When ITx = 1, posedge edge Sample; When ITx = 0, low-level     //Sample.

IE |= (1<<0);//Enable INT0

■ISR_EXTR0(void) interrupt  0

CB的中断处理,可一言以蔽之:抽帧。由于PC机自身的局限性,为了降低PC的带宽,对获取的640*480像素大小的图像进行抽帧处理。USB68013只接收部分图像,来有效降低PC的带宽。其过程如下所示:

•PA0作为中断源,采取上升沿触发中断,连接至CMOS_VSYNC,即摄像头场信号。当 场信号出现上升沿时标志着一帧图像的结束和下一帧的开始。

•frame_interval_en做为抽帧的使能信号,初始值为1。每次进入中断,帧计数器自动加1,通过判断帧计数器来实现抽帧处理。

•PD5信号是USB连接至FPGA的信号,由assign USB_WR = i2c_config_done &  cmos_href & USB_Trigger;可以得知,PD5=1时,USB允许数据写入。

•当frame_cnt%2==0时,以15FPS写入FIFO;

•当满足条件frame_cnt%2==0时,PD5=1,允许写入FIFO,不满足时,PD5=0,禁止  写入FIFO。

•在每次禁止写入FIFO时,复位FIFO 2。以使FIFO 2数据为空,这样就不存在FIFO  满状态。以此来防止因FIFO满状态而引起的数据丢失。

void ISR_EXTR0(void) interrupt  0 //using 0

{

if(frame_interval_en == 1)

{

frame_cnt++;

if((frame_cnt%2)==0)  //5:6FPS; 4:7.5FPS; 3:10FPS; 2:15FPS; 1:30FPS;

{

PD5 = 1; //Enable image input

}

else

{

PD5 = 0; //Disable image input

//Reset FIFO of EDP2

SYNCDELAY;

FIFORESET = 0x80;// activate NAK-ALL to avoid race conditions

SYNCDELAY;

FIFORESET = 0x02;// reset, FIFO 2

SYNCDELAY;

FIFORESET = 0x00;// deactivate NAK-AL

SYNCDELAY;

}

}

else

{

PD5 = 1; //Enable image input continue , and no frame interval

}

}

时间: 2024-08-10 02:41:17

usb2.0高速视频采集之68013A寄存器配置说明的相关文章

基于icamera usb2.0的视频采集系统之mt9m001c12stc测评

基于usb2.0的视频采集系统之mt9m001c12stc测评 因为该sensor不带isp,所以不支持白平衡,默认图像彩色颜色会和实际偏离,演示如下 颜色偏绿,所以降低该通道的增益,或者提供其他通道增益即可改善 具体寄存器含义和值范围,可以查阅手册 再适当增加曝光时间,亮度增加, 其他类似 参考datasheet调整即可

全网最佳CY7C68013A开发板,USB2.0高速核心板,独家最全开发资料,长期更新支持

铺天盖地的USB开发板.USB核心板那款最适合您?IFLabs组织专业团队.不惜成本.耗费大量时间精力打造的精品USB核心板是您最佳的选择,优化的核心板结构.全网最全的开发手册.全面的配件,一套在手即可开展USB接口的开发.只需这一次投入,即可实现USB接口开发的从入门到精通! 史无前例的专业.可靠.全面.豪华,绝不是其他低价产品所能比的.无论你是初学者,还是具有USB开发基础的工程师都值得拥有. IFLabs USB2.0 FX2LP核心板开发板详情:http://item.taobao.co

CC1605&amp;CC1604 usb3.0+FPGA 高速视频采集 双目相机测评

摄像头配置:ov5640.OV5642.mt9p031.mt9m001c12stm OV5640 xclk:24M pclk:80M 1080p(1920*1080) 30fps OV5642 5M(2560*1920) 17fps mt9p031 xclk:48M 使用pll 5M(2560*1920)23fps 1080p(1920*1080)46fps 硬件效果 硬件接口 1080p  23fps 双目 2592*1944  4.2fps 2560*1920  分辨率下  帧率 17fps

ehci符合USB2.0,uhci,ohci,

uhci   ohci   ehci他们都是主机控制器的规格,OHCI主要为非PC系统上以及带有SiShe ALi芯片组的 PC主板上的USB芯片,UHCI大多为Intel和Via主板上的USB控制器芯片. UHCI的硬件电路比OHCI简单,成本第,但驱动复杂.但他们都是由USB1.1规格的. EHCI是有Intel等几个厂商研发,兼容OHCI  UHCI 遵循USB2.0规范. USB规范EHCI,UHCI,OHCI区别 为 了实现USB主机功能的统一,提高系统的可靠性与可移植性,上游芯片生产

MiS603开发板 第十章 USB2.0 CY7C68013A 开发环境搭建

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第十章 USB2.0 CY7C68013A 开发环境搭建   CY7C68013A是Cypress公司推出的稳定,易

用DirectShow实现视频采集-流程构建

DirectShow作为DirectX的一个子集,它为用户提供了强大.方便的多媒体开接口,并且它拥有直接操作硬件的能力,这使得它的效率远胜于用GDI等图形方式编写的多媒体程序.前面一篇文章已经对DirectShow作了粗略的介绍,阐述了它的原理及一些编程方法.这里结合实践中运用DirectShow实现视频采集(WIN32)来加深对DirectShow的理解和操作能力. 1.系统环境及开发环境 l       系统支持DirectX(Win 2K以上系统) l       VC++  6.0安装有

USB2.0 速度识别--区分低速-高速-全速

USB2.0是向下兼容USB1.X的,即USB2.0支持高速,全速,低速的USB设备 (HIGH-SPEED,FULL-SPEED,LOW-SPEED),而USB1.X不支持高速设备. 因此如果高速设备接在USB1.X的hub上,也只能工作在全速状态. 因此对速度的识别是很重要的,否则没办法以想要的速度通信. ************************************************************************************** 全速和低速区分

独家全功能USB2.0开发板,最强CY7C68013A-128核心板,超强资料不断提供更新服务

       学习USB开发再也不用买书啦,也不用花费重金去上培训班啦,IFLabs开创USB学习开发新模式,你所需要的知识.技术.范例.代码等等统统都在这里.IFLabs打造全网最丰富.最权威的USB开发平台和资料. 热卖的IFLabs精品USB2.0核心板套件再升级,全网独家推出最强.最全功能的Cypress USB 2.0 CY7C68013A-128AXC核心板开发板,全网最全配件和全网最全开发资料.只需这一次投入,即可实现USB接口开发的从入门到精通!并且有长期的全网最全开发手册更新支

Window 下 VFW 视频采集与显示

引言 经过几天的努力终于将VFW视频采集与显示功能完整实现了,不得不说网上对这方面完整的详细讲解文章是在太少了.所以就要本人来好好总结一下让后来者不再像我一样折腾好久.在本文中我将详细讲解VFW视频采集过程的实现,以及采集后视频的显示方法. VFW简介 虽然这是篇技术博文,但是我觉得用一个东西,那么关于它的概述还是不能少,所以特从百度上copy了下VFW的概念描述,如果读者不想看可以直接去观看正文部分. VFW(Video for Windows)是Microsoft推出的关于数字视频的一个软件