Biomimetics MBED Library w/ Added Support for CAN3

Dependents:   CAN_TEST SPIne_Plus_DYNO_SENSORS SPIne_Plus_v2 SPIne_Plus_Dyno_v2

Committer:
adimmit
Date:
Tue Mar 09 20:33:24 2021 +0000
Revision:
3:993b4d6ff61e
Parent:
0:083111ae2a11
added CAN3

Who changed what in which revision?

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