bootloader.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. /* Use CMSE intrinsics */
  28. #include <arm_cmse.h>
  29. #include "RTE_Components.h"
  30. #include CMSIS_device_header
  31. /* TZ_START_NS: Start address of non-secure application */
  32. #ifndef TZ_START_NS
  33. #define TZ_START_NS (0x200000U)
  34. #endif
  35. /* typedef for non-secure callback functions */
  36. typedef void (*funcptr_void) (void) __attribute__((cmse_nonsecure_call));
  37. /* Secure main() */
  38. int main(void) {
  39. funcptr_void NonSecure_ResetHandler;
  40. /* Add user setup code for secure part here*/
  41. /* Set non-secure main stack (MSP_NS) */
  42. __TZ_set_MSP_NS(*((uint32_t *)(TZ_START_NS)));
  43. /* Get non-secure reset handler */
  44. NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));
  45. /* Start non-secure state software application */
  46. NonSecure_ResetHandler();
  47. /* Non-secure software does not return, this code is not executed */
  48. while (1) {
  49. __NOP();
  50. }
  51. }