28335XINTF的简单使用
28335 XINTF基本特点
- 一共有三个外部存储区域:区域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)会使能(保持低电平)。 - 所有区域都支持DMA访问,且数据位宽16位和32位可选。
- 所有外部存储器配置寄存器受ELLOW保护。
- 有一个可选的外部存储器时钟输出引脚。
- 可独立灵活配置的数据建立(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: !(信号)表示这个信号为低电平有效,否则为高电平有效。
时序图
通用时序图
下图中为外部存储器读写的通用时序图:

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

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

写时序图和读时序图差不多,这里不再过多的介绍。对于写时序图由于数据总线为DSP驱动,其会在!(XWE0[1])的下降沿输出数据,因此外部设备应该在其上升沿将数据读出。
XINTF的配置
在了解时序图之后,配置XINTF就比较轻松了。这里不讨论DMA访问和加入XREADY信号的情况。也不对各个模式下时序要求做过多说明。如果需要了解这方面的内容请查看具体的数据手册。这里只对通常情况下的使用进行说明。假设我们将一个FPGA当作外部存储器,并挂在了区域7上。
- 使能XINTF的时钟:
SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1; - 将对应的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; - 配置XINTCNF2寄存器,这个寄存器的配置对所有的外部区域都有用。下面所有的寄存器都受EALLOW保护,因此配置之前需要使用EALLOW取消保护。
XintfRegs.XINTCNF2.bit.XTIMCLK = 0; //XTIMCLK等于SYSCLK
XintfRegs.XINTCNF2.bit.CLKOFF = 1; //禁止XCLKOUT时钟输出
XintfRegs.XINTCNF2.bit.WRBUFF = 0; //不使用写缓冲 配置区域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位位宽访问加入必要的等待时间,以保证配置完成。同时不要忘了使用EDIS加写入保护
asm(" RPT #7 || NOP");
28335XINTF的简单使用的更多相关文章
- 【造轮子】打造一个简单的万能Excel读写工具
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...
- 在Openfire上弄一个简单的推送系统
推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 使用 Nodejs 搭建简单的Web服务器
使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...
- ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
随机推荐
- Django使用自定义的authentication登录认证
import ldap class LDAPMgmt(): def __init__(self): self.ldap_host = 'xxx' self.ldap_base_dn = 'ou=xx, ...
- unity 数学公式
Mathf.Abs绝对值 计算并返回指定参数 f 绝对值. Mathf.Acos反余弦 static function Acos (f : float) : float 以弧度为单位计算并返回参数 f ...
- 2018面向对象程序设计(Java)第10周学习指导及要求
2018面向对象程序设计(Java)第10周学习指导及要求(2018.11.1-2018.11.4) 学习目标 理解泛型概念: 掌握泛型类的定义与使用: 掌握泛型方法的声明与使用: 掌握泛型接口的定 ...
- CentOS6编译安装php5.3
一.CentOS6编译安装php5.3 1.安装扩展 yum install -y openssl-devel traceroute libtool unzip gcc gcc-c++ autocon ...
- Calling Synchronous Methods Asynchronously
[Calling Synchronous Methods Asynchronously] 使用 .NET Framework 可以以异步方式调用任何方法. 要实现此操作,请定义一个委托,此委托具有与你 ...
- Vue-axios快速上手(转)
引入方式: 1 2 3 4 5 $ npm install axios $ cnpm install axios //taobao源 $ bower install axios 或者使用cdn: &l ...
- as3.0复制影片简介(自我复制的三种形式)
//mc是被复制影片简介的实例名,(===在库中找到mc影片简介,右击“属性”,点击“为actionscript导出”,选中确定即可===这个是重点) var newSprite:Sprite=mc; ...
- c++三种进制格式
来源:c++ primer plus 常用的进制有二进制,八进制,十进制,十六进制,在c++的头文件iostream里除了提供了endl控制符之外,还提供了控制进制的控制符,(不含二进制),分别是八进 ...
- 江西财经大学第一届程序设计竞赛 F题 解方程
链接:https://www.nowcoder.com/acm/contest/115/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...
- POJ-3278.CatchThatCow(数字BFS最短路输出)
本题大意:一个农夫和一头牛在一个数轴上,牛不动,农夫每次可使自己的坐标 +1 , -1, *2 ,问最小需要多少次农夫与牛坐标相等. 本题思路:最短路,BFS. 本题代码: #include < ...