1 /*-----------------------------------------------------------------------------
3 * Purpose: CMSIS CORE validation tests implementation
4 *-----------------------------------------------------------------------------
5 * Copyright (c) 2017 ARM Limited. All rights reserved.
6 *----------------------------------------------------------------------------*/
8 #include "CV_Framework.h"
11 /*-----------------------------------------------------------------------------
13 *----------------------------------------------------------------------------*/
15 /*-----------------------------------------------------------------------------
17 *----------------------------------------------------------------------------*/
19 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
20 void TC_CoreAFunc_IRQ(void) {
25 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
26 void TC_CoreAFunc_FPSCR(void) {
28 volatile float f1 = 47.11f;
29 volatile float f2 = 8.15f;
30 volatile float f3 = f1 / f2;
32 uint32_t fpscr = __get_FPSCR();
35 ASSERT_TRUE(fpscr == __get_FPSCR());
36 ASSERT_TRUE((f3 < 5.781f) && (f3 > 5.780f));
39 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
41 #define __SUBS(Rd, Rm, Rn) __ASM("SUBS " # Rd ", " # Rm ", " # Rn)
42 #define __ADDS(Rd, Rm, Rn) __ASM("ADDS " # Rd ", " # Rm ", " # Rn)
43 #elif defined( __GNUC__ ) && defined(__thumb__)
44 #define __SUBS(Rd, Rm, Rn) __ASM("SUB %0, %1, %2" : "=r"(Rd) : "r"(Rm), "r"(Rn))
45 #define __ADDS(Rd, Rm, Rn) __ASM("ADD %0, %1, %2" : "=r"(Rd) : "r"(Rm), "r"(Rn))
47 #define __SUBS(Rd, Rm, Rn) __ASM("SUBS %0, %1, %2" : "=r"(Rd) : "r"(Rm), "r"(Rn))
48 #define __ADDS(Rd, Rm, Rn) __ASM("ADDS %0, %1, %2" : "=r"(Rd) : "r"(Rm), "r"(Rn))
51 void TC_CoreAFunc_CPSR(void) {
54 uint32_t cpsr = __get_CPSR();
55 __set_CPSR(cpsr & CPSR_M_Msk);
57 // Check negative flag
61 result = __get_CPSR();
62 ASSERT_TRUE((result & CPSR_N_Msk) == CPSR_N_Msk);
64 // Check zero and compare flag
67 result = __get_CPSR();
68 ASSERT_TRUE((result & CPSR_Z_Msk) == CPSR_Z_Msk);
69 ASSERT_TRUE((result & CPSR_C_Msk) == CPSR_C_Msk);
71 // Check overflow flag
75 result = __get_CPSR();
76 ASSERT_TRUE((result & CPSR_V_Msk) == CPSR_V_Msk);
79 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
80 void TC_CoreAFunc_Mode(void) {
81 uint32_t mode = __get_mode();
84 ASSERT_TRUE(mode == __get_mode());
87 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
88 static uint32_t TC_CoreAFunc_SP_orig;
89 static uint32_t TC_CoreAFunc_SP_sp;
90 static uint32_t TC_CoreAFunc_SP_result;
92 void TC_CoreAFunc_SP(void) {
93 TC_CoreAFunc_SP_orig = __get_SP();
95 TC_CoreAFunc_SP_sp = TC_CoreAFunc_SP_orig + 0x12345678U;
96 __set_SP(TC_CoreAFunc_SP_sp);
97 TC_CoreAFunc_SP_result = __get_SP();
99 __set_SP(TC_CoreAFunc_SP_orig);
101 ASSERT_TRUE(TC_CoreAFunc_SP_result == TC_CoreAFunc_SP_sp);
104 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
105 static uint32_t TC_CoreAFunc_SP_usr_orig;
106 static uint32_t TC_CoreAFunc_SP_usr_sp;
107 static uint32_t TC_CoreAFunc_SP_usr_result;
109 void TC_CoreAFunc_SP_usr(void) {
110 TC_CoreAFunc_SP_usr_orig = __get_SP_usr();
112 TC_CoreAFunc_SP_usr_sp = TC_CoreAFunc_SP_usr_orig + 0x12345678U;
113 __set_SP(TC_CoreAFunc_SP_usr_sp);
114 TC_CoreAFunc_SP_usr_result = __get_SP_usr();
116 __set_SP(TC_CoreAFunc_SP_usr_orig);
118 ASSERT_TRUE(TC_CoreAFunc_SP_usr_result == TC_CoreAFunc_SP_usr_sp);
121 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
122 void TC_CoreAFunc_FPEXC(void) {
123 uint32_t fpexc = __get_FPEXC();
126 ASSERT_TRUE(fpexc == __get_FPEXC());
129 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
130 void TC_CoreAFunc_ACTLR(void) {
131 uint32_t actlr = __get_ACTLR();
134 ASSERT_TRUE(actlr == __get_ACTLR());
137 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
138 void TC_CoreAFunc_CPACR(void) {
139 uint32_t cpacr = __get_CPACR();
142 ASSERT_TRUE(cpacr == __get_CPACR());
145 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
146 void TC_CoreAFunc_DFSR(void) {
147 uint32_t dfsr = __get_DFSR();
150 ASSERT_TRUE(dfsr == __get_DFSR());
153 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
154 void TC_CoreAFunc_IFSR(void) {
155 uint32_t ifsr = __get_IFSR();
158 ASSERT_TRUE(ifsr == __get_IFSR());
161 /*0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
162 void TC_CoreAFunc_ISR(void) {
163 uint32_t isr = __get_ISR();
165 ASSERT_TRUE(isr == __get_ISR());
168 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
169 void TC_CoreAFunc_CBAR(void) {
170 uint32_t cbar = __get_CBAR();
172 ASSERT_TRUE(cbar == __get_CBAR());
175 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
176 void TC_CoreAFunc_TTBR0(void) {
177 uint32_t ttbr0 = __get_TTBR0();
180 ASSERT_TRUE(ttbr0 == __get_TTBR0());
183 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
184 void TC_CoreAFunc_DACR(void) {
185 uint32_t dacr = __get_DACR();
188 ASSERT_TRUE(dacr == __get_DACR());
191 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
192 void TC_CoreAFunc_SCTLR(void) {
193 uint32_t sctlr = __get_SCTLR();
196 ASSERT_TRUE(sctlr == __get_SCTLR());
199 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
200 void TC_CoreAFunc_ACTRL(void) {
201 uint32_t actrl = __get_ACTRL();
204 ASSERT_TRUE(actrl == __get_ACTRL());
207 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
208 void TC_CoreAFunc_MPIDR(void) {
209 uint32_t mpidr = __get_MPIDR();
211 ASSERT_TRUE(mpidr == __get_MPIDR());
214 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
215 void TC_CoreAFunc_VBAR(void) {
216 uint32_t vbar = __get_VBAR();
219 ASSERT_TRUE(vbar == __get_VBAR());