LPCXpresso55S69_MRuby/src/app_aux_ctrl.c

47 lines
1.2 KiB
C

/* Board */
#include "clock_config.h"
/* ROM API */
#include "fsl_iap.h"
/* Private */
#include "app_aux_ctrl.h"
#define APP_AUX_CTRL_BASE (0x00072000UL)
int app_aux_ctrl_init(void) {
int ret = 0;
status_t sdk_ret = kStatus_Success;
flash_config_t f_config;
BOARD_BootClockFROHF96M(); /* Adjust clock to use FLASH APIs. */
sdk_ret = FLASH_Init(&f_config);
if (sdk_ret != kStatus_Success) {
ret = -1;
goto restore_clock_exit;
}
sdk_ret = FLASH_VerifyErase(&f_config, APP_AUX_CTRL_BASE, 512);
/* This is a special case, since we need to make sure the flash is NOT erased before reading the content. */
if (sdk_ret == kStatus_Success) {
ret = -2;
goto restore_clock_exit;
}
/* Restore PLL0 clock before booting the Aux domain */
BOARD_InitBootClocks();
/* Configure boot address */
SYSCON->CPBOOT = APP_AUX_CTRL_BASE;
/* Go! */
SYSCON->CPUCTRL = (0xC0C4 << 16U) | SYSCON_CPUCTRL_CPU1RSTEN(1) | SYSCON_CPUCTRL_CPU1CLKEN(1);
SYSCON->CPUCTRL = (0xC0C4 << 16U) | SYSCON_CPUCTRL_CPU1RSTEN(0) | SYSCON_CPUCTRL_CPU1CLKEN(1);
return ret;
restore_clock_exit:
BOARD_InitBootClocks();
return ret;
}