Skip to content

Commit d0be5dd

Browse files
committed
fix: add Cortex-R5 support to eos_hal_set_msp()
eos_hal_set_msp() used MSR MSP which is Cortex-M only. Added #ifdef __ARM_ARCH_PROFILE guards: - 'M' profile: MSR MSP (Cortex-M) - 'R' profile: MOV SP (Cortex-R5) - fallback: MSR MSP for unknown ARM <= v7
1 parent d58e477 commit d0be5dd

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

include/eos_hal.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff 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

127127
static 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;

0 commit comments

Comments
 (0)