基于DUAL-PORT RAM的双CPU快速通讯

2024-02-20 00:18
文章标签 快速 cpu 通讯 ram port dual

本文主要是介绍基于DUAL-PORT RAM的双CPU快速通讯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相信大家对以下几种双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快速通讯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/726456

相关文章

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例