其实之前也有提及过,Cypress公司提供的官方文件和应用手册真的可以解决很多问题。做的也很人性化,操作也及其简单,几乎只要在 TD_int()里面配置一些常用的参数即可,其他都可以不用操作。

作为一个常用查询手册吧!!!!

注意一点:在应用手册中《AN65209》中提及到,full和empty标志是针对所有缓冲区而言的,比如双缓冲区,out模式时,只发送一个数据包过来,这是不会使能full信号,只有当第二个数据包过来时,才会使能full信号。

还有一点需要注意的是,对于缓冲区若是设置为自动模式,那么在FPGA向EZ-USB进行写数据时,写到512字节后,full会拉低,这时候硬件会自动将数据进行打包进行上传给PC机,如下所示。

《EZ-USB一些重要寄存器的配置》博客中已经提及过相关寄存器的配置,那么对于slave fifo模式需要配置的寄存器如下所示:

   此外还有两个需要配置一下,如下:

REVCTL

CPUCS

接下来对上述寄存器的配置,都要根据上述原理图来进行,一定要配置时查看此原理图,很有帮助。当然更多的配置信息请参考之前的博客《EZ-USB一些重要寄存器的配置》,这里讲解为什么这么配置。

  1.CPUCS(TRM手册page338)

   针对CY原理图,可以有12MHz,24Mhz,以及48MHz可以进行配置,CY的工作输入时钟是24MHz ,经过内部的PLL电路然后进行倍频和分频。

参考AN61453,设置为48MHz,当然也可以设置为其他频率,这个主要影响8051内核工作频率。

设置 CPUCS = 0x12

2.IFCONFIG

   若要将CY配置成slave fifo模式,那么需要 IFCONFIG[1:0]为 11.同步模式下IFCONFIG.3为1.

b7选择时钟源,为0时,设置为外部时钟,设为1时,内部时钟(30~48MHz) ;此外若是使用外部ifclk,在固件设置b7等于0之前,ifclk必须达到。

b6选择30M还是48M,1为48MHz,0为30MHz。

b5是设置ifclk引脚的输出使能,0为三态,1为驱动。(当使用外部时钟时,此位必须设置为1)

b4设置时钟是否反向,0为不反向,1为反向。

b3设定工作在同步状态还是异步状态。0为同步,1为异步。

b2是设置port E,笔者使用的是56pin,没有port E端口。

b1:0设为11,为slave模式

IFCONFIG =0x43; //选择为外部时钟,且时钟频率为48MHz,且为同步slaveFIFO模式,输入IFCLK(5~48MHz)(0000_0011)。

3.FD控制

可以配置为8bit或者16bit,若是配置为8bit,port D可以作为普通的IO,但是若是配置为16bit,则port D就不能作为普通的IO使用,上电复位默认是16bit。

   4.flagABCD

fifo 的flag工作在两种模式:indexed 和 fixed模式,通过pinflagADCD来控制。

   5.sloe,slrd,slwr,pktend,fifoadr[1:0]

   注意上述的描述,在同步状态下,是伴随ifclk的上升沿改变而改变,在异步状态下,是伴随 slwr或者slrd的变化而变化。

注意下面关于pktend的说法,这个是主机箱发送一个短的数据包时,使用此功能。PKTEND默认是低电平,且PKTEND可以在任何时候设置,但是需在SLWR或者SLRD之后执行。

    6.revctl

   7.EPxCFG

     b7设定为1,激活端口,设置为0,不激活端口;

b6控制方向,0是输出,1是输入;

b5-4模式选择:

   b3缓冲区大小,0是512, 1是1024bytes;其中4和8只能是512,  2和6可选。

b1-0是几个缓冲区:

  7.1 EPXFIFOCFG

  此参数,若是对于out,设置为0x10,若是对于in,设置为0x08;设为自动模式。

7.2 EPXAUTOINLENH:L

注意,这个和上述的EPXCFG,假定端点2缓冲区设置为512字节,4倍缓冲,尽管这一端点占有了2048字节RAM,但CPU只认识“激活的”512字节缓冲区。这可以从寄存器长度看得出来,比如,EP2BCH:L是11位,可对1024字节的最大缓冲区长度进行计数,EP4BCH:L是10位,可对512自己的最大缓冲区长度进行计数。

8.CPU是否获取输入输出包

当设定为AUTOIN = 1时,如下图所示,就不需要CPU参与,直接写给host。

  9.中断

   10.端口可选功能 portXFG

对于下面端口,如果使用SLCS功能,则需要将b6设置为1.

   11.I2C寄存器配置

   12.自动指针功能

13.OEABC使能

0~7对应 A,B,C的7个端口    14.pinflagABCD

通过下面的几个编程,可以实现对端点那个是空,哪个是满,PF空,FF满。

   15.FIFO reset

   16.FIFOPINPOLAR

在硬件设计中,将SLRD直接拉高处理;PKEND也直接拉高,不做包处理;

FIFOPINPOLAR = 0x04; //BIT[5:0] = {PKTEND, SLOE, SLRD, SLWR, EMPTY, FULL}

//Set SLWR High Valid; PKTEND,SLOE,SLRD EMPTY, FULL Low Active

