| @@ -46,9 +46,9 @@ | |||
| #ifndef __STATIC_INLINE | |||
| #define __STATIC_INLINE static inline | |||
| #endif | |||
| #ifndef __STATIC_FORCEINLINE | |||
| #ifndef __STATIC_FORCEINLINE | |||
| #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline | |||
| #endif | |||
| #endif | |||
| #ifndef __NO_RETURN | |||
| #define __NO_RETURN __attribute__((__noreturn__)) | |||
| #endif | |||
| @@ -126,23 +126,23 @@ | |||
| \details This default implementations initialized all data and additional bss | |||
| sections relying on .copy.table and .zero.table specified properly | |||
| in the used linker script. | |||
| */ | |||
| __STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) | |||
| { | |||
| extern void _start(void) __NO_RETURN; | |||
| typedef struct { | |||
| uint32_t const* src; | |||
| uint32_t* dest; | |||
| uint32_t wlen; | |||
| } __copy_table_t; | |||
| typedef struct { | |||
| uint32_t* dest; | |||
| uint32_t wlen; | |||
| } __zero_table_t; | |||
| extern const __copy_table_t __copy_table_start__; | |||
| extern const __copy_table_t __copy_table_end__; | |||
| extern const __zero_table_t __zero_table_start__; | |||
| @@ -153,16 +153,16 @@ __STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) | |||
| pTable->dest[i] = pTable->src[i]; | |||
| } | |||
| } | |||
| for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) { | |||
| for(uint32_t i=0u; i<pTable->wlen; ++i) { | |||
| pTable->dest[i] = 0u; | |||
| } | |||
| } | |||
| _start(); | |||
| } | |||
| #define __PROGRAM_START __cmsis_start | |||
| #endif | |||
| @@ -188,6 +188,8 @@ __STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) | |||
| @{ | |||
| */ | |||
| #ifndef TEENSYDUINO | |||
| /** | |||
| \brief Enable IRQ Interrupts | |||
| \details Enables IRQ interrupts by clearing the I-bit in the CPSR. | |||
| @@ -209,6 +211,7 @@ __STATIC_FORCEINLINE void __disable_irq(void) | |||
| __ASM volatile ("cpsid i" : : : "memory"); | |||
| } | |||
| #endif /* TEENSYDUINO */ | |||
| /** | |||
| \brief Get Control Register | |||
| @@ -652,7 +655,7 @@ __STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) | |||
| Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure | |||
| Stack Pointer Limit register hence zero is returned always in non-secure | |||
| mode. | |||
| \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). | |||
| \return PSPLIM Register value | |||
| */ | |||
| @@ -697,7 +700,7 @@ __STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) | |||
| Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure | |||
| Stack Pointer Limit register hence the write is silently ignored in non-secure | |||
| mode. | |||
| \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). | |||
| \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set | |||
| */ | |||
| @@ -834,7 +837,7 @@ __STATIC_FORCEINLINE uint32_t __get_FPSCR(void) | |||
| { | |||
| #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ | |||
| (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) | |||
| #if __has_builtin(__builtin_arm_get_fpscr) | |||
| #if __has_builtin(__builtin_arm_get_fpscr) | |||
| // Re-enable using built-in when GCC has been fixed | |||
| // || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) | |||
| /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ | |||