Skip to content

Commit b3f17a9

Browse files
committed
Support mbed_start_application for Cortex-M23
1 parent 79640c6 commit b3f17a9

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

platform/mbed_application.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,20 @@ static void powerdown_nvic()
4848
int i;
4949
int j;
5050

51+
#if defined(__CORTEX_M23)
52+
isr_groups_32 = 16;
53+
#else
5154
isr_groups_32 = ((SCnSCB->ICTR & SCnSCB_ICTR_INTLINESNUM_Msk) >> SCnSCB_ICTR_INTLINESNUM_Pos) + 1;
55+
#endif
5256
for (i = 0; i < isr_groups_32; i++) {
5357
NVIC->ICER[i] = 0xFFFFFFFF;
5458
NVIC->ICPR[i] = 0xFFFFFFFF;
5559
for (j = 0; j < 8; j++) {
60+
#if defined(__CORTEX_M23)
61+
NVIC->IPR[i * 8 + j] = 0x00000000;
62+
#else
5663
NVIC->IP[i * 8 + j] = 0x00000000;
64+
#endif
5765
}
5866
}
5967
}
@@ -69,17 +77,20 @@ static void powerdown_scb(uint32_t vtor)
6977
SCB->SCR = 0x00000000;
7078
// SCB->CCR - Implementation defined value
7179
for (i = 0; i < 12; i++) {
72-
#if defined(__CORTEX_M7)
80+
#if defined(__CORTEX_M7) || defined(__CORTEX_M23)
7381
SCB->SHPR[i] = 0x00;
7482
#else
7583
SCB->SHP[i] = 0x00;
7684
#endif
7785
}
7886
SCB->SHCSR = 0x00000000;
87+
#if defined(__CORTEX_M23)
88+
#else
7989
SCB->CFSR = 0xFFFFFFFF;
8090
SCB->HFSR = SCB_HFSR_DEBUGEVT_Msk | SCB_HFSR_FORCED_Msk | SCB_HFSR_VECTTBL_Msk;
8191
SCB->DFSR = SCB_DFSR_EXTERNAL_Msk | SCB_DFSR_VCATCH_Msk |
8292
SCB_DFSR_DWTTRAP_Msk | SCB_DFSR_BKPT_Msk | SCB_DFSR_HALTED_Msk;
93+
#endif
8394
// SCB->MMFAR - Implementation defined value
8495
// SCB->BFAR - Implementation defined value
8596
// SCB->AFSR - Implementation defined value
@@ -106,6 +117,18 @@ __asm static void start_new_application(void *sp, void *pc)
106117

107118
void start_new_application(void *sp, void *pc)
108119
{
120+
#if defined(__CORTEX_M23)
121+
__asm volatile (
122+
"ldr r2, =0 \n"
123+
"msr control, r2 \n" // Switch to main stack
124+
"mov sp, %0 \n"
125+
"msr primask, r2 \n" // Enable interrupts
126+
"bx %1 \n"
127+
:
128+
: "l" (sp), "l" (pc)
129+
: "r2", "cc", "memory"
130+
);
131+
#else
109132
__asm volatile (
110133
"mov r2, #0 \n"
111134
"msr control, r2 \n" // Switch to main stack
@@ -116,6 +139,7 @@ void start_new_application(void *sp, void *pc)
116139
: "l" (sp), "l" (pc)
117140
: "r2", "cc", "memory"
118141
);
142+
#endif
119143
}
120144

121145
#else

platform/mbed_application.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919

2020
#include<stdint.h>
2121

22-
#if defined(__CORTEX_M3) || defined(__CORTEX_M4) || defined(__CORTEX_M7)
22+
#if defined(__CORTEX_M3) || defined(__CORTEX_M4) || defined(__CORTEX_M7)\
23+
|| defined(__CORTEX_M23)
2324
#define MBED_APPLICATION_SUPPORT 1
2425
#else
2526
#define MBED_APPLICATION_SUPPORT 0

0 commit comments

Comments
 (0)