OSDN Git Service

* public snapshot of sid simulator
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / testsuite / sidcomp.timers / timersched.exp
1 if {! $sidtarget(arm)} then { untested "hw-timer-arm/ref-* not available"; return }
2
3 set test "sid configuration w/ scheduler"
4 sid_config_component_etc_test_with_tracing "sched.conf" \
5     "load [sid_find_file libtimers.la] timer_component_library" \
6     "hw-timer-arm/ref-sched" \
7     "load [sid_find_file libsched.la] sched_component_library
8 new sid-sched-sim sched
9 set sched num-clients 1
10 set sched enabled? 1
11 connect-pin sched 0-control <- wrapper divided-clock-control
12 connect-pin sched 0-event -> wrapper divided-clock-event
13 relate tester sched sched
14 "
15 pass $test
16
17 set test "sid startup"
18 if [sid_start "sched.conf"] then { pass $test } else { fail $test ; return }
19
20 set test "test presence of scheduler component"
21 set sched [sid_cmd "set relationships(sched)"]
22 if {"$sched" == ""} then { fail $test } else { pass $test }
23
24 set test "attribute list"
25 sid_assert_success "sid::component::attribute_names $victim"
26
27 set test "reserved register write_h4_l4 (0x04)"
28 set bus [sid_cmd "sid::component::find_bus $victim registers"]
29 sid_assert_success "sid::bus::write_h4_l4 $bus 4 0"
30 set test "reserved register read_h4_l4 (0x04)"
31 sid_assert_success "sid::bus::read_h4_l4 $bus 4"
32
33 set test "reserved register write_h4_l4 (0x10)"
34 set bus [sid_cmd "sid::component::find_bus $victim registers"]
35 sid_assert_success "sid::bus::write_h4_l4 $bus 0x10 0"
36 set test "reserved register read_h4_l4 (0x010)"
37 sid_assert_success "sid::bus::read_h4_l4 $bus 0x10"
38
39 set test "set / retrieve a load value (byte)"
40 set bus [sid_cmd "sid::component::find_bus $victim registers"]
41 sid_cmd "sid::bus::write_h4_l1 $bus 0 0xAA"
42 set val [sid_cmd "sid::bus::read_h4_l1 $bus 0"]
43 if {[lindex $val 0] == "ok" && [lindex $val 1] == 0xAA} then {pass $test} else {fail $test}
44
45 set test "set / retrieve a load value (half-word)"
46 set bus [sid_cmd "sid::component::find_bus $victim registers"]
47 sid_cmd "sid::bus::write_h4_l2 $bus 0 0xAABB"
48 set val [sid_cmd "sid::bus::read_h4_l2 $bus 0"]
49 if {[lindex $val 0] == "ok" && [lindex $val 1] == 0xAABB} then {pass $test} else {fail $test}
50
51 set test "set / retrieve a load value (word)"
52 set bus [sid_cmd "sid::component::find_bus $victim registers"]
53 sid_cmd "sid::bus::write_h4_l4 $bus 0 0xC"
54 set val [sid_cmd "sid::bus::read_h4_l4 $bus 0x0"]
55 if {[lindex $val 0] == "ok" && [lindex $val 1] == 0xC} then {pass $test} else {fail $test}
56
57 set test "retrieve timer value (word)"
58 set bus [sid_cmd "sid::component::find_bus $victim registers"]
59 set val [sid_cmd "sid::bus::read_h4_l4 $bus 0x4"]
60 if {[lindex $val 0] == "ok" && [lindex $val 1] == 0xC} then {pass $test} else {fail $test}
61
62 set test "clear interrupts"
63 set bus [sid_cmd "sid::component::find_bus $victim registers"]
64 set val [sid_cmd "sid::bus::write_h4_l4 $bus 0x0C 0"]
65 if {$val == "ok"} then {pass $test} else {fail $test}
66
67 set test "get control word"
68 set bus [sid_cmd "sid::component::find_bus $victim registers"]
69 set val [sid_cmd "sid::bus::read_h4_l4 $bus 0x08"]
70 # XXX: assert also the current value of the control word?
71 if {[string match "ok*" $val]} then {pass $test} else {fail $test}
72
73 set test "turn timer on"
74 set bus [sid_cmd "sid::component::find_bus $victim registers"]
75 set val [sid_cmd "sid::bus::write_h4_l4 $bus 0x08 0xC4"]
76 # C4: enabled | periodic | prescale=01 (divide-by-16)
77 if {$val == "ok"} then {pass $test} else {fail $test}
78
79 set test "tick presence of scheduler clock pin"
80 set clock_pin [sid_cmd "sid::component::find_pin $sched advance"]
81 if {$clock_pin == ""} then { fail $test } else { pass $test }
82
83 # 0C = last value stored in timer, a few tests ago
84 set test "tick timer for almost 0x0C steps = 0xB scheduler ticks"
85 set sensor_pin [sid_cmd "sid::pin::new"]
86 sid_cmd "set sensor_count 0"
87 sid_cmd "set sensor_state 0"
88 sid_cmd "set hook_driven_h4($sensor_pin) {global driven_h4_value; incr sensor_count ; set sensor_state \$driven_h4_value}"
89 sid_cmd "sid::component::connect_pin $victim interrupt $sensor_pin"
90 # one less tick than enough
91 for {set i 0} {$i < 0xB} {incr i} {
92     sid_cmd "sid::pin::driven_h4 $clock_pin 0"
93 }
94 set val [sid_cmd "set sensor_count"]
95 if {$val == "0"} then {pass $test} else {fail $test}
96
97 # one more tick - timer should trigger
98 set test "tick timer for final tick"
99 sid_cmd "sid::pin::driven_h4 $clock_pin 0"
100 set val1 [sid_cmd "set sensor_count"]
101 set val2 [sid_cmd "set sensor_state"]
102 if {$val1 == "1" && $val2 == "1"} then {pass $test} else {fail $test}
103
104 set test "clear interrupt"
105 set bus [sid_cmd "sid::component::find_bus $victim registers"]
106 set val [sid_cmd "sid::bus::write_h4_l4 $bus 0x0C 0"]
107 set val1 [sid_cmd "set sensor_count"]
108 set val2 [sid_cmd "set sensor_state"]
109 if {$val1 == 2 && $val2 == 0} then {pass $test} else {fail $test}
110
111
112 set test "sid stop"
113 if [sid_stop] then { pass $test } else { fail $test ; return }
114
115
116 # zap temp file if tests were successful 
117 global exit_status
118 if {$exit_status == "0"} then { file delete "sched.conf" }