请选择 进入手机版 | 继续访问电脑版
查看: 1549|回复: 0

[分享] LPC5500双核基本架构!LPC5500双核面貌特征

[复制链接]
  • TA的每日心情
    开心
    2021-12-31 14:33
  • 签到天数: 45 天

    [LV.5]常住居民I

    48

    主题

    131

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1129
    最后登录
    2024-3-29
    发表于 2019-7-24 12:47:40 | 显示全部楼层 |阅读模式
    这次奉上与LPC5500“核心”相关的“硬核”技术——双核,以飨读者。诚然,MCU双核已不是什么新鲜玩意儿。但是,LPC5500博采了LPC4300和LPC54110这两个系列所长,使得双核更简单实用。

    LPC5500双核基本架构


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

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

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

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

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

    分离出多块独立的SRAM。
    13.png
    图中所示:红色框是多层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负责外设实时控制和数据传输。

    这样,能充分利用双核达到更好性能。参见下图:
    14.png
    哦,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,表示释放了资源为可用。

    这套邮箱机制简单框架图如下:
    15.png
    顺便提下,我们在LPC5500 SDK包中还提供了一套开源多核软件开发包,包括库和大量例程。通过库的API提供了支持用户实现复杂的多核通讯机制。

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

    \middleware\multicore

    例程则在:

    \boards\lpcxpresso55s69\multicore_examples

    3双核调试

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

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

    16.png




    11111签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-16 22:03 , Processed in 0.115054 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表