/******************************************************************************
|
* @file main_s.c
|
* @brief Code template for secure main function
|
* @version V1.1.1
|
* @date 10. January 2018
|
******************************************************************************/
|
/*
|
* Copyright (c) 2013-2018 Arm Limited. All rights reserved.
|
*
|
* SPDX-License-Identifier: Apache-2.0
|
*
|
* Licensed under the Apache License, Version 2.0 (the License); you may
|
* not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
|
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
/* Use CMSE intrinsics */
|
#include <arm_cmse.h>
|
|
#include "RTE_Components.h"
|
#include CMSIS_device_header
|
|
/* TZ_START_NS: Start address of non-secure application */
|
#ifndef TZ_START_NS
|
#define TZ_START_NS (0x200000U)
|
#endif
|
|
/* typedef for non-secure callback functions */
|
typedef void (*funcptr_void) (void) __attribute__((cmse_nonsecure_call));
|
|
/* Secure main() */
|
int main(void) {
|
funcptr_void NonSecure_ResetHandler;
|
|
/* Add user setup code for secure part here*/
|
|
/* Set non-secure main stack (MSP_NS) */
|
__TZ_set_MSP_NS(*((uint32_t *)(TZ_START_NS)));
|
|
/* Get non-secure reset handler */
|
NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));
|
|
/* Start non-secure state software application */
|
NonSecure_ResetHandler();
|
|
/* Non-secure software does not return, this code is not executed */
|
while (1) {
|
__NOP();
|
}
|
}
|