• 28335XINTF的简单使用


    28335 XINTF基本特点

    1. 一共有三个外部存储区域:区域0(Zone 0),区域6(Zone 6)和区域7(Zone 7).对应的
      访问地址为:Zone 0:0x0000_4000-0x0000_4fff,Zone 6:0x0010_0000-0x001f_ffff,
      Zone 7:0x0020_0000-0x002f_ffff.当访问对应的地址时,对应的外部片选信号(XZCS0,XZCS6,
      XZCS7)会使能(保持低电平)。
    2. 所有区域都支持DMA访问,且数据位宽16位和32位可选
    3. 所有外部存储器配置寄存器受ELLOW保护
    4. 有一个可选的外部存储器时钟输出引脚
    5. 独立灵活配置的数据建立(Lead)、保持(Active)、追踪(Trail)时间,且保持时间可根据外部设备的需求在此基础上增加。

    时钟源

    外部存储器时钟和系统时钟的关系图如下图所示:
    XINTF时钟
    图中共有三个时钟:SYSCLKOUT,XTIMCLK和XCLKOUT。两个寄存器:XINTCNF2和PCLKR3。
    其中SYSCLKOUT为系统时钟,一般为150Mhz。XTIMCLK为外部存储器使用的时钟,所有的时序实现都是基于这个时钟,并且都是在其上升沿动作。XCLKOUT时钟为可选的输出时钟,这个时钟直接输出到XCLKOUT引脚,如果不需要输出时钟的话,为了减少噪声干扰最好将这个时钟关闭。
    XINTCNF2寄存器里面的位定义了时钟的分频情况和是否使能时钟输出。PCLKR3为外部存储器外设时钟的使能信号。在配置XINTF模块任何寄存器之前必须要使能该时钟。
    关于外设这里多说几句:我们看到很多嵌入式芯片的应用资料和说明手册都会提到这个词,实际上,这个词有两种不同的含义。一层意义是Peripheral,即CPU外围设备,比如DSP28335中的ECAP,EPWM,ADC等都属于Peripheral.另一层意思是External Devices,即DSP芯片之外的设备,比如这里XINTF外接的存储器等。

    信号引脚

    引脚 类型 描述
    XD(31:0) I/O/Z 双向32位数据总线,16位总线使用XD(15:0)
    XA(31:1) O/Z 地址总线
    XA0/!(XWE1) O/Z 16位数据模式,此为地址线0(XA0),32位数据模式为写选通1(!(XWE1))
    XCLKOUT O/Z 可选时钟输出引脚
    !(XWE0) O/Z 写选通信号0
    !(XRD) O/Z 读选通信号
    XR/!(W) O/Z 读写控制,高读低写。此信号一般不用,上面的读写选通更清楚
    !(XZCS0,6,7) O 片选信号
    XREADY I 可选的扩展信号,说明外设是否完成传输,DSP根据此信号增加额外的时间
    !(XHOLD) I 请求XINTF释放外部总线
    !(XHOLDA) O/Z XINTF已经释放的外部总线

    ps: !(信号)表示这个信号为低电平有效,否则为高电平有效。

    时序图

    通用时序图

    下图中为外部存储器读写的通用时序图:
    通用时序图

    1. XTIMCLK的时钟频率可以为SYSCLKOUT的不分频和2分频,这里选择的是不分配。同样,XCLKOUT的时钟频率可以是XTIMCLK的不分配和2分配,这里选择2分配。
    2. 时序信号的动作和XCLKOUT无关,仅由XTIMCLK决定。这里设置的建立、保存、追踪时间都是2.
    3. 两次读写之间有一个空闲的Alignment Cycle时间。

    读取时序图

    下图为XINTF的读取时序图:
    读时序图

    1. 读取时序图列出了大部分读取时的信号时序,上面这些时序并不是都会产生的。比如第三个时序XCLKOUT(/1 Mode)和第四个时序XCLKOUT(/2 Mode)最多只会出现一个。但将这两种可能都列出来了。
    2. XREADY是扩展信号,是外部设备通知其读写是否需要额外的时钟给保持时间。有同步(synchronize)和非同步(asynchronize)两种。一般不用,这里不详细解释,需要的话可以自己查看数据手册。
    3. 建立、保持和拖尾时间的设定值分别为2,4,2(保持时间=设定值+1=5,时间配置不加倍的情况下)。
    4. 由图可以看出外部设备必须要在!(XRD)上升沿之前将数据准备好,以便供DSP读取。

    写入时序图

    下图为XINTF的写入时序图:
    写时序图
    写时序图和读时序图差不多,这里不再过多的介绍。对于写时序图由于数据总线为DSP驱动,其会在!(XWE0[1])的下降沿输出数据,因此外部设备应该在其上升沿将数据读出。

    XINTF的配置

    在了解时序图之后,配置XINTF就比较轻松了。这里不讨论DMA访问和加入XREADY信号的情况。也不对各个模式下时序要求做过多说明。如果需要了解这方面的内容请查看具体的数据手册。这里只对通常情况下的使用进行说明。假设我们将一个FPGA当作外部存储器,并挂在了区域7上。

    1. 使能XINTF的时钟:
      SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;

    2. 将对应的IO配置为XINTF外设使用:
      EALLOW;
      GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 3; // 数据线0:XD0
      ...
      GpioCtrlRegs.GPBMUX1.bit.GPIO40 = 3; // 地址线1(这里使用16位数据位宽),XA0/XWE1n
      ...
      GpioCtrlRegs.GPBMUX1.bit.GPIO38 = 3; // XWE0 写使能(读使能不可复用不用配置)
      GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3; // XZCS7 片选
      EDIS;

    3. 配置XINTCNF2寄存器,这个寄存器的配置对所有的外部区域都有用。下面所有的寄存器都受EALLOW保护,因此配置之前需要使用EALLOW取消保护。
      XintfRegs.XINTCNF2.bit.XTIMCLK = 0; //XTIMCLK等于SYSCLK
      XintfRegs.XINTCNF2.bit.CLKOFF = 1; //禁止XCLKOUT时钟输出
      XintfRegs.XINTCNF2.bit.WRBUFF = 0; //不使用写缓冲

    4. 配置区域7的时序信号
      XintfRegs.XTIMING7.bit.XWRLEAD = 1; //写建立时间=1 XTIMCLK
      XintfRegs.XTIMING7.bit.XWRACTIVE = 2; //写保持时间=2+1 XTIMCLK
      XintfRegs.XTIMING7.bit.XWRTRAIL = 1; //写追踪时间=1 XTIMCLK
        
      XintfRegs.XTIMING7.bit.XRDLEAD = 1; //读建立时间=1 XTIMCLK
      XintfRegs.XTIMING7.bit.XRDACTIVE = 3; //读保持时间=3+1 XTIMCLK
      XintfRegs.XTIMING7.bit.XRDTRAIL = 0; //读追踪时间=0 XTIMCLK
        
      XintfRegs.XTIMING7.bit.USEREADY = 0; //不适用XREADY信号
      XintfRegs.XTIMING7.bit.READYMODE = 0;
        
      XintfRegs.XTIMING7.bit.X2TIMING = 0; //配置时间不加倍
        
      XintfRegs.XTIMING7.bit.XSIZE = 3; //16位位宽访问

    5. 加入必要的等待时间,以保证配置完成。同时不要忘了使用EDIS加写入保护
      asm(" RPT #7 || NOP");

  • 相关阅读:
    获取指定字符传的长度或者高度
    检测身份证号码是否合法
    tabbar添加小红点
    单例的简单构造
    iOS程序内发短信
    多项式加法运算 使用链表实现
    链表的数组实现
    使用链表实现堆栈
    使用链表实现堆栈
    求最大子列和的几种方法
  • 原文地址:https://www.cnblogs.com/yabin/p/6357383.html
Copyright © 2020-2023  润新知