]> begriffs open source - cmsis/blob - CMSIS/CoreValidation/Tests/bootloader/bootloader.c
CoreValidation: Fixed AC5 compiler settings for CA5 targets.
[cmsis] / CMSIS / CoreValidation / Tests / bootloader / bootloader.c
1 /*
2  * Copyright (c) 2013-2016 ARM Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Licensed under the Apache License, Version 2.0 (the License); you may
7  * not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * ----------------------------------------------------------------------
19  *
20  * $Date:        15. October 2016
21  * $Revision:    1.1.0
22  *
23  * Project:      TrustZone for ARMv8-M
24  * Title:        Code template for secure main function
25  *
26  *---------------------------------------------------------------------------*/
27  
28 /* Use CMSE intrinsics */
29 #include <arm_cmse.h>
30  
31 #include "RTE_Components.h"
32 #include CMSIS_device_header
33  
34 /* TZ_START_NS: Start address of non-secure application */
35 #ifndef TZ_START_NS
36 #define TZ_START_NS (0x200000U)
37 #endif
38  
39 /* typedef for non-secure callback functions */
40 typedef void (*funcptr_void) (void) __attribute__((cmse_nonsecure_call));
41  
42 /* Secure main() */
43 int main(void) {
44   funcptr_void NonSecure_ResetHandler;
45  
46   /* Add user setup code for secure part here*/
47  
48   /* Set non-secure main stack (MSP_NS) */
49   __TZ_set_MSP_NS(*((uint32_t *)(TZ_START_NS)));
50  
51   /* Get non-secure reset handler */
52   NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));
53  
54   /* Start non-secure state software application */
55   NonSecure_ResetHandler();
56  
57   /* Non-secure software does not return, this code is not executed */
58   while (1) {
59     __NOP();
60   }
61 }