在线时间279 小时
UID3181444
注册时间2015-12-8
NXP金币8
TA的每日心情 | 开心 2017-11-15 10:33 |
---|
签到天数: 79 天 [LV.6]常住居民II
金牌会员
- 积分
- 1779
- 最后登录
- 2020-8-22
|
本帖最后由 何昌昕 于 2017-6-27 20:04 编辑
1.拷贝出需要的工程
登陆 http://mcuxpresso.nxp.com/en/welcome
2.这是一个简单的启动M0内核和关闭M0内核的例子,需要对按键和LED的管脚进行更改
根据板卡的原理图,对M4工程的按键管脚进行更改,对M0工程的LED管脚进行更改
- #define BOARD_SW1_GPIO GPIO
- #define BOARD_SW1_GPIO_PORT 1U
- #define BOARD_SW1_GPIO_PIN 8U
- #define BOARD_SW1_NAME "SW1"
- #define BOARD_SW3_IRQ PIN_INT0_IRQn
- #define BOARD_SW3_IRQ_HANDLER PIN_INT0_IRQHandler
- #define BOARD_SW2_GPIO GPIO
- #define BOARD_SW2_GPIO_PORT 1U
- #define BOARD_SW2_GPIO_PIN 9U
- #define BOARD_SW2_NAME "SW2"
- #define BOARD_SW3_IRQ PIN_INT0_IRQn
- #define BOARD_SW3_IRQ_HANDLER PIN_INT0_IRQHandler
复制代码 8个LED 点亮极性不同,红色为高,绿色为低。
- GPIO_PinInit(GPIO, 0u, 15u, &led_config);
- GPIO_PinInit(GPIO, 0u, 19u, &led_config);
- GPIO_PinInit(GPIO, 0u, 21u, &led_config);
- GPIO_PinInit(GPIO, 0u, 22u, &led_config);
- GPIO_PinInit(GPIO, 0u, 25u, &led_config);
- GPIO_PinInit(GPIO, 0u, 26u, &led_config);
- GPIO_PinInit(GPIO, 0u, 29u, &led_config);
- GPIO_PinInit(GPIO, 0u, 30u, &led_config);
复制代码 3,简单描述下我的双核通信思路:使用的共享变量,M0内核和M4内核中各设置一个变量,互相共享,当启动M0内核时,在M0内核执行程序中,打印出M4共享的变量值,同时M0内核自身的变量每次自加1,同时M4内核将M0内核的变量打印出来,完成M0到M4的数据互相传递;在M0的程序停止后,M4内核并不会停止,M4内核的变量还会继续增加,此时打开M0内核,发现M4共享的变量值累加了中间隔断的时间片数。
M4主函数:
- static volatile uint8_t M4_TO_M0_T __attribute__((at(0x20004000-8)));
- #define M0_TO_M4_R (*(volatile uint8_t*)(0x20004000-4))
复制代码- /* Stop secondary core execution. */
- if (!GPIO_ReadPinInput(BOARD_SW1_GPIO, BOARD_SW1_GPIO_PORT, BOARD_SW1_GPIO_PIN))
- {
- MCMGR_StopCore(kMCMGR_Core1);
- PRINTF("Stopped Secondary core.\n");
- delay();
- }
- /* Start core from reset vector */
- if (!GPIO_ReadPinInput(BOARD_SW2_GPIO, BOARD_SW2_GPIO_PORT, BOARD_SW2_GPIO_PIN))
- {
- PRINTF("Started Secondary core.\n");
- MCMGR_StartCore(kMCMGR_Core1, CORE1_BOOT_ADDRESS, 5, kMCMGR_Start_Synchronous);
- delay();
- }
- PRINTF("M4 receive:%d\r\n",M0_TO_M4_R);
- delay();
- M4_TO_M0_T++;
复制代码
M0主函数:
- static volatile uint8_t M0_TO_M4_T __attribute__((at(0x20004000-4)));
- #define M4_TO_M0_R (*(volatile uint8_t*)(0x20004000-8))
复制代码- delay();
- M0_TO_M4_T++;
- PRINTF("M0receive:%d\r\n",M4_TO_M0_R);
- GPIO_TogglePinsOutput(GPIO, 0u, 1u << 15u);
- GPIO_TogglePinsOutput(GPIO, 0u, 1u << 19u);
- GPIO_TogglePinsOutput(GPIO, 0u, 1u << 21u);
- GPIO_TogglePinsOutput(GPIO, 0u, 1u << 22u);
- GPIO_TogglePinsOutput(GPIO, 0u, 1u << 25u);
- GPIO_TogglePinsOutput(GPIO, 0u, 1u << 26u);
- GPIO_TogglePinsOutput(GPIO, 0u, 1u << 29u);
- GPIO_TogglePinsOutput(GPIO, 0u, 1u << 30u);
复制代码 4.执行效果
启动时会默认选择M0+打开,按下PB2关闭M0+内核 按下PB3打开M0+内核,以上便是我对M0和M4双核通信的简单理解。
附上代码:
hello_world_cm4_hello_world_cm0plus.zip
(4.78 MB, 下载次数: 249)
|
|