查看: 4150|回复: 3

[原创] 【LPC54114Bonus任务】双核通讯

[复制链接]

该用户从未签到

61

主题

965

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2394
最后登录
1970-1-1
发表于 2017-8-10 08:31:39 | 显示全部楼层 |阅读模式
实现双核通讯,就要了解双核的开发、启动、通讯和互斥等方方面面。
首先到NXP官网下载SDK包SDK_2.2.1_LPCXpresso54114,通过SDK包中的例程来学习。
SDK的boards\lpcxpresso54114\multicore_examples\hello_world下有一个hello world的例程,下面有两个文件,一个M0的,一个是M4的。
每个文件都是一keil建立的工程,都可以单独编译,但是如果你先打开hello_world\cm4\mdk这个M4的工程先编译的话,将出错,原因是没有M0生成的core1_image.bin,看到这个错误,大家可能已经想到,这个bin文件应该就是M0的运行文件。不错,我首先必须编译M0,生成core1_image.bin这个文件。
为了方便项目管理,我们把M0和M4两个工程天加到一个工作空间中。
首先打开一个工程下的后缀为.uvmpw的文件,打开后
图片12.png
在WorkSpace上右键。
图片13.png
点击弹出的对话
图片14.png
可以点击增加和删除来管理项目。
通过这样我们把M0和M4的两个工程添加到了一个工作空间中了。
你需要编译和操作那个工程,就在那个工程上右键
图片15.png
会弹出对话框,点击Set as Active Project。就激活了当前项目,没有激活的很多是操作不了的。
既然M4工程中需要调用MO编译的bin文件,那么keil怎么生成bin文件呢?
Realview MDK 的集成开发环境中,默认情况下可以生成 *.axf 格式的调试文件和 *.hex 格式的可执行文
件。虽然这两个格式的文件非常有利于 ULINK仿真器的下载和调试 ,但是在很多情况下还是需要bin文件。那么
Realview MDK 集成开发环境有他的优势,可以 *.axf 格式文件或 *.hex 格式文件转换成 *.bin 。
Realview MDK 中, 生成 *.bin 格式文件的工具是 ARM 公司的 RVCT 开发套件中的 fromelf.exe 。默认安装下,它 位 于 C\ : Keil\ARM\BIN40 文件 夹 下。
图片16.png
构选 After Build/Rebuild 框 中的 Run #1 多选框 ,在 后边 的文本 框 中 输 入
C:\Keil\ARM\BIN31\fromelf.exe --bin -o ./bin/test.bin ./test.axf 命令 行 。重新编译 文件,在 ./bin/ 文件 夹 下生成了 test.bin 文件。
fromelf.exe 转换工具的 语 法格式 如 下
图片17.png
例程中添加的是:
$K\ARM\ARMCC\bin\fromelf.exe --bincombined --bincombined_base=0x20010000 --output=$Lcore1_image.bin !L
生成bin文件主要是M0的工程中设置。M0的工程弄好之后,就开始设置M4了。
m4工程中incbin.s中应用了core1_image.bin文件。
图片18.png
main文件中
图片19.png
可以看到是0x20010000是我们在M0中生成bin文件时定义的基地址。
现在我们来分析一下源码,使用的NXP官方的SDK例程,而我们的开发板是万利提供的,所以硬件是不同的。所以注意硬件初始化。
首先分析M0的源码:main函数在hello_world_core1.c中
根据硬件
图片20.png
修改LED对应的引脚,定义红灯为LED0,绿灯为LED7
图片21.png
定义好之后M0就是红灯闪烁。
M4源码:主函数在hello_world_core0.c文件中。
按键:
图片22.png
图片23.png
图片24.png
get_core1_image_size函数是获取M0工程中bin文件的大小,然后拷贝到#define CORE1_BOOT_ADDRESS (void *)0x20010000定义的RAM地址中。
初始化启动M0
MCMGR_StartCore(kMCMGR_Core1, CORE1_BOOT_ADDRESS, 1, kMCMGR_Start_Synchronous);
图片25.png
然后通过按键来实现启动和关闭M0核。
编译下载之后就可以看到效果了。
通过终端可以看到运行状态:
启动
图片26.png
此时LED0开始闪烁。
按下PB2键
图片27.png
LED0停止闪烁。
按下PB3键
图片28.png
LED0又开始闪烁。
到这里就可以正常启动和关闭M0核了。
M0中把几个红色的LED灯都初始化一下,不然一直处于微亮状态,挺烦躁的。
图片29.png
接下来就是双核通讯了。
M0与M4之间通讯,API函数提供了邮箱的方式进行通讯。
这里实现M4将数据传输给M0,M0通LED显示出来,并将相同的数据传输到M4,M4通终端打印出来。
M0和M4的程序中
添加邮箱头文件#include "fsl_mailbox.h"
使用邮箱必须先初始化并使能邮箱中断:
        MAILBOX_Init(MAILBOX);
  NVIC_EnableIRQ(MAILBOX_IRQn);
编写M0函数:
M0邮箱中断函数:
图片30.png
main中while下添加
图片31.png
根据收到的数据显示对应LED灯,并返回收到的值。
编写M4函数:
M4邮箱中断函数:
图片32.png
main中while下添加
图片33.png
循环发生1到4.
图片34.png
LED也在循环点亮。
需要注意的是flatform.c中已经定义邮箱中断函数MAILBOX_IRQHandler,需要把这里屏蔽掉。
双核通讯实现了跑马灯。

回复

使用道具 举报

  • TA的每日心情
    无聊
    2021-1-28 13:21
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    32

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2024-11-19
    发表于 2017-8-16 18:34:53 | 显示全部楼层
    请教一下,NXP官网哪里下载SDK_2.2.1_LPCXpresso54114
    没睡醒
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-28 13:21
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    32

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2024-11-19
    发表于 2017-8-16 23:15:26 | 显示全部楼层
    知道在哪下载了,困得不行,明天再向楼主学习
    没睡醒
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2021-1-28 13:21
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    32

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2024-11-19
    发表于 2017-8-17 16:27:29 | 显示全部楼层
    请教一下Serial-COM8/4那个是怎么调出来的,多谢
    没睡醒
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-25 09:19 , Processed in 0.095624 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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