LPC5500双核基本架构!LPC5500双核面貌特征

电子说

1.3w人已加入

描述

这次奉上与LPC5500“核心”相关的“硬核”技术——双核,以飨读者。诚然,MCU双核已不是什么新鲜玩意儿。但是,LPC5500博采了LPC4300和LPC54110这两个系列所长,使得双核更简单实用。

LPC5500双核基本架构

双核并不高深,所谓双核就是两个CPU——中央处理单元,也就是一个MCU芯片内置了两个CPU。

和之前支持双核的LPC系列一样,针对于MCU嵌入式应用,LPC5500依然采用简单的非对称架构,即一个主CPU,一个从CPU,这类似于有些产品采用主MCU和从MCU的设计。只是支持双核的MCU,是共享此MCU所有的存储器和外设接口资源。

共享就带来竞争的问题,处理不当则影响性能。LPC5500有配套的系统架构来使得此共享可转化为并行的,从而尽量避免竞争,来保证性能不被影响。

应对竞争架构上的考虑,如下图所示,主要有两条:

内部AHB总线是多层矩阵架构;

分离出多块独立的SRAM。

存储器

图中所示:红色框是多层AHB矩阵总线;绿色框是多块分立的存储块。主CPU和从CPU的代码数据可存放在不同存储块中,它们和图中左下角大量外设接口并行的挂在矩阵总线上。

这样,蓝色框中的双核CPU0和CPU1,可以同时并行地对存储块和外设接口进行访问,即程序可以同时运行。如此,则双核的威力能够得以充分的发挥。

至此,我们初步认识了LPC5500双核,了解了其基本框架。但是,这好比我们只是远远的看见了一个人,大概知道其身形,他具体容貌怎样的呢?让我们一起往下看

LPC5500双核面貌特征

上面提到,LPC5500双核分为主从,主CPU命名为CPU0,从CPU命名为CPU1。它们都是基于ARM Cortex-M33的。

它们的基本配置构成如下:

1、CPU0 (r0p3版):

频率最高可达100MHz

TrustZone、DSP、浮点单元和存储保护单元(MPU)

内置嵌套向量中断控制器(NVIC)

串行线调试接口(SWD)

系统嘀嗒定时器(System tick timer)

内置嵌套向量中断控制器(NVIC)

串行线调试接口(SWD)

系统嘀嗒定时器(System tick timer)

2、CPU1 (r0p3版):

频率最高可达100 MHz

内置嵌套向量中断控制器(NVIC)

串行线调试接口(SWD)

系统嘀嗒定时器(System tick timer)

显然,作为从的CPU1比主CPU0少了TrustZone、浮点单元(FPU)等,这使得主CPU0天然地计算处理能力更强。

但是赋予主CPU0这些亮点,不是让它做颜值担当,而是任务担当的。这让我们自然想到双核的典型应用——相信这也是大家很关心的。

LPC5500双核典型应用

LPC5500的双核典型应用,即基本应用思路,与之前LPC4300和LPC54110一样。

主CPU用来做处理计算任务(比如算法),从CPU负责外设实时控制和数据传输。

这样,能充分利用双核达到更好性能。参见下图:

哦,LPC5500双核很“酷”的样子,有点“喜欢”上它了,可是,相爱容易相处难啊?!

不要担心,难,那是因为不懂得如何“相处”。

接下来,让我们来聊聊如何和LPC5500双核“相处”——双核的实现,这主要涉及到以下内容:双核启动;双核通讯;双核调试。

1双核启动

对于单核MCU,上电启动过程简单明了,如单身狗的生活简单自由,该干啥干啥,不能指望也无需考虑他人。

两人世界就需要协商着行动了,LPC5500采取了和最早LPC4300系列类似的双核启动机制,即出厂默认并固定一个核为主,另一个为从,不能更改,“专制”却简单易用。

随后的LPC54110系列则实行“民主”机制,两个核可以轮流坐庄,即用户可以在启动过程中选择其中之一为主核,这样提供了灵活性,但略微复杂。

为了简单起见,如今新的LPC5500双核使用固定的主从模式。

LPC5500上电时,自然地按照主从,主核CPU0如单核一样直接启动,从核CPU1则hold住不动——这由硬件自动完成。

主核启动后负责初始化运行环境,然后配置好从核的启动地址(即从核代码映像运行的起始地址),最后释放从核CPU1——这些由软件完成。这时,主从双核就分别如同单核一样同时运行它们各自的代码了。

要让双核“和谐”运作,关键是要让两个核的代码映像存储和运行空间独立互不干扰(参见前面关于多层总线矩阵和多块存储块的介绍),这点具体实现方法是灵活的,比单核来得复杂些。这里就不具体展开,有需要的可找相关资料学习,比如,我们有篇应用笔记通过测试双核coremark分数,提供了一种达到最好性能的实现方法。不关心这些细节也不用担心,NXP已经提供了相关SDK库可直接借用。

2双核通讯

当两个核都运行起来后,它们可以像两个不同行业的人,各自做着自己的本职工作,默默为社会贡献自己的力量,老死不相往来。但大多数应用中,两个核除了各司其职,还需要互相通讯,协同工作。

LPC5500提供了一套简单的硬件通讯机制,叫内部CPU邮箱通讯机制,可以适用于大多数嵌入式系统双核的通讯应用。

这套机制从LPC54110系列继承而来,最早的LPC4300系列双核通讯几乎完全靠软件来实现,占用资源,且给使用带来不少难度。目前这套机制,简单易用,但不死板,留给用户一定灵活发挥空间。

它主要提供了两种寄存器,一种是32位的CPU中断寄存器,两个CPU都能访问它,32位中只要有一位不为零,就能产生中断请求,且每一位可代表一个不同状况,比如事件或者状态,这完全可由用户自己定义。

这样CPU间就可相互实时通讯了,比如一个CPU完成某项任务,写入一个非0值到此寄存器,发出中断信号,另一CPU中断后读取此值,来决定后续工作。

通讯的一大需求就是同步,这就需要另一个叫做互斥寄存器的来完成,它只有第0位(bit0)可用,复位后默认值为1。当读此寄存器时,读出数值的同时这位自动被清0;当写它时,这位将再次被置为1。

此正是互斥量的特性,以用于实现CPU间对任何共享资源的握手同步。例如,当一个CPU要访问某共享资源时,先读此寄存器,若读到的是1,表示资源可用,同时1被自动清为0;若读到0,则表示资源被占用;在CPU用完共享资源时,即写此寄存器,使其置1,表示释放了资源为可用。

这套邮箱机制简单框架图如下:

存储器

顺便提下,我们在LPC5500 SDK包中还提供了一套开源多核软件开发包,包括库和大量例程。通过库的API提供了支持用户实现复杂的多核通讯机制。

这套多核SDK的库代码包含在LPC5500SDK包以下路径:

middlewaremulticore

例程则在:

oardslpcxpresso55s69multicore_examples

3双核调试

LPC5500的双核都支持SWD调试模式,就调试的级别来说,它们是”平等”的。实际实现时,每个核一般有自己的工程,它们各自的调试和单核无异。

但在两个核有关联时(即前面提到的双核启动和双核通讯过程),调试要有所注意,关键就是要真正理解了这两个过程机制,依据这两个机制的特点进行调试,则基本没什么问题。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分