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)时间,且保持时间可根据外部设备的需求在此基础上增加。

时钟源

外部存储器时钟和系统时钟的关系图如下图所示:

图中共有三个时钟: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");

最新文章

  1. ado.net增删改查操作
  2. C语言的数据类型及其对应变量
  3. awk 和 sed 使用案例
  4. UVA 11795
  5. 【转载】C++中结构体的声明和定义
  6. Python实践之(七)逻辑回归(Logistic Regression)
  7. 如何删除google流氓扩展(强制安装,并且无权限删除)
  8. PAT 1011
  9. Android WebView缓存分析
  10. JavaScript 概览 更新时间2014-0414-0837
  11. c++多线程参数的传递
  12. Unkown2
  13. LeetCode #139. Word Break C#
  14. 关于js浮点数计算精度不准确问题的解决办法
  15. UnrealEd3视图导航及常用快捷键
  16. Go语言函数
  17. 量化投资的Python库——Tushare
  18. Java内存泄露分析和解决方案及Windows自带查看工具
  19. Flask从入门到精通之Flask表单
  20. 【Alpha】Daily Scrum Meeting 集合贴

热门文章

  1. Android签名
  2. CSS强制换行和禁止换行代码
  3. MySQL 各种主流 SQLServer 迁移到 MySQL 工具对比
  4. py3 读入和写入csv,txt文件
  5. 学习QT——GUI的基础用法(2)
  6. python 规范
  7. JXS In Depth
  8. Template literals
  9. NDK环境搭建方法2
  10. 彻底弄懂css中单位px和em,rem的区别