]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/startup/boot_multicore_slave.c
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / NXP_Code / startup / boot_multicore_slave.c
1 //*****************************************************************************\r
2 // boot_multicore_slave.c\r
3 //\r
4 // Provides simple functions to boot slave core in LPC55xx multicore system\r
5 //\r
6 // Version : 181106\r
7 //\r
8 //*****************************************************************************\r
9 //\r
10 // Copyright 2016-2019 NXP\r
11 // All rights reserved.\r
12 //\r
13 // SPDX-License-Identifier: BSD-3-Clause\r
14 //*****************************************************************************\r
15 \r
16 #if defined(__MULTICORE_MASTER)\r
17 \r
18 #include <stdint.h>\r
19 \r
20 //#define SYSCON_BASE       ((uint32_t) 0x40000000)\r
21 #define SYSCON_BASE ((uint32_t)0x50000000)\r
22 \r
23 #define CPBOOT (((volatile uint32_t *)(SYSCON_BASE + 0x804)))\r
24 #define CPUCTRL (((volatile uint32_t *)(SYSCON_BASE + 0x800)))\r
25 #define CPUCFG (((volatile uint32_t *)(SYSCON_BASE + 0xFD4)))\r
26 \r
27 #define CPUCTRL_KEY ((uint32_t)(0x0000C0C4 << 16))\r
28 #define CORE1_CLK_ENA (1 << 3)\r
29 #define CORE1_RESET_ENA (1 << 5)\r
30 #define CORE1_ENABLE (1 << 2)\r
31 \r
32 extern uint8_t __core_m33slave_START__;\r
33 \r
34 void boot_multicore_slave(void)\r
35 {\r
36     volatile uint32_t *u32REG, u32Val;\r
37 \r
38     unsigned int *slavevectortable_ptr = (unsigned int *)&__core_m33slave_START__;\r
39 \r
40     // Enable CPU1 in SYSCON->CPUCFG\r
41     *CPUCFG |= CORE1_ENABLE;\r
42 \r
43     // Set CPU1 boot address in SYSCON->CPBoot\r
44     *CPBOOT = (uint32_t)slavevectortable_ptr;\r
45 \r
46     // Read SYSCON->CPUCTRL and set key value in bits 31:16\r
47     u32REG = (uint32_t *)CPUCTRL;\r
48     u32Val = *u32REG | CPUCTRL_KEY;\r
49 \r
50     // Enable slave clock and reset in SYSCON->CPUCTRL\r
51     *u32REG = u32Val | CORE1_CLK_ENA | CORE1_RESET_ENA;\r
52 \r
53     // Clear slave reset in SYSCON->CPUCTRL\r
54     *u32REG = (u32Val | CORE1_CLK_ENA) & (~CORE1_RESET_ENA);\r
55 }\r
56 #endif // defined (__MULTICORE_MASTER)\r