aboutsummaryrefslogtreecommitdiff
path: root/test9.c
blob: 05ce68d3b2869cb727eff16f2272f299ee5e2901 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/* Capture initial register states
 */
#include "armv7m.h"

char _main_stack_top;

static
void test_equal(const char *msg, uint32_t lhs, uint32_t rhs)
{
    puts(lhs==rhs ? "ok - " : "fail - ");
    puthex(lhs);
    puts(" == ");
    puthex(rhs);
    puts(" # ");
    puts(msg);
    putc('\n');
}

struct early_state_t {
    uint32_t LR;
    uint32_t XPSR;
    uint32_t PRIMASK;
    uint32_t FAULTMASK;
    uint32_t BASEPRI;
    uint32_t CONTROL;
    uint32_t MSP;
    uint32_t PSP;
    uint32_t cpuid;
    uint32_t icsr;
    uint32_t vtor;
    uint32_t aircr;
    uint32_t scr;
    uint32_t ccr;
    uint32_t shpr[3];
    uint32_t shcsr;
    uint32_t syst_csr;
    uint32_t ictr;
    uint32_t mpu_type;
    uint32_t mpu_ctrl;
    uint32_t marker;
} early_state;

void main(void)
{
#define TEST(FLD, VAL) test_equal(#FLD, early_state.FLD, VAL)
    TEST(marker, 0xdeadbeaf); /* check consistency w/ init-m-test9.S */
    TEST(LR, 0xffffffff);
    TEST(XPSR, 0);
    TEST(PRIMASK, 0);
    TEST(FAULTMASK, 0);
    TEST(BASEPRI, 0);
    TEST(CONTROL, 0);
    TEST(MSP, (uint32_t)&_main_stack_top);
    TEST(PSP, 0);
    puts("# cpuid ");
    puthex(early_state.cpuid);
    putc('\n');
    TEST(icsr, 0);
    TEST(vtor, 0);
    TEST(aircr, 0xfa050000);
    TEST(scr, 0);
    TEST(ccr, 1<<9); /* STKALIGN */
    TEST(shpr[0], 0);
    TEST(shpr[1], 0);
    TEST(shpr[2], 0);
    TEST(shcsr, 0);
    TEST(syst_csr, 0);
    puts("# ictr ");
    puthex(early_state.ictr);
    putc('\n');
    puts("# mpu_type ");
    puthex(early_state.mpu_type);
    putc('\n');
    TEST(mpu_ctrl, 0);
    puts("Done\n");
}