LPC54XX系列 LPC541xx是LPC Cortex-M内的主流且省电的MCU子系列微控制器,集成了双核功能。 LPC54102和LPC54114都具有这项特征。本应用笔记以LPC54114为例。 LPC541xx双核入门指南 第一版 0180307 AN12123.pdf-- LPC541xx dual core starting guide 关键词:LPC541xx,LPC54102, LPC54114,双核 1.介绍 在LPCCortex-M 微控制器中,LPC541xx 是主流高能效的MCU 子系列,集成了双核功能。LPC54102 和LPC54114 均有双核功能,但存在差异。本应用笔记以 LPC54114 为例进行解释。 LPC541xx 采用非对称双核机制,将 Cortex-M4F 和 Cortex-M0+ 集成。有关这些内核的详细规范,请参阅 ARM 中的以下文档: 本应用说明首先简要介绍LPC541xx双核功能和实现,然后使用MCUXpresso IDE 和MCUXpresso SDK详述开发过程。 2. 功能和实现 2.1功能 LPC541xx 双处理器核心功能包括: • ARM®Cortex®-M4 CPU o ARM Cortex-M4 处理器,运行频率高达 100 MHz o 浮点单元 (FPU)和内存保护单元 (MPU) o ARM Cortex-M4 内置嵌套矢量中断控制器 (NVIC) o 所选源的不可屏蔽中断 (NMI) o 8 个断点和 4 个观察点的串行调试(SWD);包括增强调试用串行输出。 o 系统滴答计时器 • ARM®Cortex®-M0+ CPU o ARM Cortex-M0+ 处理器,运行频率高达100 MHz(Cortex-M4 相同的时钟)。 o ARM Cortex-M0+ 内置嵌套矢量中断控制器 (NVIC) o 所选源的不可屏蔽中断 (NMI) o 四个断点和两个观察点的串行调试 (SWD)。 o 系统滴答计时器 2.2 实现 Fig 1 LPC5410x框图 Fig 2 LPC5411x框图 在 LPC5410x 和 LPC5411x 中,两个内核都作为主内核驻留AHB 总线,访问优先级可由用户应用程序进行配置,有关配置详细信息,参阅 LPC5410x 或 LPC5411x 用户手册(第 4 章:系统配置)。 两个内核均在同一时钟上运行,高达 100 MHz,所有 AHB/APB 从器件(如内存、计时器和其他外围设备)都可以同等访问或控制。SRAM分为多组,均可根据需要可独立打开和关闭其电源以节省电量,两个内核可同时访问不同的 SRAM 组,且不会发生争用。闪存块是共用的,所以其中一个内核(通常是子核M0)要在 SRAM 中运行代码。 图 1 和图 2 中内核和内存之间的加亮显示了内核和存储的连接,LPC5410x 和 LPC5411x有不同的内存实现。LPC5410x的所有存储器(闪存和 SRAM)都连接到其 I 代码和 D 代码总线。对于 LPC5411x,仅闪存和 SRAMX 连接到 I 和 D 代码总线,其余内存使用系统总线。内存上的不同总线连接可能会导致不同的性能。因此,应谨慎分配资源以实现最佳; 参阅第 3 节。 Cortex-M4 包含三个外部 AHB 总线接口: • 用于指令提取的 I 代码内存接口 • 用于数据和调试访问的 D 代码内存接口 • 用于指令提取、数据和调试访问的系统接口 Cortex-M0+ 只有一个 AHB 主总线接口,该接口连接所有 AHB/APB 从站。详细的总线接口定义,参阅:Cortex M4 处理器技术参考手册和 Cortex-M0+ 技术参考手册。 附加名词:总线架构 AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构 AHB (Advanced High-performance Bus) 高级高性能总线 ASB (Advanced System Bus) 高级系统总线 APB (Advanced Peripheral Bus) 高级外围总线 AXI (Advanced eXtensible Interface) 高级可拓展接口 此双核架构属不对称架构。两个内核分担不同角色。一个核是主核,另一个是从属核。默认情况下,Cortex-M4 在电源打开时担任主 CPU。主 CPU 可以禁用或重置从属内核,从属核不能。只有主 CPU 可以调用电源 API,使 MCU 进入低功耗模式。引导地址寄存器和初始堆栈指针地址寄存器可用于从 CPU。应用程序可以使用这些寄存器为从属 CPU 设置适当的启动和堆栈地址。详细信息参阅 LPC5410x 或 LPC5411x 用户手册(第 4 章的系统配置:双 CPU 相关寄存器)。 核间通信通过邮箱机制实现,并支持中断。有硬件互斥体用于共享资源访问,来避免争用。详细信息参阅 LPC5410x 用户手册(第 27 章:邮箱)或 LPC5411x 用户手册(第 30 章:CPU 间邮箱)。 3. 设计考虑 要充分有效利用其功能,可开发双核应用,实现合理分工、高能效、任何用户定制的要求。 3.1 应用程序任务划分 Cortex-M4 和 Cortex-M0+ 具有不同的功能和指令集,适用于不同的应用程序和任务。Cortex-M串行内核之间的指令集和体系结构的比较图,参阅图 3。图 3 Cortex-M 指令集 Cortex-M4 指令向下兼容 Cortex-M0+,并增强了高级数据处理和 DSP 指令。如果有集成FPU,如LPC541xxMCU,由Cortex-M4处理浮点算法。Cortex-M4具有丰富的指令集和哈佛总线架构,可实现高性能算法和数据处理。 Cortex-M0+ 基于ARMv6-M 架构,集成基本的数据处理指令,指令管道短,适用于简单的I/O控制任务。 3.2 资源分配 两个内核资源分配的主要原则是确保高性能并行操作,没有争用。内存分配主要取决于任务 分工。由于 LPC5411x MCUs 中只有一个闪存,因此其中一个内核应在 SRAM 中运行其代码和数据。SRAM 的大小相对较小。在大多数情况下,Cortex-M4是任务密集型核,闪存归它使用。 对于LPC5411x,四个 SRAM (2.2)中, SRAMX 连接到 Cortex-M4 的D 代码和 I 代码总线,其他三个 SRAM 组(SRAM0、SRAM1 和 SRAM2)连接到系统总线,建议Cortex-M4用 SRAMX进行数据或代码存储。对于 Cortex-M0+,所有四个 SRAM 组是相同的,通过系统总线使用。 图4是图2的部分,略。 在实际应用程序系统使用双核功能,应避免两个内核之间的资源访问争用。应用程序必须正确地将资源分配给内核。在数据共享(其中两个内核访问同一内存区域)时,可以使用硬件互斥体分时使用来避免争用。 4. 开发过程 4.1 配置和下载 SDK 图略 打开 MCUXpressSDK 网页后,用户应首先应注册并登录。 1. 注册并登录。 2. 建立新的LPC54114的SDK配置(可组合自己的需要),选择自己开发用的操作系统和开发环境(工具链), 在SDK Builder生产软件包(可在线保留自己的配置) 3. 下载自己组配的LPC54114 SDK 。 4.2 导入 SDK 项目 现在LPC54114 SDK后,用户可以打开 MCUXpresso IDE 从 SDK 导入双核示例项目,开始开发。 1. 安装 LPC54114 SDK 打开 MCUXpresso IDE 并为工作区指定目录。拖放安装 LPC54114 SDK。 2. 导入双核项目 SDK 安装后,可以导入其中的双核历程项目。从"快速启动"面板,单击导入 SDK 示例... 选择电路板型号:LPCXpresso54114 开发板,然后单击"下一步"。 在multicore_examples中选择项目hello_world,然后单击"完成",就在工作区中导入了双核示例,在项目面板就可看到导入的多核示例主项目和从项目。 4.3 配置多核项目 双核开发需要两个项目,一个用于主项目用于M4,另一个用于从属项目用于M0。 lpcxpresso54114_multicore_examples_hello_world_cm0plus是 Cortex-M0+ 的从属项目。 lpcxpresso54114_multicore_examples_hello_world_cm4是 Cortex-M4 的主项目。 • 主项目设置 有关主项目的项目设置,请参阅图 21。(图 21略)它诊断LPC54114的Cortex-M4核。指定闪存存储代码,SRAM0(或Ram0_64)为默认数据内存。其他 SRAM视需要在主项目的多核选项设置指定用途。 通常SRAM1(或Ram1_90)设置分配给从属项目,用于 Cortex-M0+ 项目代码和数据分配,具体在从属项目设置。 • 从属项目设置 Cortex-M0+ 从属项目设置参阅图 23。SRAM1(或Ram1_90)是代码和数据分配的默认内存空间,与主项目的多核选项设置一致。应指定其他 SRAM以进行特定数据或代码分配。这些SRAM在两个项目之间共享,应注意避免访问争用。如果设计不良,两个内核尝试同时访问同一个 RAM 库,则进行仲裁,保证只有一个核可以在给定时间获得访问权限,另一个核只能等待访问。 4.4 调试多核项目 1. 编译项目 单击以选择主项目 lpcxpresso54114_multicore_examples_hello_world_cm4,然后编译它生成映像文件。 从属项目是与主项目相关联的。因此,将被首先编译,然后其映像做为数据接到主映像文件中。图 25 是从属项目的编译统计信息。文本节大小为 6746 字节,将作为分配给 SRAM1(或Ram1_90)的数据节被合并到主项目映像文件中(运行初始化时M4将把它们复制到SRAM1的指定地址用于被M0+执行)。 2. 调试项目 使用 USB 电缆通过调试接口 J7 将 LPCXpresso54114 板连接到主机 PC。选择主项目lpcxpresso54114_multicore_examples_hello_world_cm4并单击调试命令。LPC-Link2 调试器会被自动发现使用。单击"确定"继续。 程序将在main()函数的第一个语句处暂停。 在选择从属项目并开始调试,将检测到 Cortex-M0+ 内核。单击"确定"继续。 此时两个内核都处于调试状态。但主内核还未初始化Contex -M0+ 子核的引导地址和初始堆栈,因此此时Contex -M0+子核处于睡眠状态。 在主项目中调用引导子核的函数MCMGR_StartCore() 时,它将初始化子核的引导地址和初始堆栈,然后重置子核(即 M0+ 内核)才真正启动子核。 此时,子核将从初始化的SRAM1指定引导地址开始执行,这地址放置的是lpcxpresso54114_multicore_examples_hello_world_cm0plus的映像。从属项目在自己的main()函数的第一个语句处暂停。 继续或单步运行即进行示例项目调试。项目详细说明可在 readme 文件中找到;参见图34 5. 结论 本应用笔记介绍了非对称双核的基本概念及其在LPC541xx系列MCU中的实现,使用 MCUXpresso IDE 和 SDK 示例说明了基本过程,用户可以此为基础设计双核应用程序。 |