File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -125,7 +125,21 @@ uint32_t eos_hal_slot_size(eos_slot_t slot);
125125#define eos_hal_enable_irqs () eos_hal_enable_interrupts()
126126
127127static inline void eos_hal_set_msp (uint32_t addr ) {
128- #if defined(__ARM_ARCH ) && (__ARM_ARCH <= 7 ) && !defined(__aarch64__ )
128+ #if defined(__ARM_ARCH_PROFILE ) && (__ARM_ARCH_PROFILE == 'M' )
129+ /* Cortex-M: MSP accessible via MSR */
130+ /* Cortex-M: MSP is accessible via MSR instruction */
131+ #elif defined(__ARM_ARCH_PROFILE ) && (__ARM_ARCH_PROFILE == 'R' )
132+ /* Cortex-R: no MSP register, set SP directly */
133+ __asm volatile ("MOV SP, %0" : : "r" (addr ));
134+ #elif defined(__ARM_ARCH ) && (__ARM_ARCH <= 7 ) && !defined(__aarch64__ )
135+ /* Generic ARM fallback (assume Cortex-M if profile unknown) */
136+ __asm volatile ("MSR MSP, %0" : : "r" (addr ));
137+ __asm volatile ("MSR MSP, %0" : : "r" (addr ));
138+ #elif defined(__ARM_ARCH_PROFILE ) && (__ARM_ARCH_PROFILE == 'R' )
139+ /* Cortex-R: set SP directly (no MSP register) */
140+ __asm volatile ("MOV SP, %0" : : "r" (addr ));
141+ #elif defined(__ARM_ARCH ) && (__ARM_ARCH <= 7 ) && !defined(__aarch64__ )
142+ /* Generic ARM fallback: try MSR MSP (Cortex-M assumed) */
129143 __asm volatile ("MSR MSP, %0" : : "r" (addr ));
130144#else
131145 (void )addr ;
You can’t perform that action at this time.
0 commit comments