开发C6455的应用程序,一定会使用TI 提供的CSL(Chip Support Library),CSL 提供的API已经将底层的实现细节给我包装好了,我们只需要直接调用这些API就可以了。但是为了更好的使用这些API,我们很有必要仔细的分析这些API函数是怎样实现的。
CCS(Code Composer Studio)是TI公司开发的用于其公司的DSP,MSP等芯片的综合开发工具,CCS5.x的版本是基于Eclipse开发的,而CCS4.x以及其前面的版本的开发平台我不太清楚。
我使用的是CCS5.2,在CCS5.x中,CSL的库并不是默认被包含的该CCS中的,在查看详情中可以下载到最新的CSL库,下载下来的CSL库如下,
里面包含了这个库实现的源代码和我们需要的库文件和头文件,以及一个PDF格式的API Reference。
从上面的图我们可以看到,这个版本的CSL已经把INTC(中断管理)做出一个单独的模块了,而其他的外设放在了另外一个模块中。
使用的时候,我们必须在工程中加入头文件我库文件所在的路径以及库文件的名字,这样在编译器编译和链接的时候才能找到它们,不然会提示找不到的错误。
EMIF 是 External Memory Interface 的简称。个人认为它是 DSP 比较强大
的地方之一。通过 EMIF 接口,使得 DSP 可以和 FPGA 很方便地进行大数据量的数据传输。
C6455 的 EMIFA 可以访问多种外部存储器,比如:SRAM,ROM,FLASH 等等。当然,也包括 FPGA。本文的重点就是介绍使用 EMIFA 接口与 FPGA 建立无缝连接。
这是官方文档给出的 EMIFA 模块的接口示意图,乍一看,复杂的很。好多
引脚而且还有好多复用。没关系,我们再贴一张,你就会感觉轻松很多了。 这一张图首先是把 EMIFA 模块的接口分了类,然和呢,我把在与 FPGA 通信场合下所需要使用的管脚使用红色框框标注了出来。是不是少了很多呢。归纳一下标注的管脚,如下:
AED[63:0] 64 位数据总线
AEA[19:0] 20 位地址总线(Optional)
ACE2 片选信号(低有效)
AECLKOUT 时钟信号
ASWE 写使能(低有效)
ASRE 读使能(低有效)
(注:应用场合是 DSP 读 FPGA 内部 RAM 中的图像数据,其他场合续根据情况调整)
由于 FPGA 的可编程性,使得一切从 DSP 看来简单了许多。因为 DSP 面对的"存储器"显得格外智能。甚至连地址线都可以不需要。
下面,我们来一一分析上述的信号。
首先,应该是片选信号 CE。这里不得不提到 DSP 的地址空间。下图是
DSP6455 的 EMIFA 映射情况
从图中可以看出
EMIFA 共支持 4 个外部存储器,比如可以把 CE2 分配给 FPGA,CE3 分
配给 SRAM,CE4 分配给 FLASH 等。
每个外部存储器的寻址空间大小是 8MB。20 根地址线即 2 的 20 次方,
也就是 1MB,此外由于数据总线是 64 位的,故对应的寻址空间是 8MB
由于FPGA内部时序逻辑可以产生地址,所以我们可以不使用地址线。这样,下面的事情就简单了。只要把 CE2 管脚和 FPGA 的某一个通用 IO 口连上即可。在读取 FPGA 内部 RAM 数据时告诉 EDMA 要读取的数据的基地址是
0xA0000000,以及读取的数据的长度即可。
第二个信号,ECLKOUT,即时钟信号的。因为 FPGA 工作是需要时钟激励的,没有时钟信号怎么产生地址逻辑呢?此外,时钟频率不能过高,要考虑到 FPGA 芯片的能力。OK,因为有了同步时钟,所以 EMIFA 模块的工作模式
也就确定了,即同步工作模式。
第三个信号,包括 2 个,即 ASRE,ASWE。更熟悉的叫法是 RE,WE。读使能
和写使能。这个就不赘述了。
第四个信号,数据总线&地址总线。也不赘述了。