USB小白学习之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析

void TD_Init(void)
{
  CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);          //设置CPU时钟频率为48M,寄存器CPUCS的位如下所示。此语句就是将CPUCS的b4,b3位设为10,

//同时不改变其他bit。

图1 寄存器CPUCS的描述

  //USBCS = Ox80; //set high speed mode 添加此语句时工程编译不通过

  IFCONFIG = 0XCB;    //选择内部时钟频率为48M,FIFO/GPIF采用异步操作模式,SLAVE FIFO接口(外部主控制器)

                //IFCONFIG寄存器的描述如图2所示,0xCB = 1100_1011,可见:

              //内部时钟,48MHz,IFCLK时钟输出关闭,IFCLK信号不翻转,GPIF异步操作,关闭GPIF输出,slave FIFO接口

图2 寄存器IFCONFIG的描述

  SYNCDELAY;               //里面是空语句,延时用

  //REVCTL = 0X03; //0x01 //版本号,控制版本号的,不重要,不用管
  //SYNCDELAY;

  FIFOPINPOLAR = 0X00;    //所有引脚为低电平有效,此寄存器控制Slave FIFO方式信号有效电平

  SYNCDELAY;        //FIFOPINPOLAR寄存器的描述如图3所示

图3 寄存器FIFOPINPOLAR的描述

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

  FIFORESET = 0X80;  //对从主机发送的数据进行握手

  SYNCDELAY;     //FIFORESET寄存器的描述如图4所示。由图4中可以看出,这里写入0x80是为了保证复位正常

图4 寄存器FIFORESET的描述

  FIFORESET = 0X02; //复位FIFO
  SYNCDELAY;

  FIFORESET = 0X04; //复位FIFO
  SYNCDELAY;

  FIFORESET = 0X06; //复位FIFO
  SYNCDELAY;

  FIFORESET = 0X08; //复位FIFO
  SYNCDELAY;

            //由图4可以看出,这四条语句分别复位端点:EP2,EP4,EP6,EP8

  FIFORESET = 0X00; //保存操作,这里也是由图4可以得到,写入0x00是为了使能相应请求。

  SYNCDELAY;

  EP6CFG =0xE0; //使能端点6,端点方向为输入,块传输方式,端点大小512字节,端点为4重缓冲
  SYNCDELAY;  //EP6CFG寄存器的描述如图5所示,0xE0 = 1110_0000;

图5 寄存器EP6CFG的描述

  EP6FIFOCFG = 0X0C;            // AUTOIN=1 ZEROLEN=1 WORDIDE=0 设置端点6为手动输入,选择总线数据宽度为8位
  SYNCDELAY;        //EP6FIFOCFG 寄存器的描述如图6所示。

图6

  PINFLAGSAB = 0X00; //确定引脚FLAGA为EPX的PF标志,FLAGB为EPX的FF标志,FLAGC为EPX的EF标志///
  SYNCDELAY;
  PINFLAGSCD = 0X00; //确定引脚FLAGA为EPX的PF标志,FLAGB为EPX的FF标志,FLAGC为EPX的EF标志///
  SYNCDELAY;

PORTACFG = 0X40; //PORTACFG.6=1 设置IOPA7为CS引脚
SYNCDELAY;

EP6AUTOINLENH = 0X02; //端点6 AUTOIN包长度高字节
SYNCDELAY;
EP6AUTOINLENL = 0X00; //端点6 AUTOIN包长度高字节
SYNCDELAY;

EP6BCH = 0x02; //512byte///*
SYNCDELAY;
EP6BCL = 0x00; //512byte///*
SYNCDELAY;

EP6FIFOPFH = 0X80; //端点6/SLAVE FIFO 可编程成级标志的高位(高速方式和全速方式)//不懂///
SYNCDELAY;
EP6FIFOPFL = 0X00; //端点6/SLAVE FIFO 可编程成级标志的高位(高速方式和全速方式) //不懂///
SYNCDELAY;

OUTPKTEND =0X82; //启动OUT缓冲区
SYNCDELAY;
OUTPKTEND =0X82; //启动OUT缓冲区
SYNCDELAY;

//AUTOPTRSETUP |= 0x01; //使能自动指针

Rwuen = TRUE;

}

时间: 2024-10-10 01:38:15

USB小白学习之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析的相关文章

(转)USB小白学习之路(8)FX2LP cy7c68013——Slave FIFO 与FPGA通信

