target/xtensa: tests: fix timer tests
Don't expect that CCOUNT increments are equal to the number of executed instructions. Verify that timer interrupt does not fire before the programmed CCOMPARE value and does fire after. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
parent
122d302053
commit
72b3b8f24a
@ -1,12 +1,22 @@
|
|||||||
#include "macros.inc"
|
#include "macros.inc"
|
||||||
|
|
||||||
|
#define CCOUNT_SHIFT 4
|
||||||
|
#define WAIT_LOOPS 20
|
||||||
|
|
||||||
|
.macro make_ccount_delta target, delta
|
||||||
|
rsr \delta, ccount
|
||||||
|
rsr \target, ccount
|
||||||
|
sub \delta, \target, \delta
|
||||||
|
slli \delta, \delta, CCOUNT_SHIFT
|
||||||
|
add \target, \target, \delta
|
||||||
|
.endm
|
||||||
|
|
||||||
test_suite timer
|
test_suite timer
|
||||||
|
|
||||||
test ccount
|
test ccount
|
||||||
rsr a3, ccount
|
rsr a3, ccount
|
||||||
rsr a4, ccount
|
rsr a4, ccount
|
||||||
sub a3, a4, a3
|
assert ne, a3, a4
|
||||||
assert eqi, a3, 1
|
|
||||||
test_end
|
test_end
|
||||||
|
|
||||||
test ccompare
|
test ccompare
|
||||||
@ -18,18 +28,18 @@ test ccompare
|
|||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
|
||||||
movi a3, 20
|
make_ccount_delta a2, a15
|
||||||
rsr a2, ccount
|
|
||||||
addi a2, a2, 20
|
|
||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
rsr a2, interrupt
|
|
||||||
assert eqi, a2, 0
|
|
||||||
loop a3, 1f
|
|
||||||
rsr a3, interrupt
|
|
||||||
bnez a3, 2f
|
|
||||||
1:
|
1:
|
||||||
test_fail
|
rsr a3, interrupt
|
||||||
|
rsr a4, ccount
|
||||||
|
rsr a5, interrupt
|
||||||
|
sub a4, a4, a2
|
||||||
|
bgez a4, 2f
|
||||||
|
assert eqi, a3, 0
|
||||||
|
j 1b
|
||||||
2:
|
2:
|
||||||
|
assert nei, a5, 0
|
||||||
test_end
|
test_end
|
||||||
|
|
||||||
test ccompare0_interrupt
|
test ccompare0_interrupt
|
||||||
@ -42,9 +52,8 @@ test ccompare0_interrupt
|
|||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
|
||||||
movi a3, 20
|
movi a3, WAIT_LOOPS
|
||||||
rsr a2, ccount
|
make_ccount_delta a2, a15
|
||||||
addi a2, a2, 20
|
|
||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
rsync
|
rsync
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
@ -72,9 +81,8 @@ test ccompare1_interrupt
|
|||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
|
||||||
movi a3, 20
|
movi a3, WAIT_LOOPS
|
||||||
rsr a2, ccount
|
make_ccount_delta a2, a15
|
||||||
addi a2, a2, 20
|
|
||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
rsync
|
rsync
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
@ -99,9 +107,8 @@ test ccompare2_interrupt
|
|||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
|
|
||||||
movi a3, 20
|
movi a3, WAIT_LOOPS
|
||||||
rsr a2, ccount
|
make_ccount_delta a2, a15
|
||||||
addi a2, a2, 20
|
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
rsync
|
rsync
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
@ -125,11 +132,10 @@ test ccompare_interrupt_masked
|
|||||||
movi a2, 0
|
movi a2, 0
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
|
||||||
movi a3, 40
|
movi a3, 2 * WAIT_LOOPS
|
||||||
rsr a2, ccount
|
make_ccount_delta a2, a15
|
||||||
addi a2, a2, 20
|
|
||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
addi a2, a2, 20
|
add a2, a2, a15
|
||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
rsync
|
rsync
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
@ -156,11 +162,10 @@ test ccompare_interrupt_masked_waiti
|
|||||||
movi a2, 0
|
movi a2, 0
|
||||||
wsr a2, ccompare2
|
wsr a2, ccompare2
|
||||||
|
|
||||||
movi a3, 40
|
movi a3, 2 * WAIT_LOOPS
|
||||||
rsr a2, ccount
|
make_ccount_delta a2, a15
|
||||||
addi a2, a2, 20
|
|
||||||
wsr a2, ccompare1
|
wsr a2, ccompare1
|
||||||
addi a2, a2, 20
|
add a2, a2, a15
|
||||||
wsr a2, ccompare0
|
wsr a2, ccompare0
|
||||||
rsync
|
rsync
|
||||||
rsr a2, interrupt
|
rsr a2, interrupt
|
||||||
|
Loading…
Reference in New Issue
Block a user