Hey guys , Im using the LPC4357 Dual core MCU . Im trying to make the slave M0 Core to turn on LED . I have created the application image for the M0 Core and included it in the M4 project. Then sat the shadow register M0AppMEMMAP to point at the start of the image code (In the SRAM and on a 64Kbyte boundary as the manual says) Here is my work so far // This is the main from the M0 Project void main () { CLOCK_CMD(BASE_M4,CLK_M4_GPIO,ENABLE_CLK); // Enable the SCU CLOCK_CMD(BASE_M4,CLK_M4_SCU,ENABLE_CLK); // scu_pinmux(0x09 , 4 , MD_PDN , FUNC4); // GPIO_SetDir (5 , 1<<17 , 1); // GPIO_SetValue(5,1<<17); // Just turn on LED while(1) {
} } // // // And this is the main from the M4 master core Project #define SRAM_16KB_BLOCK_START 0x2000C000 uint8_t M0_App_Code[4*1024] __attribute__((at(SRAM_16KB_BLOCK_START))); void main () {
uint32_t i; CLOCK_CMD(BASE_M4,CLK_M4_M0APP,ENABLE_CLK); // Enable M0 clock CLOCK_CMD(BASE_M4,CLK_M4_CREG ,ENABLE_CLK); // for(i=0; i<sizeof (LR0) ; i++) M0_App_Code[i]=LR0[i]; // Copy image to flash Halt_M0_Salve(); // Halt Slave CPU in case Set_M0_Start_Address(SRAM_16KB_BLOCK_START); // Set shadow register M0APPMEMMAP Start_M0_Slave(); // Start the M0 Core while(1) {
}
} // // // And here is the Halt and Start functions
void Halt_M0_Salve(void) { uint32_t tmp; tmp=LPC_RGU->RESET_ACTIVE_STATUS1; while ((tmp & (1<<24))) { LPC_RGU->RESET_CTRL1=(1<<24); tmp=LPC_RGU->RESET_ACTIVE_STATUS1; } } // void Start_M0_Slave (void) {
uint32_t tmp; tmp=LPC_RGU->RESET_ACTIVE_STATUS1; while (!(tmp & (1<<24))) { LPC_RGU->RESET_CTRL1=(0<<24); tmp=LPC_RGU->RESET_ACTIVE_STATUS1; } } // // void Set_M0_Start_Address (uint32_t address) { LPC_CREG->M0APPMEMMAP=address; } // // I have separate R/W sections for both cores (both projects) so there is no memory overlap The problem is that it is not working . Any ideas ?