查看: 5443|回复: 8

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

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

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

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

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

        本讲主要是基于【LPC54114双核任务二】双核之从零开始--#双核mailbox通信1#这一讲的延伸扩展。

    在“”“双核之从零开始--#双核mailbox通信1#”这一讲中主要讲了双核通信的mailbox方式的中断模式,上电后一直双核循环通讯。



    本讲呢,再次基础上,增加了按钮控制功能,LED提示功能等。





           开机上电后,通过按键PB2 触发 M4邮箱发送函数,发送数据到M0,M0收到数据进入邮箱中断,继续通过邮箱返回数据给M4,LED11变化表示M4 发送数据给M0,LED10变化表示M0 发送数据给M4.


           在上个工程的基础上 需要添加LED和按键PB的初始化相关代码,随便写了一个按键扫描函数,保证按键按下并弹起后才能发送数据给M0核,如果按键按下没有释放是不发送数据的。。。


    先上个图看下 效果吧(手机拍的,不是很清楚哇)
    1.上电初始化效果图
    1111111.png
    2.PB2第一次按下
    22222222222.png
    3.PB2第二次按下
    33333333333333333.png
    整体串口信息
    777777777777.png

    整体来说达到了预期的效果。为下一步串口收发数据做个准备吧。。。。

    下面大致讲解下程序,在 双核mailbox通信1   帖子中,大部分已经讲解了,这里只说下新加的部分吧。。。
    宏定义一些led11和 led7 的初始化,开,关,翻转等。记得在主函数中调用。


    1. #define LED11_INIT() GPIO_PinInit(GPIO, BOARD_LED_RED_GPIO_PORT, BOARD_LED_RED_GPIO_PIN, &led_config);
    2. #define LED11_TOGGLE() GPIO_TogglePinsOutput(GPIO, BOARD_LED_RED_GPIO_PORT, 1u << BOARD_LED_RED_GPIO_PIN);
    3. #define LED11_ON() GPIO_SetPinsOutput(GPIO, BOARD_LED_RED_GPIO_PORT, 1u << BOARD_LED_RED_GPIO_PIN);
    4. #define LED11_OFF() GPIO_ClearPinsOutput(GPIO, BOARD_LED_RED_GPIO_PORT, 1u << BOARD_LED_RED_GPIO_PIN);

    5. #define LED7_INIT() GPIO_PinInit(GPIO, 0, 25, &led_config);
    6. #define LED7_TOGGLE() GPIO_TogglePinsOutput(GPIO, 0, 1u << 25);
    7. #define LED7_OFF() GPIO_SetPinsOutput(GPIO, 0, 1u << 25);
    8. #define LED7_ON() GPIO_ClearPinsOutput(GPIO, 0, 1u << 25);
    复制代码



    初始化按键
    1. GPIO_PinInit(BOARD_SW1_GPIO, BOARD_SW1_GPIO_PORT, BOARD_SW1_GPIO_PIN, &sw_config);
    2.     GPIO_PinInit(BOARD_SW2_GPIO, BOARD_SW2_GPIO_PORT, BOARD_SW2_GPIO_PIN, &sw_config);
    复制代码


    在m4中,通过扫描按键函数key_scan(),检测按键状态,检测到按下PB2一次,条用过MAILBOX_SetValue发送邮箱mailboxdata,并翻转led7。
    主函数如下
    1.     while (1)
    2.     {
    3.                         key_scan();
    4.         
    5.                         if(1== key_M)
    6.                         {
    7.                                         key_M=0;
    8.                                         PRINTF("Press Button :PB2(M4)  \n");
    9.                                                         led7_flg ^=1;        

    10.                                 if(led7_flg==1 )
    11.                                 {
    12.                                         LED7_OFF();
    13.                                         PRINTF("M4:LED7####ON####\r\n\r\n");
    14.                                 }
    15.                                 else
    16.                                 {
    17.                                         LED7_ON();
    18.                                         PRINTF("M4-:LED7####OFF####\r\n\r\n");
    19.                                 }
    20.                                                         MAILBOX_SetValue(MAILBOX, kMAILBOX_CM0Plus, g_msg);
    21.                                                         MAILBOX_ClearValueBits(MAILBOX, kMAILBOX_CM4, 0xffffffff);
    22.                         }

    23.    
    24.                 }
    25. }
    复制代码
    中断函数
    1. void MAILBOX_IRQHandler()
    2. {
    3.     g_msg = MAILBOX_GetValue(MAILBOX, kMAILBOX_CM4);
    4.                 PRINTF("M4-СÂí¸ç:Read value from CM4 mailbox register: %d\n", g_msg);
    5.     g_msg++;
    6.     PRINTF("M4-СÂí¸ç:Write to CM0+ mailbox register: %d\n", g_msg);
    7. //   MAILBOX_SetValue(MAILBOX, kMAILBOX_CM0Plus, g_msg);
    8. MAILBOX_ClearValueBits(MAILBOX, kMAILBOX_CM4, 0xffffffff);
    9.          PRINTF("Please press the PB2 button \r\n\r\n");
    10. }
    复制代码



    M0代码
    中断函数
    1. void MAILBOX_IRQHandler()
    2. {
    3.     g_msg = MAILBOX_GetValue(MAILBOX, kMAILBOX_CM0Plus);
    4.                 PRINTF("M0-СÂí¸ç:Read to CM4+ mailbox register: %d\n", g_msg);
    5.     g_msg++;
    6.                 PRINTF("M0-СÂí¸ç:Write to CM4+ mailbox register: %d\n", g_msg);
    7.     led11_flg ^=1;

    8.         if(1 ==led11_flg )
    9.         {
    10.                 LED11_ON();
    11.                 PRINTF("M0:LED11****ON****\r\n\r\n");
    12.         }
    13.         else
    14.         {
    15.                 LED11_OFF();
    16.                 PRINTF("M0-:LED11****OFF****\r\n\r\n");
    17.         }
    18.          MAILBOX_SetValue(MAILBOX, kMAILBOX_CM4, g_msg);
    19.    MAILBOX_ClearValueBits(MAILBOX, kMAILBOX_CM0Plus, 0xffffffff);
    20.         

    21. }
    复制代码
    然后就完事了,这个还是挺简单。


    -----------------------小马哥系列【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的每日心情
    擦汗
    2018-7-3 22:59
  • 签到天数: 39 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    67

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    221
    最后登录
    2018-7-3
    发表于 2017-6-30 08:58:21 | 显示全部楼层
    支持支持
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-12-30 18:56
  • 签到天数: 39 天

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    68

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    222
    最后登录
    2018-6-5
    发表于 2017-6-30 09:35:40 来自手机 | 显示全部楼层
    学习了,小白看了恍然大悟
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    93

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    299
    最后登录
    2018-7-3
    发表于 2017-6-30 19:41:25 | 显示全部楼层
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情

    2018-2-28 16:09
  • 签到天数: 65 天

    连续签到: 1 天

    [LV.6]常住居民II

    8

    主题

    238

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    488
    最后登录
    2019-9-18
    发表于 2017-7-26 18:12:05 | 显示全部楼层
    小马哥,你的key_scan()怎么写的?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9365
    最后登录
    2022-5-12
     楼主| 发表于 2017-7-26 18:45:48 | 显示全部楼层
    gujiamao 发表于 2017-7-26 18:12
    小马哥,你的key_scan()怎么写的?

    检测按键按下 并抬起  算作一个按键事件
    好好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-2-28 16:09
  • 签到天数: 65 天

    连续签到: 1 天

    [LV.6]常住居民II

    8

    主题

    238

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    488
    最后登录
    2019-9-18
    发表于 2017-7-27 13:26:00 | 显示全部楼层
    小马哥-1650185 发表于 2017-7-26 18:45
    检测按键按下 并抬起  算作一个按键事件

    消抖呢??
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9365
    最后登录
    2022-5-12
     楼主| 发表于 2017-7-27 14:19:36 | 显示全部楼层

    systick 定时
    好好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-2-28 16:09
  • 签到天数: 65 天

    连续签到: 1 天

    [LV.6]常住居民II

    8

    主题

    238

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    488
    最后登录
    2019-9-18
    发表于 2017-7-27 16:58:58 | 显示全部楼层

    谢谢马哥指导
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-22 06:04 , Processed in 0.109777 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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