从去年10月份开始学习lpc4357双核开发板,双核最主要的难点就是如何实现M4与M0的通信。nxp提供了3种通信机制,结合自己的理解整理如下:

1.Interrupt

M4与M0各自有自己的NVIC控制机器,自然就有自己的中断向量表,与以往单核不同的是,M4的中断向量表里面多了一个M0CORE_IRQHandler(称之为来自m0的中断),M0多了一个M4CORE_IRQHandler(称之为来自m4的中断)。也就是说M4可以中断M0,M0也可以中断M4。这种中断方式的通信只是作为简单的通知事件,并没有实际的数据传输。如果一个核想要中断另一个核,它只需要执行一个SEV指令(由Cortex结构提供)。那么远方的核(执行SEV指令的的核称之为local core)就会跳转到中断处理函数去执行。在中断处理函数中,我们可以做一些简单的操作,比如点亮或者关闭led。

2.Message queue

这种方式我们称之为消息队列,在内存区域中分配2个buffer,一个为CMD_BUFFER,一个为MSG_BUFFER。每个buffer都有以下4个量进行定义,QstartAddress、QendAddress、RdPtr、WrPtr。CMD_BUFFER只允许M4往里面写,M0从里面读;MSG_BUFFER只允许M0往里面写,M4从里面读。每写完一次WrPtr++、每读完一次RdPtr++。由于M4与M0读写的地址不一样,这样就不出会出现同时往同一个地址写所产生的冲突。再往队列写之前都要先查看下队列的状态,若队列不是满的(判断队列的状态分好几种情况,这里只简单介绍一种,如果WrPtr+size>=RdPtr,就认为队列为满,不能插入新的数据),那么就往里面写数据,并WrPtr++,然后通知远方的处理器。规定WrPtr==RdPtr时,队列的状态为空。远方的处理器在接收到来自另外的一个处理器发来的中断后,就从队列里读出数据(首先先判断队列不为空)。从M4发出的command的形式有以下2种:

第一个为读命令,没有实际的数据传递,只作为通知事件使用。第二个命令为写命令,后跟一个32bit的参数。

从M0发出的message的类型有以下几种:

实际使用中只需要关心第二个带参数的msg即可。

3.Mailbox

这种通信方式的命名来源于生活中的邮箱,因为它们非常相似。每个处理器可以有一个或者多个邮箱。每个邮箱有以下几个参数进行定义:

Message type(消息的类型)
Message id(消息的ID号)
32- bit parameter(32位的参数)
Callback function(回调函数)

每个邮箱有几下几种状态:

1.READY(邮箱处于就绪状态,可以往里面写消息)
2.PROCESS(书写消息完成)
3.BUSY(正在处理消息)
4.ERROR(错误)

每个处理器只能从自己的邮箱里读数据,向另外一个处理器的邮箱里写数据(就像我们只能往别人家的信箱投递信件,而只能从自己家的信箱取信件一样)。在写数据之前首先要询问邮箱的状态,如果为ready,即可写入,否则不能写。写完之后就通过中断通知remote core读取数据。

以上三种通信方式,中断只是用于简单的通知时间,邮箱和消息队列才是双核之间相互传递数据的方法。

