mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

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