阿哲
发表于: 2016-12-27 13:22:09 | 显示全部楼层

简介

LPC541xx系列MCU包含一个主Cortex M4内核,以及一个可选的从Cortex M0 +内核。 写这篇文章时,现有的器件型号是:

●    仅具有Cortex M4的MCU:

     ○    LPC54101J256

     ○    LPC54101J512

     ○    LPC54113J256

     ○    LPC54114J256

●    具有Cortex M4主控控制器和Cortex M0 +协处理器的MCU:

     ○    LPC54102J256

     ○    LPC54102J512

     ○    LPC54113J128


上电或复位后,主机和从机内核都会启动,但从机内核立即进入休眠状态。 然后主机内核负责唤醒从机内核;因此命名为主机和从机。 实际上主机和从机只适用于启动过程;启动后,应用程序可以将任何内核视为主机或从机。

LPCXpresso IDE为单核和多核系统提供高度灵活的支持,用于创建和调试LPC541xx应用。 本文详细介绍了创建和调试此类多核应用程序的过程。

创建一个主/从项目对概述

LPCXpresso中的多核应用程序包含两个相关联的项目 - 一个项目包含从机代码,另一个项目包含主机代码。 “Master”项目还将包含一个指向“Slave”项目的链接,它将“Slave”的输出镜像包含在“Master”镜像中。 以下步骤详细介绍了如何创建和链接这样一对项目。

注意建议将创建和构建的LPC541xx多核项目链接到LPCOpen。 因此,在您按照以下顺序操作之前,请确保已从LPC5410x系列或LPC5411x系列(取决于您的目标器件)的LPCOpen软件包中导入芯片和(可选)开发板库项目(针对M4和M0 +) 。

步骤1 - 创建Slave项目

转到下面两项之一:

●    Quickstart -> New project -> LPC5410x -> LPC5410x Multicore (M0+ slave)

●    Quickstart -> New project -> LPC5411x -> LPC5411x Multicore (M0+ slave)

1.png

●    选择所需的项目类型(例如LPCOpen - C项目),然后单击Next

●    输入项目名称(例如,mc_slave),然后单击Next

●    选择所需的目标MCU,如LPC54102J512-M0,然后单击Next

●    在LPCOpen库项目选择页面上,为M0 +选择适当的芯片库,例如lpc_chip_5410x_m0,然后选择适当的开发板库,例如lpc_board_lpcxpresso_54102_m0,然后单击Next

●    在CMSIS DSP库选择单击Next

●    在“其他选项”上,确保代码读保护(CRP)未被选中

●    在“内存配置编辑器”页面上,您应该看到默认为目标MCU定义的各种内存块:

2.png

我们需要修改默认的内存映射,只使用Cortex-M0+(而不是Cortex-M4)使用的内存。

●    突出显示表中的“MFlash512 / Flash”行,然后单击“Delete”按钮。

●    突出显示表中的“Ram0_64 / RAM”行,然后单击“Delete”按钮。

●    突出显示表中的“Ram2_8 / RAM2”行,然后单击“Delete”按钮。

应该只剩下“Ram1_32 / RAM2”行。Cortex-M0+从机镜像将要从该内存块执行。

3.png

然后单击直到您可以单击“Finish”。

步骤2 - 创建master项目

转到下面两项之一:

●    Quickstart -> New project -> LPC5410x -> LPC5410x Multicore (M4 master):

●    Quickstart -> New project -> LPC5411x -> LPC5411x Multicore (M4 master):

4.png

●    选择所需的项目类型(例如LPCOpen - C项目),然后单击Next

●    输入项目名称,如mc_master,然后单击Next

●    选择所需的目标MCU,例如LPC54102J512,然后单击Next

●    在LPCOpen库项目选择页面上,选择M4的LPC5410x芯片库(例如lpc_chip_5410x),然后选择相应的开发板库(例如lpc_board_lpcxpresso_54102),然后单击Next

●    单击Next通过CMSIS DSP库选择和特定部分的选项页。在“其他选项”,确保代码读保护(CRP)被选中。

●    在“内存配置编辑器”上按照默认值保留内存定义。

●    在“多核项目设置”页面上,使用多核从项目选择框中的“Browse”按钮选择先前创建的多核M0 +项目:

5.png

●    然后单击Next,然后单击Finish

如果现在在“项目属性”视图中选择master项目,则在“快速启动”视图中选择“生成”选项,这将触发slave项目的构建,然后是master项目(如果必要还可以触发LPCOpen库项目)。

请注意,实际上Slave项目生成的可执行文件的副本将嵌入到Master项目的可执行文件中。


调试主/从项目对概述

注意:LPC541xx调试仅支持LPC-Link2和NXP的CMSIS-DAP固件。

