*** Variables *** ${SCRIPT} ${CURDIR}/../../scripts/single-node/gr712rc.resc ${UART} sysbus.uart0 ${GPIO_BIN} @https://dl.antmicro.com/projects/renode/gaisler-gr712rc--custom-rtems-gpio.prom.elf-s_145444-331f2e16b35e247c296b8e637f4901a46852c5ce *** Keywords *** Prepare Machine Execute Script ${SCRIPT} Create Terminal Tester ${UART} defaultPauseEmulation=True Prepare Machine With Buttons And LEDs [Arguments] ${bin} Execute Command $bin = ${bin} Prepare Machine Execute Command machine LoadPlatformDescriptionFromString "buttonLowLevel1: Miscellaneous.Button @ gpio1 1 { IRQ -> gpio1@1 }" Execute Command machine LoadPlatformDescriptionFromString "buttonRisingEdge: Miscellaneous.Button @ gpio1 2 { IRQ -> gpio1@2 }" Execute Command machine LoadPlatformDescriptionFromString "buttonFallingEdge: Miscellaneous.Button @ gpio1 3 { IRQ -> gpio1@3 }" Execute Command machine LoadPlatformDescriptionFromString "buttonHighLevel: Miscellaneous.Button @ gpio1 4 { IRQ -> gpio1@4 }" Execute Command machine LoadPlatformDescriptionFromString "buttonLowLevel2: Miscellaneous.Button @ gpio1 5 { IRQ -> gpio1@5 }" Execute Command machine LoadPlatformDescriptionFromString "led: Miscellaneous.LED @ gpio1 7; gpio1: { 7 -> led@0 }" Execute Command machine LoadPlatformDescriptionFromString "ledInputOnlyPin: Miscellaneous.LED @ gpio1 8; gpio1: { 8 -> ledInputOnlyPin@0 }" ${led}= Create LED Tester sysbus.gpio1.led 0.05 Set Suite Variable ${led} ${led} ${ledInputOnlyPin}= Create LED Tester sysbus.gpio1.ledInputOnlyPin 0.05 Set Suite Variable ${ledInputOnlyPin} ${ledInputOnlyPin} *** Test Cases *** Should Run RTEMS Hello World with LEON3 PROM Prepare Machine Start Emulation Wait For Line On Uart MKPROM2 boot loader v2.0.69 Wait For Line On Uart starting rtems-hello Wait For Line On Uart Hello World over printk() on Debug console Should Run RTEMS GPIO Interrupt Sample Prepare Machine With Buttons And LEDs ${GPIO_BIN} # This low level-triggered ISR should fire continuously at first Wait For Line On Uart GPIO_ISR: pin 1 Wait For Line On Uart GPIO_ISR: pin 1 Should Not Be On Uart TEST END timeout=0.005 Execute Command gpio1.buttonLowLevel1 Press Wait For Line On Uart TEST END Wait For Line On Uart Interrupts configured, ready for next test # Rising-edge-triggered interrupt -> only once on rising edge Execute Command gpio1.buttonRisingEdge Press Wait For Line On Uart GPIO_ISR: pin 2 Assert LED State true testerId=${led} # Input-only pin should not be affected Assert LED State false testerId=${ledInputOnlyPin} Should Not Be On Uart GPIO_ISR: pin 2 timeout=0.005 Execute Command gpio1.buttonRisingEdge Release Should Not Be On Uart GPIO_ISR: pin 2 timeout=0.005 # Falling-edge-triggered interrupt -> only once on falling edge Execute Command gpio1.buttonFallingEdge Press Should Not Be On Uart GPIO_ISR: pin 3 timeout=0.005 Execute Command gpio1.buttonFallingEdge Release Wait For Line On Uart GPIO_ISR: pin 3 Assert LED State false testerId=${led} Assert LED State false testerId=${ledInputOnlyPin} Should Not Be On Uart GPIO_ISR: pin 3 timeout=0.005 # Pressing this button enables a low-level interrupt on pin 5. That one has a higher priority so # it gets printed continuously until we press the low-level button. Execute Command gpio1.buttonHighLevel Press Should Not Be On Uart GPIO_ISR: pin 4 timeout=0.005 Wait For Line On Uart GPIO_ISR: pin 5 Wait For Line On Uart GPIO_ISR: pin 5 Execute Command gpio1.buttonLowLevel2 Press Wait For Line On Uart GPIO_ISR: pin 4 Wait For Line On Uart GPIO_ISR: pin 4 Should Not Be On Uart GPIO_ISR: pin 5 timeout=0.005 # Finally we release the high-level-trigger button, after which nothing should be printed Execute Command pause Execute Command gpio1.buttonHighLevel Release Execute Command emulation RunFor "0.005" Clear Terminal Tester Report Should Not Be On Uart GPIO_ISR timeout=0.005