.include "macros.inc" test_suite timer test ccount rsr a3, ccount rsr a4, ccount sub a3, a4, a3 assert eqi, a3, 1 test_end test ccompare movi a2, 0 wsr a2, intenable rsr a2, interrupt wsr a2, intclear movi a2, 0 wsr a2, ccompare1 wsr a2, ccompare2 movi a3, 20 rsr a2, ccount addi a2, a2, 20 wsr a2, ccompare0 rsr a2, interrupt assert eqi, a2, 0 loop a3, 1f rsr a3, interrupt bnez a3, 2f 1: test_fail 2: test_end test ccompare0_interrupt set_vector kernel, 2f movi a2, 0 wsr a2, intenable rsr a2, interrupt wsr a2, intclear movi a2, 0 wsr a2, ccompare1 wsr a2, ccompare2 movi a3, 20 rsr a2, ccount addi a2, a2, 20 wsr a2, ccompare0 rsync rsr a2, interrupt assert eqi, a2, 0 movi a2, 0x40 wsr a2, intenable rsil a2, 0 loop a3, 1f nop 1: test_fail 2: rsr a2, exccause assert eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */ test_end test ccompare1_interrupt set_vector level3, 2f movi a2, 0 wsr a2, intenable rsr a2, interrupt wsr a2, intclear movi a2, 0 wsr a2, ccompare0 wsr a2, ccompare2 movi a3, 20 rsr a2, ccount addi a2, a2, 20 wsr a2, ccompare1 rsync rsr a2, interrupt assert eqi, a2, 0 movi a2, 0x400 wsr a2, intenable rsil a2, 2 loop a3, 1f nop 1: test_fail 2: test_end test ccompare2_interrupt set_vector level5, 2f movi a2, 0 wsr a2, intenable rsr a2, interrupt wsr a2, intclear movi a2, 0 wsr a2, ccompare0 wsr a2, ccompare1 movi a3, 20 rsr a2, ccount addi a2, a2, 20 wsr a2, ccompare2 rsync rsr a2, interrupt assert eqi, a2, 0 movi a2, 0x2000 wsr a2, intenable rsil a2, 4 loop a3, 1f nop 1: test_fail 2: test_end test ccompare_interrupt_masked set_vector kernel, 2f movi a2, 0 wsr a2, intenable rsr a2, interrupt wsr a2, intclear movi a2, 0 wsr a2, ccompare2 movi a3, 40 rsr a2, ccount addi a2, a2, 20 wsr a2, ccompare1 addi a2, a2, 20 wsr a2, ccompare0 rsync rsr a2, interrupt assert eqi, a2, 0 movi a2, 0x40 wsr a2, intenable rsil a2, 0 loop a3, 1f nop 1: test_fail 2: rsr a2, exccause assert eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */ test_end test ccompare_interrupt_masked_waiti set_vector kernel, 2f movi a2, 0 wsr a2, intenable rsr a2, interrupt wsr a2, intclear movi a2, 0 wsr a2, ccompare2 movi a3, 40 rsr a2, ccount addi a2, a2, 20 wsr a2, ccompare1 addi a2, a2, 20 wsr a2, ccompare0 rsync rsr a2, interrupt assert eqi, a2, 0 movi a2, 0x40 wsr a2, intenable waiti 0 test_fail 2: rsr a2, exccause assert eqi, a2, 4 /* LEVEL1_INTERRUPT_CAUSE */ test_end test_suite_end