查看: 4663|回复: 2

[原创] 【LPC54114双核任务二】双核启动

[复制链接]
  • TA的每日心情
    擦汗
    2024-11-7 09:48
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    35

    主题

    83

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1263
    最后登录
    2025-8-26
    发表于 2017-6-29 16:26:57 | 显示全部楼层 |阅读模式
    本帖最后由 北方. 于 2017-6-29 16:28 编辑

    1、使用keil比较方便,因为这个板子是Jlink的版本和xprosso不大兼容,连接时内存位置需要额外定制。
    2.、用例程中的双核hello-world,首先需要打开cm0的例程,并编译生成.bin文件,在cm4中的文件会自动读取这个bin文件并一起编译下载
    1.JPG
    3、然后,打开cm4,这里会看到对应的配置文件,把cm0引入
    2.JPG
    对应的代码如下:

    3.JPG
    运行后,可以在cm4中控制cm0的操作,用sw1,和sw2,可以分别启动停止cm0 的操作

    4.JPG
    使用起来还是非常方便的。
    附:
    cm0的点灯程序,
    1. int main(void)
    2. {
    3.     uint32_t startupData, i;

    4.     /* Define the init structure for the output LED pin*/
    5.     gpio_pin_config_t led_config = {
    6.         kGPIO_DigitalOutput, 0,
    7.     };

    8.     /* Initialize MCMGR before calling its API */
    9.     MCMGR_Init();

    10.     /* Get the startup data */
    11.     MCMGR_GetStartupData(kMCMGR_Core1, &startupData);

    12.     /* Make a noticable delay after the reset */
    13.     /* Use startup parameter from the master core... */
    14.     for (i = 0; i < startupData; i++)
    15.         delay();

    16.     /* Init board hardware.*/
    17.     /* enable clock for GPIO */
    18.     CLOCK_EnableClock(kCLOCK_Gpio0);
    19.     CLOCK_EnableClock(kCLOCK_Gpio1);
    20.     BOARD_InitPins_Core1();
    21.     /* Configure LED */
    22.     LED_INIT();

    23.     /* Signal the other core we are ready */
    24.     MCMGR_SignalReady(kMCMGR_Core1);

    25.     while (1)
    26.     {
    27.         delay();
    28.         LED_TOGGLE();
    29.     }
    30. }
    复制代码

    cm4的主控程序:
    1. int main(void)
    2. {
    3.     /* Define the init structure for the switches*/
    4.     gpio_pin_config_t sw_config = {kGPIO_DigitalInput, 0};

    5.     /* Init board hardware.*/
    6.     /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
    7.     CLOCK_AttachClk(kFRO12M_to_FLEXCOMM0);

    8.     BOARD_InitPins_Core0();
    9.     BOARD_BootClockFROHF48M();
    10.     BOARD_InitDebugConsole();

    11.     /* Init switches */
    12.     GPIO_PinInit(BOARD_SW1_GPIO, BOARD_SW1_GPIO_PORT, BOARD_SW1_GPIO_PIN, &sw_config);
    13.     GPIO_PinInit(BOARD_SW2_GPIO, BOARD_SW2_GPIO_PORT, BOARD_SW2_GPIO_PIN, &sw_config);

    14. #ifdef CORE1_IMAGE_COPY_TO_RAM
    15.     /* Calculate size of the image  - not required on LPCExpresso. LPCExpresso copies image to RAM during startup
    16.      * automatically */
    17.     uint32_t core1_image_size;
    18.     core1_image_size = get_core1_image_size();
    19.     PRINTF("Copy Secondary core image to address: 0x%x, size: %d\n", CORE1_BOOT_ADDRESS, core1_image_size);

    20.     /* Copy Secondary core application from FLASH to RAM. Primary core code is executed from FLASH, Secondary from RAM
    21.      * for maximal effectivity.*/
    22.     memcpy(CORE1_BOOT_ADDRESS, (void *)CORE1_IMAGE_START, core1_image_size);
    23. #endif

    24.     /* Initialize MCMGR before calling its API */
    25.     MCMGR_Init();

    26.     /* Boot Secondary core application */
    27.     PRINTF("Starting Secondary core.\n");
    28.     MCMGR_StartCore(kMCMGR_Core1, CORE1_BOOT_ADDRESS, 1, kMCMGR_Start_Synchronous);

    29.     /* Print the initial banner from Primary core */
    30.     PRINTF("\r\nHello World from the Primary Core!\r\n\n");

    31.     PRINTF("Press the SW1 button to Stop Secondary core.\r\n");
    32.     PRINTF("Press the SW2 button to Start Secondary core.\r\n");

    33.     while (1)
    34.     {
    35.         /* Stop secondary core execution. */
    36.         if (!GPIO_ReadPinInput(BOARD_SW1_GPIO, BOARD_SW1_GPIO_PORT, BOARD_SW1_GPIO_PIN))
    37.         {
    38.             MCMGR_StopCore(kMCMGR_Core1);
    39.             PRINTF("Stopped Secondary core.\n");
    40.             delay();
    41.         }
    42.         /* Start core from reset vector */
    43.         if (!GPIO_ReadPinInput(BOARD_SW2_GPIO, BOARD_SW2_GPIO_PORT, BOARD_SW2_GPIO_PIN))
    44.         {
    45.             MCMGR_StartCore(kMCMGR_Core1, CORE1_BOOT_ADDRESS, 5, kMCMGR_Start_Synchronous);
    46.             PRINTF("Started Secondary core.\n");
    47.             delay();
    48.         }
    49.     }
    50. }
    复制代码


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

    使用道具 举报

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

    连续签到: 1 天

    [LV.5]常住居民I

    0

    主题

    68

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    222
    最后登录
    2018-6-5
    发表于 2017-6-29 16:35:48 | 显示全部楼层
    照搬例程,也算是有苦劳吧,
    该会员没有填写今日想说内容.
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-11-7 09:48
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    35

    主题

    83

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1263
    最后登录
    2025-8-26
     楼主| 发表于 2017-6-29 16:54:02 | 显示全部楼层
    打火机打不着 发表于 2017-6-29 16:35
    照搬例程,也算是有苦劳吧,

    小白,能看懂也是进步,还是需要帮扶一下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-31 06:44 , Processed in 0.081892 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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