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());
38 /*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
40 #define __SUBS(Rd, Rm, Rn) __ASM("SUBS " # Rd ", " # Rm ", " # Rn)
41 #define __ADDS(Rd, Rm, Rn) __ASM("ADDS " # Rd ", " # Rm ", " # Rn)
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")
47 void TC_CoreAFunc_CPSR(void) {
50 uint32_t cpsr = __get_CPSR();
51 __set_CPSR(cpsr & CPSR_M_Msk);
53 // Check negative flag
57 result = __get_CPSR();
58 ASSERT_TRUE((result & CPSR_N_Msk) == CPSR_N_Msk);
60 // Check zero and compare flag
63 result = __get_CPSR();
64 ASSERT_TRUE((result & CPSR_Z_Msk) == CPSR_Z_Msk);
65 ASSERT_TRUE((result & CPSR_C_Msk) == CPSR_C_Msk);
67 // Check overflow flag
71 result = __get_CPSR();
72 ASSERT_TRUE((result & CPSR_V_Msk) == CPSR_V_Msk);
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();
80 ASSERT_TRUE(mode == __get_mode());
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;
88 void TC_CoreAFunc_SP(void) {
89 TC_CoreAFunc_SP_orig = __get_SP();
91 TC_CoreAFunc_SP_sp = TC_CoreAFunc_SP_orig + 0x12345678U;
92 __set_SP(TC_CoreAFunc_SP_sp);
93 TC_CoreAFunc_SP_result = __get_SP();
95 __set_SP(TC_CoreAFunc_SP_orig);
97 ASSERT_TRUE(TC_CoreAFunc_SP_result == TC_CoreAFunc_SP_sp);
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;
105 void TC_CoreAFunc_SP_usr(void) {
106 TC_CoreAFunc_SP_usr_orig = __get_SP_usr();
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();
112 __set_SP(TC_CoreAFunc_SP_usr_orig);
114 ASSERT_TRUE(TC_CoreAFunc_SP_usr_result == TC_CoreAFunc_SP_usr_sp);
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();
122 ASSERT_TRUE(fpexc == __get_FPEXC());
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();
130 ASSERT_TRUE(actlr == __get_ACTLR());
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();
138 ASSERT_TRUE(cpacr == __get_CPACR());
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();
146 ASSERT_TRUE(dfsr == __get_DFSR());
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();
154 ASSERT_TRUE(ifsr == __get_IFSR());
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();
161 ASSERT_TRUE(isr == __get_ISR());
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();
168 ASSERT_TRUE(cbar == __get_CBAR());
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();
176 ASSERT_TRUE(ttbr0 == __get_TTBR0());
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();
184 ASSERT_TRUE(dacr == __get_DACR());
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();
192 ASSERT_TRUE(sctlr == __get_SCTLR());
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();
200 ASSERT_TRUE(actrl == __get_ACTRL());
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();
207 ASSERT_TRUE(mpidr == __get_MPIDR());
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();
215 ASSERT_TRUE(vbar == __get_VBAR());