zoukankan      html  css  js  c++  java
  • USB小白学习之路(7) FPGA Communication with PC by CY7C68013,TD_init()解析

    注:这个TD_Init()只对EP6进行了配置,将其配置成为Bluk_In端口,而没有对EP2进行配置。这篇文章直接把寄存器的图片贴上来了,看起来比较杂。感兴趣的可以看下一篇文章,是转自CSDN,对EP2和EP6都进行了配置,看起来更有条理。这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY7C68013,使其与FPGA通信,还是官方给的文档AN61345以及附件代码更详细直观。

    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所示。0x0C = 0000_1100;

    图6 寄存器EP6FIFOCFG的描述

      PINFLAGSAB = 0X00; //确定引脚FLAGA为EPX的PF标志,FLAGB为EPX的EF标志,FLAGC为EPX的FF标志///
      SYNCDELAY;    //PF表示FIFO编程标志,EF表示FIFO已空,FF表示FIFO已满

      PINFLAGSCD = 0X00; //确定引脚FLAGA为EPX的PF标志,FLAGB为EPX的EF标志,FLAGC为EPX的FF标志///
      SYNCDELAY;    //PINFLAGSAB寄存器的描述如图7所示。

    图7 寄存器PINFLAGSAB和PINFLAGSCD的描述

      PORTACFG = 0X40; //PORTACFG.6=1 设置IOPA7为CS引脚
      SYNCDELAY;    //PORTACFG寄存器的描述如图8所示,图9为Port A复用的描述

    图8 寄存器PORTACFG的描述

     

    图9 Port A的复用功能

      EP6AUTOINLENH = 0X02; //端点6 AUTOIN包长度高字节
      SYNCDELAY;
      EP6AUTOINLENL = 0X00; //端点6 AUTOIN包长度高字节
      SYNCDELAY;       //这里就是包长度的寄存器,由这两个寄存器可以得到,包长度为512Byte,这里设置包长度要小于前面设置的EP6CFG中缓冲区的大小

      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;                    //睡眠唤醒,控制主函数睡眠中的死循环结束。

    }

    真正不羁的灵魂不会真的去计较什么,因为他们的内心深处有着国王般的骄傲。
  • 相关阅读:
    问题账户需求分析
    需求分析初学理解
    GitHub初步探索-1-使用本地代码管理工具,简化上传的过程
    软件工程概论-个人总结
    第二次冲刺-个人工作总结05
    第二次冲刺-个人工作总结04
    第二次冲刺-个人工作总结03
    第二次冲刺-个人工作总结02
    第二次冲刺-个人工作总结01
    第一次冲刺-个人工作总结10
  • 原文地址:https://www.cnblogs.com/kybyano/p/8093931.html
Copyright © 2011-2022 走看看