查看: 8847|回复: 11

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

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

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

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9365
    最后登录
    2022-5-12
    发表于 2017-7-1 11:00:22 | 显示全部楼层 |阅读模式
    本帖最后由 小马哥-1650185 于 2017-7-2 13:48 编辑

    有了上贴【LPC54114双核任务二】双核之从零开始--#mailbox通信4之PC_M4_M0# 的PC收发机制,本帖将实现本周【LPC54114双核任务二】的最终需求。





    一周过去了,不知道同学们还记得主题不,先来回顾下本周任务的主题吧。。。
    【LPC54114双核任务二】开启!


    1. 本周的任务按照计划,是:掌握使用M0+内核进行串行接口通讯的操作方法</font>


    2. 具体要实现的功能:使用M4内核发送数据给M0,然后用M0将数据通过串口打印;通过串口向M0传送数据,再将数据通过M0传送给M4内核。
    复制代码


    有题才有答,对吧,万物完事都有原则,当然是不能离开主题喽。刚查看了帖子,截止目前为止(2017年7月1日10:49:34)貌似还没有看到关于本次最终任务完成的帖子,那么小马哥就不客气了。



    -----------------------------------------------------分割线------------------------------------------------------
         看题,本周的任务按照计划,是掌握使用M0+内核进行串行接口通讯的操作方法,需要使用M4内核发送数据给M0,然后用M0将数据通过串口打印;通过串口向M0传送数据,再将数据通过M0传送给M4内核。


    小马哥的完成思路流程:


    1:需要使用M4内核发送数据给M0,然后用M0将数据通过串口打印
    实现思路:
          使用按键PB2触发,让M4核通过mailbox的中断机制给M0核发送数据,M0核收到数据后触犯mailbox中断ISR,接收数据,打印,自加1,返给M4,打印。
    效果看下图

    222222222222.png


    代码分析:
         (1)PB2按键部分,这一块详细配置操作,请看前面几个帖子mailbox通信3mailbox通信4
    这里在贴一下按键扫描,贴下的代码吧
    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.                                 PRINTF("----M4  SEND  DATA  TO M0 BY BUTTON PB2----\r\n\r\n");
    11.                                 if(led7_flg==1 )
    12.                                 {
    13.                                         LED7_OFF();
    14.                                         PRINTF("M4:LED7****ON****\r\n\r\n");
    15.                                 }
    16.                                 else
    17.                                 {
    18.                                         LED7_ON();
    19.                                         PRINTF("M4:LED7****OFF****\r\n\r\n");
    20.                                 }
    21.                                 PRINTF("-小马哥-Rress PB2 Send Data t0 M0 : %d\n", g_msg);
    22.                                 
    23.                                 MAILBOX_SetValue(MAILBOX, kMAILBOX_CM0Plus, g_msg);
    24.                                 MAILBOX_ClearValueBits(MAILBOX, kMAILBOX_CM4, 0xffffffff);
    25.                                 
    26.                         }
    27. }
    复制代码

    (2)按下按键,触发MAILBOX_SetValue发送数据给M0的mailbox中断函数void MAILBOX_IRQHandler(),然后数据++操作,LED11翻转,在通过MAILBOX_SetValue函数将 运算后的数据传给M4核,进入M4核后,触发mailbox中断,把接收的数据打印出来,完成 如下流程:


    按键PB2触发--->M4--->M0--->M4--->打印
    (M0、M4的mailbox中断处理函数 在帖子最下面)

    2:通过串口向M0传送数据,再将数据通过M0传送给M4内核。
    实现思路:
           使用串口助手像M0的usart0 发送一个数据,触发M0的串口接收中断。收到数据后打印,然后通过mailbox的中断机制给M4核发送数据,并打印。
    效果看下图
    3333333333333.png

    代码分析:(1)在M0核 工程中添加"fsl_usart.h"头文件,配置串口0 等信息
    1. #include "fsl_usart.h"
    复制代码
    1. #define DEMO_USART USART0
    2. #define DEMO_USART_CLK_SRC kCLOCK_Flexcomm0
    3. #define DEMO_USART_CLK_FREQ CLOCK_GetFreq(kCLOCK_Flexcomm0)
    4. #define DEMO_USART_IRQHandler FLEXCOMM0_IRQHandler
    5. #define DEMO_USART_IRQn FLEXCOMM0_IRQn

    6. /*! @brief Ring buffer size (Unit: Byte). */
    7. #define DEMO_RING_BUFFER_SIZE 16

    8. uint8_t demoRingBuffer[DEMO_RING_BUFFER_SIZE];
    9. volatile uint16_t txIndex; /* Index of the data to send out. */
    10. volatile uint16_t rxIndex; /* Index of the memory to save new arrived data. */
    复制代码
    (2)在main函数中 初始化串口0配置,115200,8,n,1,开启接收中断,完成uart0的初始化
    1. usart_config_t config;

    2. USART_GetDefaultConfig(&config);
    3.     config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
    4.     config.enableTx = true;
    5.     config.enableRx = true;

    6.     USART_Init(DEMO_USART, &config, DEMO_USART_CLK_FREQ);

    7. /* Enable RX interrupt. */
    8.     USART_EnableInterrupts(DEMO_USART, kUSART_RxLevelInterruptEnable | kUSART_RxErrorInterruptEnable);
    9.     EnableIRQ(DEMO_USART_IRQn);
    复制代码
    (3)当pc通过串口助手发送给板子数据的时候,进入M0核的串口中断函数

    1. void DEMO_USART_IRQHandler(void)
    2. {

    3.     /* If new data arrived. */
    4.     if ((kUSART_RxFifoNotEmptyFlag | kUSART_RxError) & USART_GetStatusFlags(DEMO_USART))
    5.     {
    6.                                         g_msg = USART_ReadByte(DEMO_USART);//data;
    7.                         PRINTF("M0-小马哥:Receive from PC Data: %d\n", g_msg);
    8.                                         rxIndex = HexToChar(g_msg,demoRingBuffer);
    9.                         txIndex=0;
    10.                         MAILBOX_SetValue(MAILBOX, kMAILBOX_CM0Plus, g_msg);
    11.                         MAILBOX_ClearValueBits(MAILBOX, kMAILBOX_CM4, 0xffffffff);
    12.                         PRINTF("****M0  SEND  DATA  TO M4 BY PC****\r\n\r\n");
    13.                         PRINTF("M0-小马哥:Send to M4 Data: %d\n", g_msg);
    14.     }
    15. }
    复制代码
    (4)  通过USART_ReadByte函数接收PC发送的数据,打印M0核接收的数据,并通过MAILBOX_SetValue将这个数据传给M4核,触发M4核的mailbox中断处理函数,把接收的数据打印出来,完成 如下流程:

    PC--->M0--->M4--->打印
                




    /////////////////////////////////////////////////M0核的mailbox 中断处理函数void MAILBOX_IRQHandler()/////////////////
    1. void MAILBOX_IRQHandler()
    2. {
    3.     g_msg = MAILBOX_GetValue(MAILBOX, kMAILBOX_CM0Plus);
    4.                 PRINTF("M0-СÂí¸ç:Receive from M4 Data: %d\n", g_msg);
    5.     if(g_msg<=255) g_msg++;
    6.         else
    7.         {
    8.                 g_msg = 0;
    9.         }
    10.                 PRINTF("M0-СÂí¸ç:Send to M4 Data: %d\n", g_msg);
    11.     led11_flg ^=1;

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

    25. }
    复制代码


    ////////////////////////M4核的mailbox 中断处理函数void MAILBOX_IRQHandler()//////////////////////////
    1. void MAILBOX_IRQHandler()
    2. {
    3.     g_msg = MAILBOX_GetValue(MAILBOX, kMAILBOX_CM4);
    4.         
    5.         rxIndex = HexToChar(g_msg,demoRingBuffer);
    6.         PRINTF("M4-小马哥:Receive from M0 Data: %d\n", g_msg);
    复制代码





    -----------------------小马哥系列【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的每日心情
    开心
    2025-1-21 08:52
  • 签到天数: 861 天

    连续签到: 1 天

    [LV.10]以坛为家III

    75

    主题

    2523

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5867
    最后登录
    2025-1-22
    发表于 2017-7-1 11:53:45 | 显示全部楼层
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
    发表于 2017-7-1 12:31:55 | 显示全部楼层



    NXP纪念工具_02.gif

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.6]常住居民II

    7

    主题

    213

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    441
    最后登录
    2018-10-25
    发表于 2017-7-1 15:01:19 | 显示全部楼层
    求更新啊
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情

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

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9365
    最后登录
    2022-5-12
     楼主| 发表于 2017-7-1 18:50:00 | 显示全部楼层

    已更新完成,欢迎宝贵意见
    好好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-11-20 11:31
  • 签到天数: 123 天

    连续签到: 1 天

    [LV.7]常住居民III

    1

    主题

    313

    帖子

    0

    高级会员

    Rank: 4

    积分
    893
    最后登录
    2018-7-13
    发表于 2017-7-2 10:30:23 | 显示全部楼层
    very good
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情

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

    连续签到: 1 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    9365
    最后登录
    2022-5-12
     楼主| 发表于 2017-7-2 11:40:24 | 显示全部楼层
    好好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

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

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    106

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    351
    最后登录
    2018-7-3
    发表于 2017-7-2 12:03:23 | 显示全部楼层

    very good  
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    109

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    333
    最后登录
    2018-6-28
    发表于 2017-7-2 13:24:14 | 显示全部楼层
    串口5 引脚 说明书 确实写错了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    68

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    222
    最后登录
    2018-6-5
    发表于 2017-7-2 17:53:09 | 显示全部楼层
    边看边做事变支持下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

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

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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