Introduction
This example configures a GPIO pin in input mode and configures it to generate interrupt on rising edge. The application waits for 5 key presses, prints the number of times the keys are pressed and exits.
- Note
- SK-AM62 or SK-AM62-LP-SK-EVM does not contain any push button connected to MCU GPIOs.
M4F
M4F example using MCU_GPIO0_15 pin in the MCU_HEADER(J9) for generating GPIO interrupt. Key presses can be done by connecting followed by disconnecting MCU_GPIO0_15(Pin 10 of J9) to ground (Pin 27 of J9) in the SK-AM62 or SK-AM62-LP.
A53
A53 Core 0_0 example is using GPIO0_14 pin in the User Expansion Connector(J3) for generating GPIO interrupt. Key presses can be done by connecting followed by disconnecting GPIO0_14(Pin 22 of J3) to ground (Pin 6 of J3) in the am62x-sk, am62x-sip-sk, am62x-sk-lp.
In case of AMP, the following pins in the the User Expansion Connector(J3) are used for generating GPIO interrupt:
| Core | Pin |
| Core 0_0 | GPIO0_14 (Pin 22) |
| Core 0_1 | GPIO0_38 (Pin 16) |
| Core 1_0 | GPIO1_22 (Pin 15) |
| Core 1_1 | GPIO1_10 (Pin 33) |
Key presses can be done by connecting followed by disconnecting the above pins to ground (Pin 6 of J3) in the am62x-sk, am62x-sip-sk, am62x-sk-lp.
Please note that number of key presses will be higher than actual as we are manualy connecting the ground using jumpers.
- Note
- In AMP, Core 0_0 performs initialisation and printing logs for other cores. Load and run Core 0_0 before other cores.
- Attention
- A GPIO bank interrupt can be routed to only one core at a time. For example if a gpio interrupt is routed to Linux A53 core, the same cannot be routed to other cores (M4/R5).
-
Before running the GPIO Input interrupt example on a processor with Linux cores, disable any overlapping entries in the Linux devicetree board file. The GPIO can be excluded from the linux device tree by modifying the device tree board file (arch/arm64/boot/dts/ti/k3-am625-sk.dts)
-
&mcu_gpio0 {
status = "reserved";
};
&mcu_gpio_intr {
status = "reserved";
};
-
A new linux devicetree blob (dtb) should be generated with this change and placed in the Linux filesystem in the boot folder. For more information, reference the AM62x Linux SDK docs, section Foundational Components > Kernel > Users Guide. The kernel and kernel modules do not need to be rebuilt and reinstalled.
A new linux image to be generated with this change and SoC initialization to done following SOC Initialization Using SPL . Without this change in the linux image, this example will not work.
Supported Combinations
| Parameter | Value |
| CPU + OS | m4fss0-0 nortos |
| a53ss0-0 freertos |
| a53ss0-1 freertos |
| a53ss1-0 freertos |
| a53ss1-1 freertos |
| Toolchain | ti-arm-clang |
| arm.gnu.aarch64-none |
| Board | am62x-sk, am62x-sip-sk, am62x-sk-lp |
| Example folder | examples/drivers/gpio/gpio_input_interrupt/ |
Steps to Run the Example
See Also
GPIO
Sample Output
- Attention
- Output from the a53ss0-0, a53ss0-1, a53ss1-0 and a53ss1-1 cores are printed to UART0(/dev/ttyUSB0).
Shown below is a sample output from all the cores when the application is run.
GPIO Input Interrupt Test Started ...
GPIO Interrupt Configured for Rising Edge ...
Connect the GPIO0_14 pin on EVM to ground and release to trigger GPIO interrupt ...
Key is pressed 0 times
[a530-1] 0.000227s : GPIO Input Interrupt Test Started ...
[a530-1] 0.000240s : GPIO Interrupt Configured for Rising Edge ...
[a530-1] 0.000246s : Connect the GPIO0_38 pin on EVM to ground and release to trigger GPIO interrupt ...
[a530-1] 0.000252s : Key is pressed 0 times
[a531-0] 0.000362s : GPIO Input Interrupt Test Started ...
[a531-0] 0.000376s : GPIO Interrupt Configured for Rising Edge ...
[a531-0] 0.000383s : Connect the GPIO1_22 pin on EVM to ground and release to trigger GPIO interrupt ...
[a531-0] 0.000388s : Key is pressed 0 times
[a531-1] 0.000453s : GPIO Input Interrupt Test Started ...
[a531-1] 0.000466s : GPIO Interrupt Configured for Rising Edge ...
[a531-1] 0.000473s : Connect the GPIO1_10 pin on EVM to ground and release to trigger GPIO interrupt ...
[a531-1] 0.000478s : Key is pressed 0 times
[a530-1] 1.000003s : Key is pressed 0 times
[a531-0] 1.000003s : Key is pressed 0 times
[a531-1] 18.000001s : Key is pressed 0 times
Key is pressed 0 times
[a530-1] 19.000001s : Key is pressed 0 times
[a531-0] 19.000001s : Key is pressed 0 times
[a531-1] 19.000001s : Key is pressed 0 times
Key is pressed 0 times
[a530-1] 20.000001s : Key is pressed 0 times
[a531-0] 20.000001s : Key is pressed 0 times
[a531-1] 20.000001s : Key is pressed 0 times
Key is pressed 0 times
[a530-1] 21.000001s : Key is pressed 0 times
[a531-0] 21.000001s : Key is pressed 0 times
[a531-1] 21.000001s : Key is pressed 0 times
Key is pressed 0 times
[a530-1] 22.000001s : Key is pressed 0 times
[a531-0] 22.000001s : Key is pressed 0 times
[a531-1] 22.000001s : Key is pressed 0 times
Key is pressed 38 times
GPIO Input Interrupt Test Passed on a53_core0 !!
All tests have passed on a53_core0 !!
[a530-1] 23.000001s : Key is pressed 0 times
[a531-1] 28.000001s : Key is pressed 0 times
[a530-1] 29.000001s : Key is pressed 28 times
[a530-1] 29.000006s : GPIO Input Interrupt Test Passed on a53_core1 !!
[a530-1] 29.000009s : All tests have passed on a53_core1 !!
[a531-0] 29.000001s : Key is pressed 0 times
[a531-1] 29.000001s : Key is pressed 0 times
[a531-0] 30.000001s : Key is pressed 80 times
[a531-0] 30.000006s : GPIO Input Interrupt Test Passed on a53_core2 !!
[a531-0] 30.000009s : All tests have passed on a53_core2 !!
[a531-1] 30.000001s : Key is pressed 0 times
[a531-1] 45.000001s : Key is pressed 42 times
[a531-1] 45.000006s : GPIO Input Interrupt Test Passed on a53_core3 !!
[a531-1] 45.000009s : All tests have passed on a53_core3 !!