先看一下有哪一些接口,由于我最近查阅的资料比较多,可能介绍的有点凌乱,故而也有必要记录下来,整理一下。言归正传,这些接口是EMIF与外界通信的接口,能够方便的解决数据传输的问题。
我喜欢根据图来求证怎么工作,最终解决问题。左边接口是加强型的数据存储控制器,就是常说的EDMA;下面是内部外设总线,就是说对外设状态的配置,寄存器的操作通过这些总线来实现。如果接触过F2812,或者用过其他片子的同学,对于图右边的各种接口肯定就不会陌生了。
ED[31:0],32位的数据接口,C6712只有16位,另外,由于片子封装的不同,可能包含的接口数也不同,我选择的是PYP封装,所以只有16位的数据pin。
EA[21:2],20位的地址总线。
CE[3:0],是存储空间选择,低电平有效,是一个输出信号,那个信号为底了,就证明是那个空间被选中了,个人感觉这个信号也可以做外部存储器的片选信号,表示哪个存储器被选中了。
BE[3:0],低电平有效,字节和半字激活,我准备使用16bit的小端模式,所以BE0=0,BE1=0;分别掌控的是ED[7:0]和ED[15:8]的数据位。
接下来是三对共享的接口,是异步存储器,SDRAM,SBSRAM共享的控制接口,但是接的存储器不同,接口的含义是不一样的,控制的东西也是不一样的,由于我做的是异步接口,所以只分析AOE,ARE,AWR。先查看一段英文,了解一下AsynchronousInterface能完成什么事情。
The asynchronous interface offers configurable memory cycletypes to interface to a variety of memory and peripheral types,including SRAM, EPROM, and flash memory, as well as FPGA and ASICdesigns.
主要是用作SRAM,EPROM,FlashMemory,FPGA,ASIC这些接口。正好我所需要接的是FPGA,能够满足要求。证明我的设计思路没有问题,可以继续往下进行。
AOE,在读访问周期保持低;
AWE,在写被激活的时候,保持低。就是说要写了,该位就为低电平了。
ARE,对应的为读被激活的时候保持低。由于我的DSP只是从FPGA中读数据,并没有写的过程,所以,对于该信号我会更加关注一些。
ARDY,插入等待状态,直接接高就好了,允许有等待状态的插入,说白了就是让时序能够匹配起来。
HOLD,HOLDA是低电平的时候就响应外部总线请求。更具前面文章中介绍的F2812来说就是:为低的时候,外部的设备和DSP之间是不进行数据交换的,是其他的设备控制了这个与DSP相连接的设备。所以也可以看见,开发板上直接吧这两个信号接高了,就是说一直处于DSP和外部设备数据交换的状态,不同意不交换的状态。
BUSREQ,显示等待刷新或内存访问,保持高的输出状态,就能够实现该功能了。
介绍外这些信号线,最后来介绍一下最关键的时钟,因为做接口不得不涉及到时钟,个人认为时钟是接口通信的灵魂。
ECLKOUT,时钟输出,EMIF的接口中所有的IO口都是在这个时钟的影响下工作的,也就是说这个时钟是一个参考源。
ECLKIN,时钟输入,由系统提供。对于这个管脚我的认识是,如果外界设备是主动发数据,就应该有一个对应的时钟,这时候将ECLKOUT接到ECLKIN,那么DSP就处于一种被动的接收数据的状态。也就是我们说的读状态。使用这一种方式也能够实现时钟速度的匹配。