mbed-dev-f303

Committer:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4
Date:
Tue Jun 14 09:21:18 2022 +0000
Revision:
0:bdf663c61a82
lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 1 /* mbed Microcontroller Library
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 2 * Copyright (c) 2017 ARM Limited
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 3 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 4 * Licensed under the Apache License, Version 2.0 (the "License");
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 5 * you may not use this file except in compliance with the License.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 6 * You may obtain a copy of the License at
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 7 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 8 * http://www.apache.org/licenses/LICENSE-2.0
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 9 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 10 * Unless required by applicable law or agreed to in writing, software
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 11 * distributed under the License is distributed on an "AS IS" BASIS,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 13 * See the License for the specific language governing permissions and
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 14 * limitations under the License.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 15 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 16
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 17 #include "mbed_toolchain.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 18 #include <stdlib.h>
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 19 #include <stdint.h>
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 20 #include "cmsis.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 21
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 22 /* This startup is for mbed 2 baremetal. There is no config for RTOS for mbed 2,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 23 * therefore we protect this file with MBED_CONF_RTOS_PRESENT
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 24 * Note: The new consolidated started for mbed OS is in rtos/mbed_boot code file.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 25 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 26 #if !defined(MBED_CONF_RTOS_PRESENT)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 27
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 28 /* mbed_main is a function that is called before main()
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 29 * mbed_sdk_init() is also a function that is called before main(), but unlike
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 30 * mbed_main(), it is not meant for user code, but for the SDK itself to perform
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 31 * initializations before main() is called.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 32 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 33 MBED_WEAK void mbed_main(void)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 34 {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 35
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 36 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 37
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 38 /* This function can be implemented by the target to perform higher level target initialization
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 39 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 40 MBED_WEAK void mbed_sdk_init(void)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 41 {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 42
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 43 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 44
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 45 MBED_WEAK void software_init_hook_rtos()
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 46 {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 47 // Nothing by default
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 48 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 49
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 50 void mbed_copy_nvic(void)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 51 {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 52 /* If vector address in RAM is defined, copy and switch to dynamic vectors. Exceptions for M0 which doesn't have
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 53 VTOR register and for A9 for which CMSIS doesn't define NVIC_SetVector; in both cases target code is
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 54 responsible for correctly handling the vectors.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 55 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 56 #if !defined(__CORTEX_M0) && !defined(__CORTEX_A9)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 57 #ifdef NVIC_RAM_VECTOR_ADDRESS
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 58 uint32_t *old_vectors = (uint32_t *)SCB->VTOR;
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 59 uint32_t *vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS;
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 60 for (int i = 0; i < NVIC_NUM_VECTORS; i++) {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 61 vectors[i] = old_vectors[i];
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 62 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 63 SCB->VTOR = (uint32_t)NVIC_RAM_VECTOR_ADDRESS;
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 64 #endif /* NVIC_RAM_VECTOR_ADDRESS */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 65 #endif /* !defined(__CORTEX_M0) && !defined(__CORTEX_A9) */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 66 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 67
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 68 /* Toolchain specific main code */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 69
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 70 #if defined (__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 5010060))
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 71
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 72 int $Super$$main(void);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 73
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 74 int $Sub$$main(void)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 75 {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 76 mbed_main();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 77 return $Super$$main();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 78 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 79
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 80 void _platform_post_stackheap_init(void)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 81 {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 82 mbed_copy_nvic();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 83 mbed_sdk_init();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 84 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 85
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 86 #elif defined (__GNUC__)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 87
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 88 extern int __real_main(void);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 89
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 90 void software_init_hook(void)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 91 {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 92 mbed_copy_nvic();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 93 mbed_sdk_init();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 94 software_init_hook_rtos();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 95 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 96
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 97
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 98 int __wrap_main(void)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 99 {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 100 mbed_main();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 101 return __real_main();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 102 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 103
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 104 #elif defined (__ICCARM__)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 105
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 106 int __low_level_init(void)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 107 {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 108 mbed_copy_nvic();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 109 return 1;
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 110 }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 111
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 112 #endif
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 113
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 114 #endif
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 115