使用快速启动视图中的调试选项启动主项目的调试会话。

出现提示时,选择要连接的SWD目标,在本例中是“Details”列中标记为“Cortex-M4”的目标:

6.png

请注意,此设置将存储在项目的调试启动配置中,因此应在调试会话之间记住。

选择合适的内核后,LPCXpresso应该将下载包含主映像和从映像的可执行文件到目标MCU闪存中。

一旦连接已经建立,您可以在主可执行文件中的main()开头打上默认断点:

asdfghjkl.png

此时,在Project Explorer视图中选择Slave项目,然后使用Quickstart视图调试选项启动第二个调试连接。

选择要连接到的SWD目标。 请注意,只要您已经连接到M4,则将会自动选择M0从机。

8.png

注意:在LPCXpresso IDE 7.6.2和更高版本中,Cortex-M0将显示为Device 1,而不是Device 16。

LPCXpresso检测到这是一个Slave项目,并使用一个“仅附加”连接(因此不下载代码,并保持从镜像“执行”)。

9.png

现在,单步跳过主机映像中的boot_multicore_slave()函数,从机内核将开始执行,在它的main()打上默认断点:

10.png

您现在可以并行调试两个内核,通过在调试视图中切换它们来选择要单步调试、恢复、挂起哪个内核等。

注意:尽管在两个内核上没有调试逻辑同步的调试操作,但您可以在调试视图中同时选择两个应用程序(通常使用CTRL-Click),然后由调试器并行地在两个内核上执行操作(如单步调试、恢复、挂起等)。

当前选择的内核将是用于显示许多调试相关视图的内核,例如Register和Locals。 还可以创建许多调试相关视图的副本,并将每个副本锁定到特定内核。

例如,要创建两个寄存器视图,一个用于M4,一个用于M0 + ...首先,使用寄存器视图中的“Open New view”按钮创建第二个寄存器视图:

11.png

现在使用"Pin to Debug context”按钮将原始视图固定到当前在调试中选择的内核:

12.png

现在在Debug视图中选择另一个内核,并转到第二个Register视图。 使用此视图的“Pin to Debug context”按钮将第二个Register视图锁定到所选的内核:

13.png

注意,完成调试后,可以使用图标栏上的"Terminate / Disconnect All”按钮同时断开Master和Slave内核的调试连接:

14.png

多核项目 - 附加信息

定义

对于LPC5410x项目,会自动创建许多编译器相关的定义,以允许根据特定项目是配置为从站、主站还是两者都不是,来进行某些代码块的条件编译。

●    __MULTICORE_MASTER

     ○    由LPCXpresso自动定义,用于已配置为Master项目的项目

●    __MULTICORE_MASTER_SLAVE_M0SLAVE

     ○    由LPCXpresso自动定义,用于已被配置为主项目并且具有与其关联的从项目(因此向主项目指示从项目所使用的cpu类型)的项目。

●    __MULTICORE_M0SLAVE

     ○    由LPCXpresso自动定义,用于已经配置为从属项目的项目

●    __MULTICORE_NONE

     ○    由LPCXpresso自动定义,用于未配置为从属或主项目的项目

:LPCXpresso IDE中的多核支持高度灵活,提供超出LPC5410x系列所需的功能。因此,符号__MULTICORE_MASTER_SLAVE_M4SLAVE__MULTICORE_M4SLAVE也是为了完整性而提供的,但不是任何现有零件所必需的。


slave启动代码

boot_multicore_slave()是由LPCXpresso项目向导直接创建的主项目代码调用,用于唤醒睡眠中的从机内核。这个函数从LPCOpen软件包中调用LPC5410x,它们是以预构建的库形式提供的。这意味着它目前只能创建和构建链接到LPCOpen的LPC5410x多核项目。

请注意,包含此函数的源文件将包含在所有LPC5410x项目中,但将有条件地编译,以便仅在需要时包括它。这样做是为了允许最初创建的项目(例如,作为从项目)作为主项目重新配置(通过项​​目属性 - 链接器多核选项卡)。

请注意,如果您查看LPC5410x LPCOpen软件包中提供的多核项目,则从引导代码会直接并入主函数。但是,它执行与LPCXpresso向导生成的代码相同的初始化。


Reset Handler 代码

当配置为Master项目时,LPC5410x启动文件将在复位处理程序ResetISR()开始时使用附加(汇编程序)代码构建,并将“标准”复位处理程序代码移动到ResetISR2()。

需要此附加代码才能正确引导主机和从机内核。它是用汇编器编写的,以便强制转换成“Thumb1”代码,因此可由两个内核运行。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 10 | 回复: 10



手机版|

GMT+8, 2024-11-21 19:11 , Processed in 0.084848 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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