基于DUAL-PORT RAM的双CPU快速通讯
来源:互联网 发布:java tld 自定义标签 编辑:程序博客网 时间:2024/04/29 15:58
相信大家对以下几种双CPU之间通讯的方法可能有所耳闻:
1.使用双口RAM。
2.利用I/O口进行并行通信。
3.利用串口进行通信。
4.共享内存。
几种方法的优缺点,这里就不再具体说明了,不清楚的朋友呢,可以Google、百度一下“双CPU通讯”,应该会有不少的文章来说明!
这里,我主要想说一下双口RAM的通讯,具体以IDT71V321S为例:
芯片原理图如下:
从原理图我们可以清楚看到,其实通讯的原理很简单,就是通过双CPU以中断的方式进行内存读写控制来完成的,/BUSY引脚起写保护的作用。
硬件设计比较简单,只需参考芯片引脚定义连接到不同CPU即可,在此就不列图说明了!
软件设计,我们可以可以参考Datasheet P12 Table2:
(下面我们用L-CPU表示连接到Left Port的CPU,R-CPU表示连接到Right Port的CPU)
从表中中可以看出,当
R-CPU写数据到0x7FE地址时,会引发L-CPU的中断
L-CPU写数据到0x7FF地址时,会引发R-CPU的中断
因此,我们可以以命令的方式来实现L-CPU与R-CPU之间的通讯,具体实现如下:
1. 利用0x7FE、0x7FF两个地址分别存储通讯的命令类型及响应
2. 根据需要,在双口RAM中定义一段内存作为命令Buffer,以存储参数或作为其它用途
3. 通讯时,先写入参数或其它数据到命令Buffer,然后再写入命令类型到0x7FE/0x7FF
4. 当对方CPU收到中断响应时,读取0x7FE/0x7FF命令类型,然后进行处理
5. 数据处理完成后,写入响应到0x7FE/0x7FF地址,至此,一次通讯就完成了
下面给出发送命令及中断处理的简单原型:
SendCommandToXCPU(unsigned char cmdType, unsigned char*cmdBuf, int cmdLen)
{
写入数据(cmdBuf)到用户定义Buffer
// 发送命令
根据不同CPU向0x7FE/0x7FF写入cmdType
}
void InterruptSupport()
{
//读取命令
从地址0x7FE/0x7FF读取命令类型
switch(cmdType)
{
case xxx:
//通知OS或者根据需要处理命令Buffer等
}
}
- 基于DUAL-PORT RAM的双CPU快速通讯
- 异步双口RAM的综合【异步Dual Port RAM(DPRAM)】
- simple dual port ram与true dual port ram区别
- 基于已知RAM与ROM的主存扩展和主存与CPU物理连接
- 端口 port CMOS RAM
- [altera MegaFunction] RAM-1 Port IP的使用
- CPU/RAM/IO总线的发展历史!
- 基于FPGA的双口RAM设计方法
- 用于快速计算的DUAL表
- poj3469 - Dual Core CPU
- poj Dual Core CPU
- Dual Core CPU
- POJ3469 Dual Core CPU
- POJ3469-Dual Core CPU
- poj3469 Dual Core CPU
- Dual Core CPU POJ
- POJ3469 Dual Core CPU
- POJ3469:Dual Core CPU
- 模拟器中文乱码问题
- oracle +c#循序渐进
- PKG语法详细说明 常用高级选项
- April 8th Tuesday 2010
- FM Desktop的一些消息
- 基于DUAL-PORT RAM的双CPU快速通讯
- TreeView数据集绑定及取值
- Struts2 笔记
- js编码函数
- CSS 之Position详解
- sp_executesql
- css+div CSS教程——元素定位
- SCM(Software Configuration Management)备忘笔记
- 最少拦截系统 hdu 1257