-
Notifications
You must be signed in to change notification settings - Fork 165
/
Copy pathtest.rs
179 lines (155 loc) · 5.92 KB
/
test.rs
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#[test]
fn cpuid() {
let cpuid = unsafe { &*crate::peripheral::CPUID::PTR };
assert_eq!(address(&cpuid.base), 0xE000_ED00);
assert_eq!(address(&cpuid.pfr), 0xE000_ED40);
assert_eq!(address(&cpuid.dfr), 0xE000_ED48);
assert_eq!(address(&cpuid.afr), 0xE000_ED4C);
assert_eq!(address(&cpuid.mmfr), 0xE000_ED50);
assert_eq!(address(&cpuid.isar), 0xE000_ED60);
assert_eq!(address(&cpuid.clidr), 0xE000_ED78);
assert_eq!(address(&cpuid.ctr), 0xE000_ED7C);
assert_eq!(address(&cpuid.ccsidr), 0xE000_ED80);
assert_eq!(address(&cpuid.csselr), 0xE000_ED84);
}
#[test]
fn dcb() {
let dcb = unsafe { &*crate::peripheral::DCB::PTR };
assert_eq!(address(&dcb.dhcsr), 0xE000_EDF0);
assert_eq!(address(&dcb.dcrsr), 0xE000_EDF4);
assert_eq!(address(&dcb.dcrdr), 0xE000_EDF8);
assert_eq!(address(&dcb.demcr), 0xE000_EDFC);
}
#[test]
fn dwt() {
let dwt = unsafe { &*crate::peripheral::DWT::PTR };
assert_eq!(address(&dwt.ctrl), 0xE000_1000);
#[cfg(not(armv6m))]
assert_eq!(address(&dwt.cyccnt), 0xE000_1004);
#[cfg(not(armv6m))]
assert_eq!(address(&dwt.cpicnt), 0xE000_1008);
#[cfg(not(armv6m))]
assert_eq!(address(&dwt.exccnt), 0xE000_100C);
#[cfg(not(armv6m))]
assert_eq!(address(&dwt.sleepcnt), 0xE000_1010);
#[cfg(not(armv6m))]
assert_eq!(address(&dwt.lsucnt), 0xE000_1014);
#[cfg(not(armv6m))]
assert_eq!(address(&dwt.foldcnt), 0xE000_1018);
assert_eq!(address(&dwt.pcsr), 0xE000_101C);
if cfg!(not(armv6m)) {
assert_eq!(address(&dwt.comp0.comp), 0xE000_1020);
assert_eq!(address(&dwt.comp0.mask), 0xE000_1024);
assert_eq!(address(&dwt.comp0.function), 0xE000_1028);
assert_eq!(address(&dwt.comps[0].comp), 0xE000_1030);
assert_eq!(address(&dwt.comps[0].mask), 0xE000_1034);
assert_eq!(address(&dwt.comps[0].function), 0xE000_1038);
}
if cfg!(armv6m) {
assert_eq!(address(&dwt.comps[0].comp), 0xE000_1020);
assert_eq!(address(&dwt.comps[0].mask), 0xE000_1024);
assert_eq!(address(&dwt.comps[0].function), 0xE000_1028);
}
#[cfg(not(armv6m))]
assert_eq!(address(&dwt.lar), 0xE000_1FB0);
#[cfg(not(armv6m))]
assert_eq!(address(&dwt.lsr), 0xE000_1FB4);
}
#[test]
fn fpb() {
let fpb = unsafe { &*crate::peripheral::FPB::PTR };
assert_eq!(address(&fpb.ctrl), 0xE000_2000);
assert_eq!(address(&fpb.remap), 0xE000_2004);
assert_eq!(address(&fpb.comp), 0xE000_2008);
assert_eq!(address(&fpb.comp[1]), 0xE000_200C);
assert_eq!(address(&fpb.lar), 0xE000_2FB0);
assert_eq!(address(&fpb.lsr), 0xE000_2FB4);
}
#[test]
fn fpu() {
let fpu = unsafe { &*crate::peripheral::FPU::PTR };
assert_eq!(address(&fpu.fpccr), 0xE000_EF34);
assert_eq!(address(&fpu.fpcar), 0xE000_EF38);
assert_eq!(address(&fpu.fpdscr), 0xE000_EF3C);
assert_eq!(address(&fpu.mvfr), 0xE000_EF40);
assert_eq!(address(&fpu.mvfr[1]), 0xE000_EF44);
assert_eq!(address(&fpu.mvfr[2]), 0xE000_EF48);
}
#[test]
fn itm() {
let itm = unsafe { &*crate::peripheral::ITM::PTR };
assert_eq!(address(&itm.stim), 0xE000_0000);
assert_eq!(address(&itm.ter), 0xE000_0E00);
assert_eq!(address(&itm.tpr), 0xE000_0E40);
assert_eq!(address(&itm.tcr), 0xE000_0E80);
assert_eq!(address(&itm.lar), 0xE000_0FB0);
assert_eq!(address(&itm.lsr), 0xE000_0FB4);
}
#[test]
fn mpu() {
let mpu = unsafe { &*crate::peripheral::MPU::PTR };
assert_eq!(address(&mpu._type), 0xE000ED90);
assert_eq!(address(&mpu.ctrl), 0xE000ED94);
assert_eq!(address(&mpu.rnr), 0xE000ED98);
assert_eq!(address(&mpu.rbar), 0xE000ED9C);
assert_eq!(address(&mpu.rasr), 0xE000EDA0);
assert_eq!(address(&mpu.rbar_a1), 0xE000EDA4);
assert_eq!(address(&mpu.rasr_a1), 0xE000EDA8);
assert_eq!(address(&mpu.rbar_a2), 0xE000EDAC);
assert_eq!(address(&mpu.rasr_a2), 0xE000EDB0);
assert_eq!(address(&mpu.rbar_a3), 0xE000EDB4);
assert_eq!(address(&mpu.rasr_a3), 0xE000EDB8);
}
#[test]
fn nvic() {
let nvic = unsafe { &*crate::peripheral::NVIC::PTR };
assert_eq!(address(&nvic.iser), 0xE000E100);
assert_eq!(address(&nvic.icer), 0xE000E180);
assert_eq!(address(&nvic.ispr), 0xE000E200);
assert_eq!(address(&nvic.icpr), 0xE000E280);
assert_eq!(address(&nvic.iabr), 0xE000E300);
assert_eq!(address(&nvic.ipr), 0xE000E400);
#[cfg(not(armv6m))]
assert_eq!(address(&nvic.stir), 0xE000EF00);
}
#[test]
fn scb() {
let scb = unsafe { &*crate::peripheral::SCB::PTR };
assert_eq!(address(&scb.icsr), 0xE000_ED04);
assert_eq!(address(&scb.vtor), 0xE000_ED08);
assert_eq!(address(&scb.aircr), 0xE000_ED0C);
assert_eq!(address(&scb.scr), 0xE000_ED10);
assert_eq!(address(&scb.ccr), 0xE000_ED14);
assert_eq!(address(&scb.shpr), 0xE000_ED18);
assert_eq!(address(&scb.shcsr), 0xE000_ED24);
assert_eq!(address(&scb.cfsr), 0xE000_ED28);
assert_eq!(address(&scb.hfsr), 0xE000_ED2C);
assert_eq!(address(&scb.dfsr), 0xE000_ED30);
assert_eq!(address(&scb.mmfar), 0xE000_ED34);
assert_eq!(address(&scb.bfar), 0xE000_ED38);
assert_eq!(address(&scb.afsr), 0xE000_ED3C);
assert_eq!(address(&scb.cpacr), 0xE000_ED88);
}
#[test]
fn syst() {
let syst = unsafe { &*crate::peripheral::SYST::PTR };
assert_eq!(address(&syst.csr), 0xE000_E010);
assert_eq!(address(&syst.rvr), 0xE000_E014);
assert_eq!(address(&syst.cvr), 0xE000_E018);
assert_eq!(address(&syst.calib), 0xE000_E01C);
}
#[test]
fn tpiu() {
let tpiu = unsafe { &*crate::peripheral::TPIU::PTR };
assert_eq!(address(&tpiu.sspsr), 0xE004_0000);
assert_eq!(address(&tpiu.cspsr), 0xE004_0004);
assert_eq!(address(&tpiu.acpr), 0xE004_0010);
assert_eq!(address(&tpiu.sppr), 0xE004_00F0);
assert_eq!(address(&tpiu.ffcr), 0xE004_0304);
assert_eq!(address(&tpiu.lar), 0xE004_0FB0);
assert_eq!(address(&tpiu.lsr), 0xE004_0FB4);
assert_eq!(address(&tpiu._type), 0xE004_0FC8);
}
fn address<T>(r: *const T) -> usize {
r as usize
}