查看: 16840|回复: 29

[原创] 【LPC54114双核任务二】双核之从零开始--#HelloWorld双核调试#

[复制链接]
  • TA的每日心情

    2021-1-28 20:09
  • 签到天数: 317 天

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9365
    最后登录
    2022-5-12
    发表于 2017-6-27 23:08:03 | 显示全部楼层 |阅读模式
    本帖最后由 小马哥-1650185 于 2017-7-2 11:30 编辑

    相信小伙伴们看了 小马哥 的帖子 【LPC54114双核任务二】双核之从零开始--#KEIL工程建立配置#  已经熟悉了双核平台的搭建了吧。。

    亲们看完多多支持下。。。

    接着上个帖子,下面详解工程配置,编译,仿真,测试。


    现在我们打开双核工程,会发现这个sdk中的一些外设  和我们手上的板子  gpio不对应,前面也有人将结果需要修改一下代码,,我这里按照小马哥自己的思路在详细说下吧。

    万利的LPC54114开发板上带有8个用户可以控制的LED灯(4绿4红LD4/LD5/LD6/LD7是绿灯,低电平点亮,LD8/LD9/LD10/LD11是红灯,高电平点亮,和4个用户按键输入,按键按下IO口检测到的是低电平;


    对应原理图
    mmmmmmmmm.png jjjjjjjjj.png

    不喜欢看图的 我吧对应关系也列出来了
    板子上的LED丝印对应IO口:
    LD4<---> PIO0_30、
    LD5<---> PIO0_29、
    LD6<---> PIO0_26、
    LD7<---> PIO0_25、
    LD8<---> PIO0_22、
    LD9<---> PIO0_21、
    LD10<---> PIO0_19、
    LD11<---> PIO0_15,
    1.png
    按键丝印对应IO口:
    PB2<---> PIO1_8、
    PB3<---> PIO1_9、
    PB4<---> PIO1_10、
    PB5<---> PIO1_11;
    2.png

    知道了这个关系,我们看工程文档的下面的图,红圈是需要修改的
    3.png
    修改成酱紫就可以了(注意 这个m0,,m4两个工程都要改的哦
    4.png

    解释下吧:这里就是把 按键 和led  和lpc54114 板子上的外设对应起来而已。。。。


    D:/360%E6%9E%81%E9%80%9F%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8B%E8%BD%BD/mgfzhh2011@163.com/5339bd77851e467597bcc8055682678b/7nhfffd3n08r.png


    然后 看资料中的这句话
    5.png

    大概意思就是 首先变音M0工程,前提是需要设置下这行小字,目的是吧m0的镜像为.bin文件,方面在m4工程中的汇编模块中include一下。
    具体怎么设置呢,其实工程里面已经设置ok了,我们也来看下吧
    首先 选择激活m0的工程,点开target配置框,见下图1,,2,,3,,

    6.png 7.png

    这里主要就是 配置MDK 生产BIN文件的。
    $K\ARM\ARMCC\bin\fromelf.exe --bincombined --bincombined_base=0x20010000 --output=$Lcore1_image.bin !L

    关于这里,我会另外开贴解释mdk生bin的方法。
    【LPC54114双核任务二】双核之从零开始--#mdk生bin#


    这里的基地址和文件名很重要,和后面m4工程有关联。后面我会讲到。。。。这里就解释了文档中的


    然后编译m0核就可以生成bin了。这个bin  m4核会调用的。

    这里简单说明一下,原m0工程主循环里面就做了一件事,翻转led11,也就是说M0核启动的话LED11会blind,m0核释放的话led11 灭掉.
    当然 要想加别的什么功能也是可以的,亲民自己摸索吧,这里只讲思路,流程,原理,授渔才是关键。。。后面我会在开贴加功能。
    代码摘要:
    1. while (1)
    2.     {
    3.         delay();
    4.         LED_TOGGLE();
    5.     }
    复制代码
    1. #define LED_INIT() GPIO_PinInit(GPIO, BOARD_LED_RED_GPIO_PORT, BOARD_LED_RED_GPIO_PIN, &led_config);
    2. #define LED_TOGGLE() GPIO_TogglePinsOutput(GPIO, BOARD_LED_RED_GPIO_PORT, 1u << BOARD_LED_RED_GPIO_PIN);
    复制代码


    。。。。。。。。。。喝水中。。。。。。。。。。。。。。。。。。


    上面M0的基本上讲完了,下面开始重点M4工程,会复杂点哦


    首先激活选中m4工程,这个不会的看上面激活m0工程的方法。
    先看文档吧,仔细看了英文文档既美丽有温柔,表达的很清楚哈

    跟着节奏1,,2,,3,,4。。。。
    8.png

    这里需要把刚才的bin文件添加到m4 工程中,当然是汇编啦,格式参考已经给出来了。直接添加就是了
    具体体现呢,m4工程已经加好了,文件路径,内容看下图,是不是在这里发现了  m0生成的core1_image.bin文件,很神奇吧。。。这个核文档里面稍微有些区别,明白什么意思就行,自己举一反三么。。。。

    9.png
    然后就是添加类似框4的代码了,原m4工程hello_world_core1.c文件中, 如下图
    这里是不是神奇的见到了  m0生成bin  时候配置的那个地址 0x20010000,这就对应上了
    12.png

    到此 双核工程的链接 已经讲完了,亲们好好消化下吧。


    然后就可以编译M4工程,烧录下载了,先看下串口打印的结果吧

    框1 是初始化信息,框2是按键按下的信息,,,这里纠正一下,按下PB2停止M0的时候,led11  不会闪烁,但有可能常亮 或者常灭,因为关闭m0核心的时候,没有对led11 的gpio 做任何处理,大家知道就行了。。。


    第一个红框是初始化 串口打印的信息。。。第二个是按键按下打印的

    14.png

    下面看下m4  的main函数吧
    15.png
    灯闪烁的的效果,就不上图了,亲们可以自己实测哦。。。

    后面还有几点需要提醒下:
    1.编译烧写m4工程后 程序是从m4核启动的,程序是只想m4的main函数的。下面这个图
    16.png
    2. debug中 如果 复位cpu,会出现这样的情况
    18.png

    到此为止,M4的debug已经 ok了,,,,啥 ???是不是忘了m0核的 debug,,,,没没没,,不急麽,下面讲,,,,
    啥,都凌晨1点了,还不急,明天上班找抽啊,,,哎,,帖子已写不可收拾,,亲们多体谅下,给点鼓励,,,小马哥可是冒着明天上班迟到,打瞌睡,被罚钱的风险呢,为了亲们 快速上手也是拼了



    ////////////////好了 下面主要说下M0的 debug吧
    先看文档这个图的流程,其实已经讲的很明白了
    20.png
    先退出m4的 debug吧,我们走进m0的工程看一看,就这么下图配置就行
    21.png
    然后这里需要添加一个脚本文件
    22.png
    点下edit  ,复制文档代码到这个.ini文件,如下图
    23.png
    脚本代码如下
    1. FUNC void Setup (void) {
    2.   SP = _RDWORD(0x20020000);         // Setup Stack Pointer
    3.   PC = _RDWORD(0x20020004);         // Setup Program Counter
    4.   _WDWORD(0xE000ED08, 0x20020000);  // Setup Vector Table Offset Register
    5.   _WDWORD(0x40000220, 1<<4);                // enable clock for SRAM2, M0+’s RAM
    6. }

    7. LOAD %L INCREMENTAL     // Download

    8. Setup();   // Setup for Running

    9. g, main
    复制代码


    然后点ok保存 后,关闭target  窗口,直接debug,
    24.png
    好像没什么反应呀,什么也看不出来,不急不急,这时候按下PB3开启m0,程序就指到m0的 main函数了
    25.png
    然后就可以但不调试 m0了,看下图
    27.png

    Run一次,led11变化一次,是不是很神奇,M0和一样可以调试debug了。


    最后 附上双核的相关API吧,下一步双核通信用的到的(照搬文档的)
    1. (M4, M0+) void MAILBOX_SetValue(MAILBOX_Type *base, mailbox_cpu_id_t cpu_id, uint32_t mboxData);
    2. Set (non-zero) value “mboxData” to CPU “cpu_id”, as well as trigger its MAILBOX IRQ
    3. (M4, M0+) uint32_t MAILBOX_GetValue(MAILBOX_Type *base, mailbox_cpu_id_t cpu_id);
    4. Get mailbox value of CPU “cpu_id”.
    5. (M4, M0+) void MAILBOX_ClearValueBits(MAILBOX_Type *base, mailbox_cpu_id_t cpu_id, uint32_t mboxClrBits);
    6. Clear mailbox value bits of CPU “cpu_id” masked by “mboxClrBits”, uses 0xFFFFFFFF to clear all bits.
    7. (M4, M0+) uint32_t MAILBOX_GetMutex(MAILBOX_Type *base);
    8. Get the H/W MUTEX value, in parallel MUTEX is hardware cleared, use this in a while loop to try lock MUTEX.
    9. (M4, M0+) void MAILBOX_SetMutex(MAILBOX_Type *base);
    10. Unlock/give the mutex. Must be called after code successfully lock the H/W MUTEX.
    复制代码
    1. (M4) void CPU_CM0pHoldReset(void);
    2. Hold M0+ in reset state
    3. (M4) void CPU_CM0pRelease(void);
    4. Release M0+ from reset state.
    5. (M4) void CPU_CM0pBoot(const uint32_t imgVecTab[2]);
    6. Fill the M0+ boot condition (MSP, Reset vector) and reset M0+, M0+ boot code will detect   the boot condition and apply.
    7. (M4, M0+) void MAILBOX_IRQHandler(void);
    8. Mailbox IRQ handler, triggered by the other core writing non-zero to my mailbox register.
    9. (M4, M0+) #define mutexTake()  while (MAILBOX_GetMutex(MAILBOX) == 0)\
    10. Try lock H/W MUTEX
    11. (M4, M0+) #define mutexGive()  MAILBOX_SetMutex(MAILBOX)
    12. Unlock MUTEX
    复制代码

    好了,马上要睡觉了,亲们看完这个帖子 有没有思路了呢。。。


    -----------------------小马哥系列【LPC54114双核任务二】传送门--------------------
    【LPC54114双核任务二】双核之从零开始--#KEIL工程建立配置#
    【LPC54114双核任务二】双核之从零开始--#HelloWorld双核调试#

    【LPC54114双核任务二】双核之从零开始--#MDK生成BIN#

    【LPC54114双核任务二】双核之从零开始--#mailbox通信1之中断#


    【LPC54114双核任务二】双核之从零开始--#mailbox通信2之mutex#

    【LPC54114双核任务二】双核之从零开始--#mailbox通信3之按键#

    【LPC54114双核任务二】双核之从零开始--#mailbox通信4之PC_M4_M0#

    【LPC54114双核任务二】双核之从零开始--#mailbox通信5之PC_M0_M4#



    【LPC54114双核任务二】双核之从零开始--#mailbox通信6之WIFI_M4_M0#


    【LPC54114双核任务二】已完结,小马哥出品,谢谢大家支持。。。。
    -----------------------小马哥系列【LPC54114双核任务二】传送门--------------------





    好好
    回复

    使用道具 举报

  • TA的每日心情

    2021-1-28 20:09
  • 签到天数: 317 天

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9365
    最后登录
    2022-5-12
     楼主| 发表于 2017-6-28 13:16:51 | 显示全部楼层
    nxp_helloworld 发表于 2017-6-28 13:03
    楼主问下,m4核初始化后 m0核的bin文件是怎么执行的
    1. #ifdef CORE1_IMAGE_COPY_TO_RAM
    2.     /* Calculate size of the image  - not required on LPCExpresso. LPCExpresso copies image to RAM during startup
    3.      * automatically */
    4.     uint32_t core1_image_size;
    5.     core1_image_size = get_core1_image_size();
    6.     PRINTF("Copy Secondary core image to address: 0x%x, size: %d\n", CORE1_BOOT_ADDRESS, core1_image_size);

    7.     /* Copy Secondary core application from FLASH to RAM. Primary core code is executed from FLASH, Secondary from RAM
    8.      * for maximal effectivity.*/
    9.     memcpy(CORE1_BOOT_ADDRESS, (void *)CORE1_IMAGE_START, core1_image_size);
    10. #endif
    复制代码


    这里面进行了memcpy 操作,吧m0的 bin文件 从flash拷贝到了 ram中
    好好
    回复 支持 2 反对 0

    使用道具 举报

  • TA的每日心情

    2021-1-28 20:09
  • 签到天数: 317 天

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9365
    最后登录
    2022-5-12
     楼主| 发表于 2017-6-28 13:31:40 | 显示全部楼层
    zbber 发表于 2017-6-28 13:30
    辛苦晒,向小马哥学习

    相互学习。。。
    今晚上研究邮箱 互斥通信
    好好
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情

    2021-1-28 20:09
  • 签到天数: 317 天

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9365
    最后登录
    2022-5-12
     楼主| 发表于 2017-6-28 09:05:58 | 显示全部楼层
    错别字,能看懂就饿可以了哇
    好好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-7-12 20:45
  • 签到天数: 75 天

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
    发表于 2017-6-28 09:55:46 | 显示全部楼层
    学习了,膜拜大神
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-7-9 20:44
  • 签到天数: 42 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    74

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    240
    最后登录
    2018-7-9
    发表于 2017-6-28 09:59:01 | 显示全部楼层
    支持支持
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-7-9 20:44
  • 签到天数: 42 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    74

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    240
    最后登录
    2018-7-9
    发表于 2017-6-28 10:00:31 | 显示全部楼层
    支持支持 ,不过看到好几个错别字,笔误了吧
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-11-22 09:55
  • 签到天数: 179 天

    连续签到: 1 天

    [LV.7]常住居民III

    12

    主题

    1122

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1377
    最后登录
    2019-11-22
    发表于 2017-6-28 10:27:18 | 显示全部楼层
    辛苦晒,向小马哥学习
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-7-3 23:08
  • 签到天数: 57 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    106

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    351
    最后登录
    2018-7-3
    发表于 2017-6-28 10:58:06 | 显示全部楼层
    辛苦晒,向小马哥学习
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-27 15:23
  • 签到天数: 49 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    109

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    333
    最后登录
    2018-6-28
    发表于 2017-6-28 13:03:17 | 显示全部楼层
    楼主问下,m4核初始化后 m0核的bin文件是怎么执行的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-27 15:21
  • 签到天数: 47 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    93

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    299
    最后登录
    2018-7-3
    发表于 2017-6-28 13:09:01 | 显示全部楼层
    学习了        
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-22 03:42 , Processed in 0.109811 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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