lpc43xx双核处理器之双核通信相关推荐

  1. TI基于DSP+ARM的双核架构如何相互通信

    1 通信结构简介 针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法 ...

  2. Proteus模拟STM32F103R6微控制器之串口通信USART的方法

    Proteus模拟STM32F103R6微控制器之串口通信USART的方法,实验环境如下: 模拟软件:Proteus 8.11 SP0 开发环境:Keil MDK 5.33 参考资料:ST公司官方参考 ...

  3. 双核处理器的双核是什么意思?

    在双核CPU广告满天飞的时候,你对双核CPU了解又有多少呢???什么叫双核CPU呢?双核CPU和双CPU的区别又是什么呢?以下将会祥细为你介绍一下,想"充电"的话就准备好罗.... ...

  4. LPC43xx双核笔记

    简介 本页提供了一些使用LPC43xx器件双核特性的基本信息.此页面上的信息和专题使用Keil uVision4工具,以双核工程的使用来演示.该工程初始化两个内核以运行FreeRTOS,并采用三色LE ...

  5. 电脑双核CPU具体是什么意思?

    双核就是2个核心 核心(Die)又称为内核,是CPU最重要的组成部分.CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算.接受/存储命令.处理数据都由核心执行.各 ...

  6. 什么叫双核、四核、八核?

    双核心:随着近日英特尔.AMD推出各种双核CPU新品,"双核"概念在业内逐渐升温.有意思的是,虽然都是双核,英特尔和AMD确各谈各的.英特尔大谈双核到桌面,AMD则直取双核的服务器 ...

  7. 信息机房双核与双路服务器的区别,双路和双核的区别 - 卡饭网

    关于CPU单核单路/双路和双核双路的区别 关于CPU单核单路/双路和双核双路的区别 双核处理器是指在一个处理器上集成两个运算核心,从而提高计算能力."双核"的概念最早是由IBM.H ...

  8. 第九节,ZYNQ的双核启动

    ZYNQ的双核启动 1 双核运行原理 ZYNQ是一种主从关系的AMP架构,通过松散耦合共享资源,允许两个处理器同时运行自己的操作系统或者裸机应用程序,在各自运行自己的程序或者系统的时候,可以通过共享内 ...

  9. 嵌入式linux和dsp,嵌入式uClinux和双核DSP在视频编码系统中的应用研究

    摘要: 嵌入式视频编码系统在多媒体处理领域有相当广泛的应用,它是指以嵌入式方式实现的视频信号编码器.对于复杂的应用来讲,还应该有较好的网络传输功能甚至是视频解码功能,这就对系统处理器有了更高的要求.论 ...

最新文章

  1. 入门Python之后还是搞不定面试、做不来项目,推荐读读这本书
  2. 2019BATJ面试题汇总详解:MyBatis+MySQL+Spring+Redis+多线程
  3. git 添加用户名和邮箱_设置 Git 账户及邮箱
  4. OPA 3 - thirdParty Qunit.js and IFrame load logic
  5. Vue项目启动后Error: Cannot find module ‘xxx’的解决方法
  6. c语言数字和字母输出的,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  7. 计算机软件系统课程导入,中学信息技术 计算机系统的组成课件 硬件软件导入恰当...
  8. 阵列函数 java_Java复制阵列– Java中的阵列复制
  9. LightGBM官方中文文档上线啦!
  10. Scala学习——隐式转换
  11. 各种常用的 Win32Api 汇总(持续更新中. . .)
  12. 局域网 如何连接主机_局域网远程操控电脑方法
  13. 智能电气阀门定位器原理
  14. java项目实现html转pdf的需求(支持中文和CSS样式)
  15. 雷电模拟器android文件夹在哪,雷电安卓模拟器共享文件怎么用?电脑文件与模拟器互通图文教程...
  16. 7款强大的免费PDF批量分割软件【附下载】
  17. python调用浏览器内核_python做个谷歌内核浏览器
  18. 对产品经理来说,PMP和NPDP两个证书,哪一个权威性比较大?
  19. HQL的执行顺序(这是重点)
  20. MFC添加加瓦系列一MFC编写的增量更新软件

热门文章

  1. zookeeper配置文件
  2. 谷歌浏览器问题事件BEX和浏览器闪退崩溃异常解决
  3. 谷歌浏览器Chrome闪退
  4. 当物理学遇到机器学习:基于物理知识的机器学习综述
  5. python 易盛行情_易盛信息9.0外盘期货行情数据API接口公共授权开发包例子代码...
  6. 全球最先进超级智能闸口无人闸口视频流动态感知集装箱残损检测,中集集团高科技企业全球港航人工智能独角兽智慧港口智能码头智能港口码头
  7. tracepath 路由跟踪命令
  8. Python笔记——类定义
  9. Typora常用LaTex
  10. 中国移动研发出大容量SIM卡