17.INPKTEND/OUTPKTEND

   18.portACFG

   19.USBCS

USB2.0学习笔记连载(十八):keil实现寄存器的配置及相关函数讲解(二)的更多相关文章

  1. USB2.0学习笔记连载(十九):EZ-USB TRM手册重要部分介绍

        TRM手册中给出了所有的寄存器配置,在 slave fifo模式或者 GPIF模式等,所以对于用到的各种寄存器配置需要查看此手册,当然还可以配合着应用手册<AN61345>.   ...

  2. USB2.0学习笔记连载(十七):keil实现寄存器的配置及相关函数讲解(一)

    首先要实现对寄存器的配置,可以参考手册<Development kit  User Guide>,如下图所示: 此文件包含在 文件中.上述的应用文档详细介绍了如何利用KEIL实现对固件程序 ...

  3. USB2.0学习笔记连载(一):CY7C68013特性简介

    上一篇博客已经给出了整个视频板卡架构,那么对于USB接口部分需要着重理解和学习. 对于目前来说,若是利用FPGA去模拟USB2.0内核,难度还是挺大的,整个状态的收发都不好控制.现在目前都在使用桥接芯 ...

  4. USB2.0学习笔记连载(六):USB2.0硬件设计需要注意事项

    笔者在设计USB2.0时找到了一个官方给的硬件设计正确设计指南,其中有些内容还挺nice的.不单单只是USB的设计,其中有些思想可以应用到其他的场合中. 对于USB2.0而言,全速状态下可以达到480 ...

  5. USB2.0学习笔记连载(五):EZ-USB重要寄存器的配置

    本篇博客主要讲解EZ-USB一些重要寄存器的配置,首先对于本篇博客所讲的内容,读者应该到官网上去下载相关的手册,其中包括<EZ-USB Technical Reference Manual> ...

  6. USB2.0学习笔记连载(三):通用USB驱动程序解析

    对于USB驱动的开发,读者可以使用Windows DDK.DriverStudio等多种开发工具来实现USB的驱动,但是驱动程序的开发过程都比较复杂,而且很容易致使USB主机内存泄露而死机.那么对于笔 ...

  7. USB2.0学习笔记连载(二):USB基础知识简介

    USB接口分为USB A型.USB B型.USBmini型.USBmicro型.USB3.0其中每种都有相应的插座和插头. 图1 图2 上图是USBA型接口,图1为插座,图2为插头.插座指向下行方向, ...

  8. USB2.0学习笔记连载(十四):USB驱动安装及固件程序的编写

    在之前的博客中已经讲过,驱动程序最核心的两个文件,一个是xxx.sys文件,一个是xxx.inf文件,主机是寻找xxx.inf文件. 在下面的文件中有相关关于USB驱动的说明.对于用户来说,xxx.s ...

  9. USB2.0学习笔记连载(十):关于WIN8及以上系统哈希值问题

    笔者上一篇博客讲解了关于驱动的安装,笔者使用的系统是win8.1系统,那么对于win8系统及以上系统,会对外部设备,没有在windows系统中进行签名过的,都是不允许在windows系统中进行安装的, ...

随机推荐

  1. ios中解析json对象基类

    这个是对上面一篇写的一个解析json对象的基类 @interface BaseObjectFromJson : NSObject + (id) objectWithDict:(NSDictionary ...

  2. IOS 入门开发之创建标题栏UINavigationBar的使用

    转自:http://xys289187120.blog.51cto.com/3361352/685746 IOS 入门开发之创建标题栏UINavigationBar的使用     IOS 开发有关界面 ...

  3. OpenMP基础使用

    OpenMP是CPU并行加速相关的编译处理方案,VS非常早的版本号就对其提供了支持,只是默认是关闭的.要开启这一支持.仅仅须要在项目的属性中设置就能够,详细选项为:配置属性->C/C++-> ...

  4. .NET MVC下的日志文件生成法

    /// <summary> /// 写日志文件 /// </summary> /// <param name="Infos">日志内容</ ...

  5. Python 传值和传址 copy/deepcopy

    传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如 ...

  6. 【驱动】linux设备驱动·扫盲

    linux设备驱动 Linux系统把设备驱动分成字符设备.块设备和网络设备三种类型. 内核为设备驱动提供了注册和管理的接口,设备驱动还可以使用内核提供的其他功能以及访问内核资源. PCI局部总线 早期 ...

  7. EntityFramework安装和EF升级方法

    例如:如何在vs2010上安装EntityFramework5.0? 首先,需要安装一个vs插件,名称为NuGet Package Manager,微软官方发布的,其作用就是为vs工程项目自动下载.安 ...

  8. vim复制,粘贴,删除,撤销,替换,光标移动等用法

    我接触linux的时候,用的是nano这个文本编辑器,个人觉得他的最大优点就是方便,快速.打开文件,修改文件,到退出都十分的快速,简单.这一点上比vi,vim要强,但是nano不能显示彩色字,不能进行 ...

  9. ListView数据更新后,自动滚动到底部(聊天时常用)| Listview Scroll to the end of the list after updating the list

    转:http://www.cnblogs.com/bjshsqlt/p/3311830.html If you would like to after you have updated by list ...

  10. python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8')