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 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
|
#include "macros.inc"
test_suite interrupt
.macro clear_interrupts
movi a2, 0
wsr a2, intenable
wsr a2, ccompare0
wsr a2, ccompare1
wsr a2, ccompare2
esync
rsr a2, interrupt
wsr a2, intclear
esync
rsr a2, interrupt
assert eqi, a2, 0
.endm
.macro check_l1
rsr a2, ps
movi a3, 0x1f /* EXCM | INTMASK */
and a2, a2, a3
assert eqi, a2, 0x10 /* only EXCM is set for level-1 interrupt */
rsr a2, exccause
assert eqi, a2, 4
.endm
test rsil
clear_interrupts
rsr a2, ps
rsil a3, 7
rsr a4, ps
assert eq, a2, a3
movi a2, 0xf
and a2, a4, a2
assert eqi, a2, 7
xor a3, a3, a4
movi a2, 0xfffffff0
and a2, a3, a2
assert eqi, a2, 0
test_end
test soft_disabled
set_vector kernel, 1f
clear_interrupts
movi a2, 0x80
wsr a2, intset
esync
rsr a3, interrupt
assert eq, a2, a3
wsr a2, intclear
esync
rsr a3, interrupt
assert eqi, a3, 0
j 2f
1:
test_fail
2:
test_end
test soft_intenable
set_vector kernel, 1f
clear_interrupts
movi a2, 0x80
wsr a2, intset
esync
rsr a3, interrupt
assert eq, a2, a3
rsil a3, 0
wsr a2, intenable
esync
test_fail
1:
check_l1
test_end
test soft_rsil
set_vector kernel, 1f
clear_interrupts
movi a2, 0x80
wsr a2, intset
esync
rsr a3, interrupt
assert eq, a2, a3
wsr a2, intenable
rsil a3, 0
esync
test_fail
1:
check_l1
test_end
test soft_waiti
set_vector kernel, 1f
clear_interrupts
movi a2, 0x80
wsr a2, intset
esync
rsr a3, interrupt
assert eq, a2, a3
wsr a2, intenable
waiti 0
test_fail
1:
check_l1
test_end
test soft_user
set_vector kernel, 1f
set_vector user, 2f
clear_interrupts
movi a2, 0x80
wsr a2, intset
esync
rsr a3, interrupt
assert eq, a2, a3
wsr a2, intenable
rsr a2, ps
movi a3, 0x20
or a2, a2, a3
wsr a2, ps
waiti 0
1:
test_fail
2:
check_l1
test_end
test soft_priority
set_vector kernel, 1f
set_vector level3, 2f
clear_interrupts
movi a2, 0x880
wsr a2, intenable
rsil a3, 0
esync
wsr a2, intset
esync
1:
test_fail
2:
rsr a2, ps
movi a3, 0x1f /* EXCM | INTMASK */
and a2, a2, a3
movi a3, 0x13
assert eq, a2, a3 /* EXCM and INTMASK are set
for high-priority interrupt */
test_end
test eps_epc_rfi
set_vector level3, 3f
clear_interrupts
reset_ps
movi a2, 0x880
wsr a2, intenable
rsil a3, 0
rsr a3, ps
esync
wsr a2, intset
1:
esync
2:
test_fail
3:
rsr a2, eps3
assert eq, a2, a3
rsr a2, epc3
movi a3, 1b
assert ge, a2, a3
movi a3, 2b
assert ge, a3, a2
movi a2, 4f
wsr a2, epc3
movi a2, 0x40003
wsr a2, eps3
rfi 3
test_fail
4:
rsr a2, ps
movi a3, 0x40003
assert eq, a2, a3
test_end
test_suite_end
|