@@ -48,12 +48,20 @@ static void powerdown_nvic()
48
48
int i ;
49
49
int j ;
50
50
51
+ #if defined(__CORTEX_M23 )
52
+ isr_groups_32 = 16 ;
53
+ #else
51
54
isr_groups_32 = ((SCnSCB -> ICTR & SCnSCB_ICTR_INTLINESNUM_Msk ) >> SCnSCB_ICTR_INTLINESNUM_Pos ) + 1 ;
55
+ #endif
52
56
for (i = 0 ; i < isr_groups_32 ; i ++ ) {
53
57
NVIC -> ICER [i ] = 0xFFFFFFFF ;
54
58
NVIC -> ICPR [i ] = 0xFFFFFFFF ;
55
59
for (j = 0 ; j < 8 ; j ++ ) {
60
+ #if defined(__CORTEX_M23 )
61
+ NVIC -> IPR [i * 8 + j ] = 0x00000000 ;
62
+ #else
56
63
NVIC -> IP [i * 8 + j ] = 0x00000000 ;
64
+ #endif
57
65
}
58
66
}
59
67
}
@@ -69,17 +77,20 @@ static void powerdown_scb(uint32_t vtor)
69
77
SCB -> SCR = 0x00000000 ;
70
78
// SCB->CCR - Implementation defined value
71
79
for (i = 0 ; i < 12 ; i ++ ) {
72
- #if defined(__CORTEX_M7 )
80
+ #if defined(__CORTEX_M7 ) || defined( __CORTEX_M23 )
73
81
SCB -> SHPR [i ] = 0x00 ;
74
82
#else
75
83
SCB -> SHP [i ] = 0x00 ;
76
84
#endif
77
85
}
78
86
SCB -> SHCSR = 0x00000000 ;
87
+ #if defined(__CORTEX_M23 )
88
+ #else
79
89
SCB -> CFSR = 0xFFFFFFFF ;
80
90
SCB -> HFSR = SCB_HFSR_DEBUGEVT_Msk | SCB_HFSR_FORCED_Msk | SCB_HFSR_VECTTBL_Msk ;
81
91
SCB -> DFSR = SCB_DFSR_EXTERNAL_Msk | SCB_DFSR_VCATCH_Msk |
82
92
SCB_DFSR_DWTTRAP_Msk | SCB_DFSR_BKPT_Msk | SCB_DFSR_HALTED_Msk ;
93
+ #endif
83
94
// SCB->MMFAR - Implementation defined value
84
95
// SCB->BFAR - Implementation defined value
85
96
// SCB->AFSR - Implementation defined value
@@ -106,6 +117,18 @@ __asm static void start_new_application(void *sp, void *pc)
106
117
107
118
void start_new_application (void * sp , void * pc )
108
119
{
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
109
132
__asm volatile (
110
133
"mov r2, #0 \n"
111
134
"msr control, r2 \n" // Switch to main stack
@@ -116,6 +139,7 @@ void start_new_application(void *sp, void *pc)
116
139
: "l" (sp ), "l" (pc )
117
140
: "r2" , "cc" , "memory"
118
141
);
142
+ #endif
119
143
}
120
144
121
145
#else
0 commit comments