此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 1 USB 概述 USB名称解释 USB是通用串行总线(Universal Serial Bus)的缩写.能过在计算机运行过程中随意地接入,并且立刻就能投入工作,那么这样的特性叫做即插即用PnP(Plug and Play).由于USB是主从模式的结构,设备与设备之间.主机与主机之间不能互连.为了解决这个问题,出现了USB OTG(On the go),它的做法:同一

USB小白学习之路(9) CY7C68013A Slave FIFO模式下与FPGA通信

CY7C68013A Slave FIFO模式下与FPGA通信 CY7C68013A的时钟是由FPGA提供的24MHz,RESET引脚也是由FPGA控制. 1.开始时没有给FPGA烧录程序,将CY7C68013A接到PC上,安装驱动后,是检测不到device的,经查找,原因有两个: ①没有时钟,这种情况下需要先让FPGA跑起来,为CY7C68013A提供时钟 ②复位引脚没有控制,因为CY7C68013A的复位时低有效,如果FPGA的引脚不控制,就会使得此引脚电平不固定,CY7C68013A处于复

(转)USB小白学习之路(11) Cy7c68013驱动电路设计注意事项

Cy7c68013驱动电路设计注意事项 转自:http://group.chinaaet.com/116/79029#0-tsina-1-71467-397232819ff9a47a7b7e80a40613cfe1 CY7C68013的驱动电路非常简单,除了提供24MHz时钟源,设计好USB差分接口,做好电源滤波,其他信号均可由数字控制.这里简单的对Bingo设计CV7C68013A-56PVXC驱动电路进行介绍,如下所示: (1)首先,USB差分电路设计的好坏,决定了实际能运行的速率. 采用U

(转)USB小白学习之路(12) Cy7c68013固件之Slave FIFO

Cy7c68013固件之Slave FIFO 转自:http://blog.csdn.net/zengshaoqing/article/details/53053539 选择SlaveFIFO传输方式 SlaveFIFO传输示意如图1: 图1 Slave FIFO传输示意图 在Slave FIFO方式下,FX2LP内嵌的8051固件的功能只是配置Slave FIFO 相关的寄存器以及控制FX2LP何时工作在Slave FIFO模式下.一旦8051固件将相关的寄存器配置完毕,且使自身工作在Slav

(转)FPGA小白学习之路(4)PLL中的locked信号解析

ALTPLL中的areset,locked的使用 转自:http://www.360doc.com/content/13/0509/20/9072830_284220258.shtml 今天对PLL中areset和locked详细查了下资料,发现网上这方面的资料很少,所以自己认真读了下Documentation---ug_altpll.pdf,现在我将我学到的内容总结如下: areset简而言之就是高电平有效,对pll进行复位. 下面我们主要来认识一下locked信号: Locked这个输出到底

FPGA小白学习之路(2)erro:buffers of the same direction cannot be placed in series

锁相环PLL默认输入前端有个IBUFG单元,在输出端有个BUFG单元,而两个BUFG(IBUFG)不能相连,所以会报这样的错: ERROR:NgdBuild:770 - IBUFG 'u_pll0/clkin1_buf' and BUFG 'BUFG_inst' on net    'clkin_w' are lined up in series. Buffers of the same direction cannot be    placed in series. ERROR:NgdBuil

(转)FPGA小白学习之路(5)clk为什么要用posedge,而不用negedge

clk为什么要用posedge,而不用negedge 转自:http://www.cnblogs.com/dangxia/archive/2012/03/07/2383744.html Verilog中典型的counter逻辑是这样的: 1 always@(posedge clk or negedge reset) begin 2 3 if(reset == 1'b0) 4 5 reg_inst1 <= 8'd0; 6 7 else if(clk == 1'b1) 8 9 reg_inst1 <

FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比

转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型.结构.压缩和非压缩数组. 接口.断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力.SystemVerilog由Acceller

FPGA小白学习之路(6)串口波特率问题的处理

串口波特率问题的处理 此博文一共包含三个方面的内容:(1)异步串口通信的数据格式:(2)为何串口通信中接收端采样时钟频率是传输的波特率的16倍:(3)串口波特率等概念. 1.异步串口通信的数据格式 串口的通信可以通过链接了解:https://wenku.baidu.com/view/7b459e47453610661ed9f4d4.html### 异步串口通信的数据格式如图1所示: 图1 异步串口通信的数据格式 由于在空闲状态时,传送线为逻辑"1"状态,而数据的传送总是以一个起始位&q