bootloader.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. #include <stdio.h>
  28. #include <stdlib.h>
  29. /* Use CMSE intrinsics */
  30. #include <arm_cmse.h>
  31. #include "RTE_Components.h"
  32. #include CMSIS_device_header
  33. /* TZ_START_NS: Start address of non-secure application */
  34. #ifndef TZ_START_NS
  35. #define TZ_START_NS (0x200000U)
  36. #endif
  37. /* typedef for non-secure callback functions */
  38. typedef void (*funcptr_void) (void) __attribute__((cmse_nonsecure_call));
  39. /* Secure main() */
  40. int main(void) {
  41. funcptr_void NonSecure_ResetHandler;
  42. /* Add user setup code for secure part here*/
  43. /* Set non-secure main stack (MSP_NS) */
  44. __TZ_set_MSP_NS(*((uint32_t *)(TZ_START_NS)));
  45. /* Get non-secure reset handler */
  46. NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U)));
  47. /* Start non-secure state software application */
  48. NonSecure_ResetHandler();
  49. /* Non-secure software does not return, this code is not executed */
  50. while (1) {
  51. __NOP();
  52. }
  53. }
  54. #if defined(__CORTEX_M)
  55. __NO_RETURN
  56. extern void HardFault_Handler(void);
  57. void HardFault_Handler(void) {
  58. printf("Bootloader HardFault!\n");
  59. #ifdef __MICROLIB
  60. for(;;) {}
  61. #else
  62. exit(1);
  63. #endif
  64. }
  65. #endif