]> begriffs open source - cmsis/blob - CMSIS/CoreValidation/Source/CV_CoreAFunc.c
CoreValidation: Fixed compiler and MISRA warnings.
[cmsis] / CMSIS / CoreValidation / Source / CV_CoreAFunc.c
1 /*-----------------------------------------------------------------------------
2  *      Name:         CV_CoreFunc.c 
3  *      Purpose:      CMSIS CORE validation tests implementation
4  *-----------------------------------------------------------------------------
5  *      Copyright (c) 2017 ARM Limited. All rights reserved.
6  *----------------------------------------------------------------------------*/
7
8 #include "CV_Framework.h"
9 #include "cmsis_cv.h"
10
11 /*-----------------------------------------------------------------------------
12  *      Test implementation
13  *----------------------------------------------------------------------------*/
14
15 /*-----------------------------------------------------------------------------
16  *      Test cases
17  *----------------------------------------------------------------------------*/
18
19 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
20 void TC_CoreAFunc_IRQ(void) {
21   __enable_irq();
22   __disable_irq();
23 }
24
25 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
26 void TC_CoreAFunc_FPSCR(void) {
27
28   volatile float f1 = 47.11f;
29   volatile float f2 = 8.15f;
30   volatile float f3 = f1 / f2;
31
32   uint32_t fpscr = __get_FPSCR();
33   __set_FPSCR(fpscr);
34
35   ASSERT_TRUE(fpscr == __get_FPSCR());
36 }
37
38 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
39 #if defined(__CC_ARM)
40 #define __SUBS(Rd, Rm, Rn) __ASM("SUBS " # Rd ", " # Rm ", " # Rn)
41 #define __ADDS(Rd, Rm, Rn) __ASM("ADDS " # Rd ", " # Rm ", " # Rn)
42 #else
43 #define __SUBS(Rd, Rm, Rn) __ASM("SUBS %0, %1, %2" : "=r"(Rd) : "r"(Rm), "r"(Rn) : "cc")
44 #define __ADDS(Rd, Rm, Rn) __ASM("ADDS %0, %1, %2" : "=r"(Rd) : "r"(Rm), "r"(Rn) : "cc")
45 #endif
46
47 void TC_CoreAFunc_CPSR(void) {
48   uint32_t result;
49
50   uint32_t cpsr = __get_CPSR();
51   __set_CPSR(cpsr & CPSR_M_Msk);
52
53   // Check negative flag
54   int32_t Rm = 5;
55   int32_t Rn = 7;
56   __SUBS(Rm, Rm, Rn);
57   result  = __get_CPSR();
58   ASSERT_TRUE((result & CPSR_N_Msk) == CPSR_N_Msk);
59
60   // Check zero and compare flag
61   Rm = 5;
62   __SUBS(Rm, Rm, Rm);
63   result  = __get_CPSR();
64   ASSERT_TRUE((result & CPSR_Z_Msk) == CPSR_Z_Msk);
65   ASSERT_TRUE((result & CPSR_C_Msk) == CPSR_C_Msk);
66
67   // Check overflow flag
68   Rm = 5;
69   Rn = INT32_MAX;
70   __ADDS(Rm, Rm, Rn);
71   result  = __get_CPSR();
72   ASSERT_TRUE((result & CPSR_V_Msk) == CPSR_V_Msk);
73 }
74
75 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
76 void TC_CoreAFunc_Mode(void) {
77   uint32_t mode = __get_mode();
78   __set_mode(mode);
79
80   ASSERT_TRUE(mode == __get_mode());
81 }
82
83 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
84 static uint32_t TC_CoreAFunc_SP_orig;
85 static uint32_t TC_CoreAFunc_SP_sp;
86 static uint32_t TC_CoreAFunc_SP_result;
87
88 void TC_CoreAFunc_SP(void) {
89   TC_CoreAFunc_SP_orig = __get_SP();
90
91   TC_CoreAFunc_SP_sp = TC_CoreAFunc_SP_orig + 0x12345678U;
92   __set_SP(TC_CoreAFunc_SP_sp);
93   TC_CoreAFunc_SP_result = __get_SP();
94
95   __set_SP(TC_CoreAFunc_SP_orig);
96
97   ASSERT_TRUE(TC_CoreAFunc_SP_result == TC_CoreAFunc_SP_sp);
98 }
99
100 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
101 static uint32_t TC_CoreAFunc_SP_usr_orig;
102 static uint32_t TC_CoreAFunc_SP_usr_sp;
103 static uint32_t TC_CoreAFunc_SP_usr_result;
104
105 void TC_CoreAFunc_SP_usr(void) {
106   TC_CoreAFunc_SP_usr_orig = __get_SP_usr();
107
108   TC_CoreAFunc_SP_usr_sp = TC_CoreAFunc_SP_usr_orig + 0x12345678U;
109   __set_SP(TC_CoreAFunc_SP_usr_sp);
110   TC_CoreAFunc_SP_usr_result = __get_SP_usr();
111
112   __set_SP(TC_CoreAFunc_SP_usr_orig);
113
114   ASSERT_TRUE(TC_CoreAFunc_SP_usr_result == TC_CoreAFunc_SP_usr_sp);
115 }
116
117 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
118 void TC_CoreAFunc_FPEXC(void) {
119   uint32_t fpexc = __get_FPEXC();
120   __set_FPEXC(fpexc);
121
122   ASSERT_TRUE(fpexc == __get_FPEXC());
123 }
124
125 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
126 void TC_CoreAFunc_ACTLR(void) {
127   uint32_t actlr = __get_ACTLR();
128   __set_ACTLR(actlr);
129
130   ASSERT_TRUE(actlr == __get_ACTLR());
131 }
132
133 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
134 void TC_CoreAFunc_CPACR(void) {
135   uint32_t cpacr = __get_CPACR();
136   __set_CPACR(cpacr);
137
138   ASSERT_TRUE(cpacr == __get_CPACR());
139 }
140
141 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
142 void TC_CoreAFunc_DFSR(void) {
143   uint32_t dfsr = __get_DFSR();
144   __set_DFSR(dfsr);
145
146   ASSERT_TRUE(dfsr == __get_DFSR());
147 }
148
149 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
150 void TC_CoreAFunc_IFSR(void) {
151   uint32_t ifsr = __get_IFSR();
152   __set_IFSR(ifsr);
153
154   ASSERT_TRUE(ifsr == __get_IFSR());
155 }
156
157 /*0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
158 void TC_CoreAFunc_ISR(void) {
159   uint32_t isr = __get_ISR();
160
161   ASSERT_TRUE(isr == __get_ISR());
162 }
163
164 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
165 void TC_CoreAFunc_CBAR(void) {
166   uint32_t cbar = __get_CBAR();
167
168   ASSERT_TRUE(cbar == __get_CBAR());
169 }
170
171 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
172 void TC_CoreAFunc_TTBR0(void) {
173   uint32_t ttbr0 = __get_TTBR0();
174   __set_TTBR0(ttbr0);
175
176   ASSERT_TRUE(ttbr0 == __get_TTBR0());
177 }
178
179 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
180 void TC_CoreAFunc_DACR(void) {
181   uint32_t dacr = __get_DACR();
182   __set_DACR(dacr);
183
184   ASSERT_TRUE(dacr == __get_DACR());
185 }
186
187 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
188 void TC_CoreAFunc_SCTLR(void) {
189   uint32_t sctlr = __get_SCTLR();
190   __set_SCTLR(sctlr);
191
192   ASSERT_TRUE(sctlr == __get_SCTLR());
193 }
194
195 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
196 void TC_CoreAFunc_ACTRL(void) {
197   uint32_t actrl = __get_ACTRL();
198   __set_ACTRL(actrl);
199
200   ASSERT_TRUE(actrl == __get_ACTRL());
201 }
202
203 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
204 void TC_CoreAFunc_MPIDR(void) {
205   uint32_t mpidr = __get_MPIDR();
206
207   ASSERT_TRUE(mpidr == __get_MPIDR());
208 }
209
210 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
211 void TC_CoreAFunc_VBAR(void) {
212   uint32_t vbar = __get_VBAR();
213   __set_VBAR(vbar);
214
215   ASSERT_TRUE(vbar == __get_VBAR());
216 }