USB2.0学习笔记连载(五):EZ-USB重要寄存器的配置
2015-12-25 22:53
507 查看
本篇博客主要讲解EZ-USB一些重要寄存器的配置,首先对于本篇博客所讲的内容,读者应该到官网上去下载相关的手册,其中包括《EZ-USB Technical Reference Manual》,《Dvk Users Guide》,《CY7C68013A中英文数据手册》,此外还应去Cypress官网下载一个应用笔记,如下图所示:
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225159406-15218972.png)
上面资料中《EZ-USB Technical Reference Manual》包含了需要配置的寄存器信息和一些配置信息,比较重要。《CY7C68013A中英文数据手册》讲解了CY7C68013的一些电气特性以及一些参数信息比较重要。《Dvk Users Guide》介绍了官网提供的例程如何调试以及硬件如何被PC机识别等关键信息,比较重要。《AN61345》介绍了FPGA和FX2LP使用Slave FIFO模式下的配置和调试信息,比较重要。
有了上述手册之后,我们首先打开《AN61345》里面所讲的内容,这篇笔记里面介绍了使用USB CY7C68013的slave FIFO模式应该如何去配置。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225200609-1545871304.png)
上图是典型的FX2LP和FPGA的通信示意图,对于GPIF接口而言,是让FX2LP芯片作为主设备,提供给外部设备所需要的驱动信号,而Slave FIFO模式是FX2LP作为从设备,负责数据的传输,而外部设备是主设备,负责传感器的驱动以及数据的产生。所以我们采用的方案架构是Slave FIFO模式,让FPGA作为主设备。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225201531-1175969008.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225202843-1000993167.png)
上面两个图是FPGA 和FX2LP芯片进行通信所需要的信号,之前笔者以及提及过了,这里不再赘述。
对于USB的传输方式,主要包括中断(interrupt),块传输(bulk),同步(Isochronous),控制(control),其中bulk传输比较重要,比较常用,所以必须要掌握。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225203687-2020673478.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225204671-1630112775.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225205687-1545035578.png)
打开 《Dvk Users Guide》后,在12页给出了USB 主函数框架的示意图,如上图所示。首先上电之后,初始化各状态变量,然后对各变量进行初始化赋值。再使能中断。
那么对于上电复位之后,需要初始化一些寄存器,在《AN61345》中的第8页已经给出了一些提示。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225206812-925627864.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225207749-1623770942.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225208577-1181714469.png)
关于相关寄存器的具体说明,可以查看手册《EZ-USB Technical Reference Manual》。所有寄存器的配置也是完成CY7C68013内部结构所需要的配置,如下图所示。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225209515-1583669561.png)
1.8051内核工作寄存器 CPUCS(page338)
CPUCS = 0x12; //48MHZ CLKOUT ENALBE,时钟不反向,CLKOUT PIN驱动,有时钟输出;
2.IFCLK引脚的相关配置 IFCONFIG(page339)
IFCONFIG =0x03; //选择为外部时钟,且时钟频率为30MHz,且为同步slaveFIFO模式,输入IFCLK(5~48MHz)(0000_0011)。
3.FIFO深度控制及数量和方向选择 EPXFG深度配置(page352)
选择FIFO的数量以及FIFO的深度为512,位宽为8位;由于笔者设计的板卡中只用到了FIFO2,也就是EP2,深度为512 ,位宽为8位。其他FIFO暂时用不到。
EP2CFG = 0xE0; // disabled...
EP4CFG = 0x60; // disabled...
EP6CFG = 0x60; // disabled...
EP8CFG = 0x60; // disabled...
4.FIFO位宽设置 EPXFIFOCFG深度配置(page353)
RAW,Gray 模式的数据位输出为8bit。
EP2FIFOCFG = 0x08; // autoin, 8 Bit Wide
5.USB终端输出方式选择EP1IN/OUTCFG终端配置(page350)
在设置USB的传输方式,选择默认值bulk传输方式。
EP1OUTCFG = 0xA0; // default values
EP1INCFG = 0xA0; // default values
6.芯片版本控制 REVCTL(page348)
采用系统默认的值。
REVCTL = 0x03; //Cypress highly recommends setting both bits to 1
7.FIFO输出状态控制 PINFLAGAB/CD(page342)
PINFLAGSAB = 0x00;
PINFLAGSCD = 0x00;
由外部的FIFOADR[1:0]来决定使用哪一个FIFO。
8.FIFO复位 FIFORESET(page342)
手册上面的要求如下图所示:
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225210593-867724572.png)
//复位FIFO,先复位端点,再清空端点
延时;
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
延时;
9.FIFO引脚极性判断 FIFOPINPOLAR(page346)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225211421-469172494.jpg)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225212156-1403572766.jpg)
在硬件设计中,将SLRD直接拉高处理;PKEND也直接拉高,不做包处理;
FIFOPINPOLAR = 0x04; //BIT[5:0] = {PKTEND, SLOE, SLRD, SLWR, EMPTY, FULL}
//Set SLWR High Valid; PKTEND,SLOE,SLRD EMPTY, FULL Low Active
10.引脚复用可选IO功能 PORTACFG(page382)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225213077-247750573.jpg)
其中在A区的引脚复用了片选SLCS信号,所以要将其设置为1;
PORTACFG |= 0x40; //IFCOG[1:0] = 11(Slave FIFO Mode), Set PORTACFG[6] to USE PA7-SLCS
11.特殊功能寄存器 自动指针设置AUTOPTRSETUP (page332)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225214062-1970734.jpg)
//Set Autopointer, enable dual autopointer
AUTOPTRSETUP |= 0x01;
12.设置自动报传 EPXAUTOINLENH/L
//设置为Autoin时的自动传输包大小
EP2AUTOINLENH = 0x02; // EZ-USB automatically commits data in 512-byte chunks
// EP2AUTOINLENH = 0x04; // EZ-USB automatically commits data in 1024-byte chunks
EP2AUTOINLENL = 0x00;
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225217218-1799390041.png)
笔者设计的USB部分如上图所示,由于FPGA引脚有限,采用8bit数据总线传输,USB部分只做写入功能,所以预留USB_WR引脚,同步时钟USB_IFCLK,SLRD,PKEND直接拉高,SLCS拉低,FIFOADR[1:0] = 00,选择FIFO中的EP2,增加USB触发信号引脚,作为FPGA写入使能信号,增加CMOS_VSYNC帧同步信号,作为CMOS视频的同步信号。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225159406-15218972.png)
上面资料中《EZ-USB Technical Reference Manual》包含了需要配置的寄存器信息和一些配置信息,比较重要。《CY7C68013A中英文数据手册》讲解了CY7C68013的一些电气特性以及一些参数信息比较重要。《Dvk Users Guide》介绍了官网提供的例程如何调试以及硬件如何被PC机识别等关键信息,比较重要。《AN61345》介绍了FPGA和FX2LP使用Slave FIFO模式下的配置和调试信息,比较重要。
有了上述手册之后,我们首先打开《AN61345》里面所讲的内容,这篇笔记里面介绍了使用USB CY7C68013的slave FIFO模式应该如何去配置。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225200609-1545871304.png)
上图是典型的FX2LP和FPGA的通信示意图,对于GPIF接口而言,是让FX2LP芯片作为主设备,提供给外部设备所需要的驱动信号,而Slave FIFO模式是FX2LP作为从设备,负责数据的传输,而外部设备是主设备,负责传感器的驱动以及数据的产生。所以我们采用的方案架构是Slave FIFO模式,让FPGA作为主设备。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225201531-1175969008.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225202843-1000993167.png)
上面两个图是FPGA 和FX2LP芯片进行通信所需要的信号,之前笔者以及提及过了,这里不再赘述。
对于USB的传输方式,主要包括中断(interrupt),块传输(bulk),同步(Isochronous),控制(control),其中bulk传输比较重要,比较常用,所以必须要掌握。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225203687-2020673478.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225204671-1630112775.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225205687-1545035578.png)
打开 《Dvk Users Guide》后,在12页给出了USB 主函数框架的示意图,如上图所示。首先上电之后,初始化各状态变量,然后对各变量进行初始化赋值。再使能中断。
那么对于上电复位之后,需要初始化一些寄存器,在《AN61345》中的第8页已经给出了一些提示。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225206812-925627864.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225207749-1623770942.png)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225208577-1181714469.png)
关于相关寄存器的具体说明,可以查看手册《EZ-USB Technical Reference Manual》。所有寄存器的配置也是完成CY7C68013内部结构所需要的配置,如下图所示。
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225209515-1583669561.png)
1.8051内核工作寄存器 CPUCS(page338)
CPUCS = 0x12; //48MHZ CLKOUT ENALBE,时钟不反向,CLKOUT PIN驱动,有时钟输出;
2.IFCLK引脚的相关配置 IFCONFIG(page339)
IFCONFIG =0x03; //选择为外部时钟,且时钟频率为30MHz,且为同步slaveFIFO模式,输入IFCLK(5~48MHz)(0000_0011)。
3.FIFO深度控制及数量和方向选择 EPXFG深度配置(page352)
选择FIFO的数量以及FIFO的深度为512,位宽为8位;由于笔者设计的板卡中只用到了FIFO2,也就是EP2,深度为512 ,位宽为8位。其他FIFO暂时用不到。
EP2CFG = 0xE0; // disabled...
EP4CFG = 0x60; // disabled...
EP6CFG = 0x60; // disabled...
EP8CFG = 0x60; // disabled...
4.FIFO位宽设置 EPXFIFOCFG深度配置(page353)
RAW,Gray 模式的数据位输出为8bit。
EP2FIFOCFG = 0x08; // autoin, 8 Bit Wide
5.USB终端输出方式选择EP1IN/OUTCFG终端配置(page350)
在设置USB的传输方式,选择默认值bulk传输方式。
EP1OUTCFG = 0xA0; // default values
EP1INCFG = 0xA0; // default values
6.芯片版本控制 REVCTL(page348)
采用系统默认的值。
REVCTL = 0x03; //Cypress highly recommends setting both bits to 1
7.FIFO输出状态控制 PINFLAGAB/CD(page342)
PINFLAGSAB = 0x00;
PINFLAGSCD = 0x00;
由外部的FIFOADR[1:0]来决定使用哪一个FIFO。
8.FIFO复位 FIFORESET(page342)
手册上面的要求如下图所示:
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225210593-867724572.png)
//复位FIFO,先复位端点,再清空端点
延时;
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
延时;
9.FIFO引脚极性判断 FIFOPINPOLAR(page346)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225211421-469172494.jpg)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225212156-1403572766.jpg)
在硬件设计中,将SLRD直接拉高处理;PKEND也直接拉高,不做包处理;
FIFOPINPOLAR = 0x04; //BIT[5:0] = {PKTEND, SLOE, SLRD, SLWR, EMPTY, FULL}
//Set SLWR High Valid; PKTEND,SLOE,SLRD EMPTY, FULL Low Active
10.引脚复用可选IO功能 PORTACFG(page382)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225213077-247750573.jpg)
其中在A区的引脚复用了片选SLCS信号,所以要将其设置为1;
PORTACFG |= 0x40; //IFCOG[1:0] = 11(Slave FIFO Mode), Set PORTACFG[6] to USE PA7-SLCS
11.特殊功能寄存器 自动指针设置AUTOPTRSETUP (page332)
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225214062-1970734.jpg)
//Set Autopointer, enable dual autopointer
AUTOPTRSETUP |= 0x01;
12.设置自动报传 EPXAUTOINLENH/L
//设置为Autoin时的自动传输包大小
EP2AUTOINLENH = 0x02; // EZ-USB automatically commits data in 512-byte chunks
// EP2AUTOINLENH = 0x04; // EZ-USB automatically commits data in 1024-byte chunks
EP2AUTOINLENL = 0x00;
![](http://images2015.cnblogs.com/blog/836224/201512/836224-20151225225217218-1799390041.png)
笔者设计的USB部分如上图所示,由于FPGA引脚有限,采用8bit数据总线传输,USB部分只做写入功能,所以预留USB_WR引脚,同步时钟USB_IFCLK,SLRD,PKEND直接拉高,SLCS拉低,FIFOADR[1:0] = 00,选择FIFO中的EP2,增加USB触发信号引脚,作为FPGA写入使能信号,增加CMOS_VSYNC帧同步信号,作为CMOS视频的同步信号。
相关文章推荐
- Leetcode 第278题 First Bad Version
- Supporting Multiple Screens
- 去云&降尺度
- 1225整理
- 从头开始swift2.0 仿乐乐医项目(五)上下拉刷新加载
- 剑指Offer刷题(4)
- error TRK0005: Failed to locate: "CL.exe"
- SpeedyCloud-云计算之旅
- Swift中的对象
- 用css进行布局
- 欢迎使用CSDN-markdown编辑器
- 从头开始swift2.0 仿乐乐医项目(四)顶部的美化
- 约瑟夫环(数学高效率解法,很详细)
- eclipse+spket+Extjs4开发环境搭建
- Spring4 Note @Scope @RequestMapping @Controller
- Android 下载网络图片 简单Demo
- w3wp与w3svc
- 【数据结构与算法分析】基本理论概念总结
- 【转载】千万级规模高性能、高并发的网络架构经验分享
- 链表、堆栈、队列的区别