1*** Variables ***
2${UART}                       sysbus.uart
3${URI}                        @https://dl.antmicro.com/projects/renode
4${LED_DELAY}                  1
5
6*** Keywords ***
7Create Machine
8    [Arguments]  ${elf}
9
10    Execute Command          mach create
11    Execute Command          machine LoadPlatformDescription @platforms/boards/miv-board.repl
12
13    Execute Command          sysbus LoadELF ${URI}/${elf}
14
15*** Test Cases ***
16Should Blink Led Using Systick
17    Create Machine            riscv-systick-blinky.elf-s_125004-59e1fa0a46f86e8ccad8b5bbb4d92b8dfa009af3
18    Create Terminal Tester    ${UART}
19
20    Create LED Tester         sysbus.gpioOutputs.led0  defaultTimeout=${LED_DELAY}
21
22    Start Emulation
23
24    Wait For Line On Uart      System timer Blinky Example.
25
26    # because of very fast LED switching this ends very soon
27    Assert LED State           true
28    Assert LED State           false
29    Assert LED State           true
30    Assert LED State           false
31    Assert LED State           true
32    Assert LED State           false
33    Assert LED State           true
34    Assert LED State           false
35    Assert LED State           true
36    Assert LED State           false
37
38Should Blink Led Using CoreTimer
39    Create Machine            riscv-interrupt-blinky.elf-s_135504-4fe164958c1fe3e89790f8d7d2824ba16182fa75
40    Create Terminal Tester    ${UART}
41
42    Create LED Tester         sysbus.gpioOutputs.led0  defaultTimeout=${LED_DELAY}
43
44    Start Emulation
45
46    Wait For Line On Uart      CoreTIMER and external Interrupt Example.
47
48    Assert LED State           true
49    Assert LED State           false
50    Assert LED State           true
51    Assert LED State           false
52    Assert LED State           true
53    Assert LED State           false
54    Assert LED State           true
55    Assert LED State           false
56
57Should Run FreeRTOS Sample
58    Create Machine            riscv-freertos-sample.elf-s_208404-40208b240e2d718e999a533e084f022628aec5d6
59    Create Terminal Tester    ${UART}
60
61    Start Emulation
62
63    Wait For Line On Uart     Sample Demonstration of FreeRTOS port for Microsemi RISC-V processor.
64    Wait For Line On Uart     Task - 2
65    Wait For Line On Uart     Task - 1
66    Wait For Line On Uart     Task - 2
67    Wait For Line On Uart     Task - 1
68    Wait For Line On Uart     Task - 2
69    Wait For Line On Uart     Task - 1
70    Wait For Line On Uart     Task - 2
71    Wait For Line On Uart     Task - 1
72    Wait For Line On Uart     Task - 2
73    Wait For Line On Uart     Task - 1
74
75Should Run LiteOS Port Sample
76    Create Machine            riscv-liteos-port.elf-s_689820-e68d3bcf0a12c25daa66fc51e474281bcbed2fc7
77    Create Terminal Tester    ${UART}
78
79    # this magic PerformanceInMips is required for the test to pass
80    # it is related to a bug in LiteOS (stack overflow and corruption) when interrupts happens in *wrong* moments
81    Execute Command           sysbus.cpu PerformanceInMips 300
82    Execute Command           showAnalyzer ${UART}
83
84    Start Emulation
85
86    Wait For Line On Uart     Los Inspect start.
87    Wait For Line On Uart     Los Key example: please press the UserKey (SW2) key
88
89    Test If Uart Is Idle      1
90
91    Execute Command           sysbus.gpioInputs.user_switch_2 Toggle
92    Wait For Line On Uart     Key test example
93
94Should Run ZephyrRTOS Shell Sample
95    Create Machine            shell-demo-miv.elf-s_803248-ea4ddb074325b2cc1aae56800d099c7cf56e592a
96    Create Terminal Tester    ${UART}
97
98    Execute Command           showAnalyzer ${UART}
99
100    Start Emulation
101    Wait For Prompt On Uart   uart:~
102    Write Line To Uart        version
103    Wait For Line On Uart     Zephyr version 1.13.99
104
105
106Should Generate Interrupts On Gpio Rising Edge
107    Create Machine            riscv-interrupt-blinky_gpio-interrupts-edge-positive.elf-s_135192-436f2656cbcff66f043ae6ba0b7977d0ee5e82a1
108    Create Terminal Tester    ${UART}
109
110    Start Emulation
111
112    Wait For Line On Uart     CoreTIMER and external Interrupt Example.
113    Wait For Line On Uart     Observe the LEDs blinking on the board. The LED patterns changes every time a timer interrupt occurs
114
115    Test If Uart Is Idle      1
116
117    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
118    Sleep                     1s
119    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
120    Sleep                     1s
121    Test If Uart Is Idle      1
122
123    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
124    Sleep                     1s
125    Wait For Line On Uart     GPIO1
126    Test If Uart Is Idle      1
127
128    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
129    Sleep                     1s
130    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
131    Sleep                     1s
132    Wait For Line On Uart     GPIO2
133
134Should Generate Interrupts On Gpio Falling Edge
135    Create Machine            riscv-interrupt-blinky_gpio-interrupts-edge-negative.elf-s_135192-19e453c25b09a2ecfeb7a8015588355f90ad8f02
136    Create Terminal Tester    ${UART}
137
138    Start Emulation
139
140    Wait For Line On Uart     CoreTIMER and external Interrupt Example.
141    Wait For Line On Uart     Observe the LEDs blinking on the board. The LED patterns changes every time a timer interrupt occurs
142
143    Test If Uart Is Idle      1
144
145    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
146    Wait For Line On Uart     GPIO1
147    Sleep                     1s
148
149    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
150    Test If Uart Is Idle      1
151
152    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
153    Wait For Line On Uart     GPIO2
154    Sleep                     1s
155
156    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
157    Test If Uart Is Idle      1
158
159Should Generate Interrupts On Gpio Both Edges
160    Create Machine            riscv-interrupt-blinky_gpio-interrupts-edge-both.elf-s_135192-1afc01350e4f0e17e2e556796cf577d2768636ec
161    Create Terminal Tester    ${UART}
162
163    Start Emulation
164
165    Wait For Line On Uart     CoreTIMER and external Interrupt Example.
166    Wait For Line On Uart     Observe the LEDs blinking on the board. The LED patterns changes every time a timer interrupt occurs
167
168    Test If Uart Is Idle      1
169
170    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
171    Wait For Line On Uart     GPIO1
172    Sleep                     1s
173
174    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
175    Wait For Line On Uart     GPIO1
176    Sleep                     1s
177
178    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
179    Wait For Line On Uart     GPIO2
180    Sleep                     1s
181
182    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
183    Wait For Line On Uart     GPIO2
184
185Should Generate Interrupts On Gpio High Level
186    Create Machine            riscv-interrupt-blinky_gpio-interrupts-level-high.elf-s_135168-e03e81b692982ad2f1f46085b9077fdfef62adf2
187    Create Terminal Tester    ${UART}
188
189    Start Emulation
190
191    Wait For Line On Uart     CoreTIMER and external Interrupt Example.
192    Wait For Line On Uart     Observe the LEDs blinking on the board. The LED patterns changes every time a timer interrupt occurs
193
194    Wait For Line On Uart     GPIO1
195    Wait For Line On Uart     GPIO2
196    Wait For Line On Uart     GPIO1
197    Wait For Line On Uart     GPIO2
198    Wait For Line On Uart     GPIO1
199    Wait For Line On Uart     GPIO2
200    Wait For Line On Uart     GPIO1
201    Wait For Line On Uart     GPIO2
202
203    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
204    Sleep                     1s
205    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
206    Sleep                     1s
207    Test If Uart Is Idle      1
208
209    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
210    Sleep                     1s
211    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
212    Sleep                     1s
213
214    Wait For Line On Uart     GPIO1
215    Wait For Line On Uart     GPIO2
216    Wait For Line On Uart     GPIO1
217    Wait For Line On Uart     GPIO2
218    Wait For Line On Uart     GPIO1
219    Wait For Line On Uart     GPIO2
220    Wait For Line On Uart     GPIO1
221    Wait For Line On Uart     GPIO2
222
223Should Generate Interrupts On Gpio Low Level
224    Create Machine            riscv-interrupt-blinky_gpio-interrupts-level-low.elf-s_135168-f570dad79ea5aa0bfe9aa1000f453f0f50f344df
225    Create Terminal Tester    ${UART}
226
227    Start Emulation
228
229    Wait For Line On Uart     CoreTIMER and external Interrupt Example.
230    Wait For Line On Uart     Observe the LEDs blinking on the board. The LED patterns changes every time a timer interrupt occurs
231
232    Test If Uart Is Idle      1
233
234    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
235    Sleep                     1s
236    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
237    Sleep                     1s
238
239    Wait For Line On Uart     GPIO1
240    Wait For Line On Uart     GPIO2
241    Wait For Line On Uart     GPIO1
242    Wait For Line On Uart     GPIO2
243    Wait For Line On Uart     GPIO1
244    Wait For Line On Uart     GPIO2
245    Wait For Line On Uart     GPIO1
246    Wait For Line On Uart     GPIO2
247
248    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
249    Sleep                     1s
250    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
251    Sleep                     1s
252    Test If Uart Is Idle      1
253
254    Execute Command           sysbus.gpioInputs.user_switch_0 Toggle
255    Sleep                     1s
256    Execute Command           sysbus.gpioInputs.user_switch_1 Toggle
257    Sleep                     1s
258
259    Wait For Line On Uart     GPIO1
260    Wait For Line On Uart     GPIO2
261    Wait For Line On Uart     GPIO1
262    Wait For Line On Uart     GPIO2
263    Wait For Line On Uart     GPIO1
264    Wait For Line On Uart     GPIO2
265    Wait For Line On Uart     GPIO1
266    Wait For Line On Uart     GPIO2
267
268