57 lines
1.9 KiB
ReStructuredText
57 lines
1.9 KiB
ReStructuredText
.. zephyr:code-sample:: gpio-custom-dts-binding
|
|
:name: GPIO with custom Devicetree binding
|
|
:relevant-api: gpio_interface devicetree-generic-id devicetree-generic-exist
|
|
|
|
Use custom Devicetree binding to control a GPIO.
|
|
|
|
Overview
|
|
********
|
|
|
|
In Zephyr, all hardware-specific configuration is described in the devicetree.
|
|
|
|
Consequently, also GPIO pins are configured in the devicetree and assigned to a specific purpose
|
|
using a compatible.
|
|
|
|
This is in contrast to other embedded environments like Arduino, where e.g. the direction (input /
|
|
output) of a GPIO pin is configured in the application firmware.
|
|
|
|
For typical use cases like LEDs or buttons, the existing :dtcompatible:`gpio-leds` or
|
|
:dtcompatible:`gpio-keys` compatibles can be used.
|
|
|
|
This sample demonstrates how to use a GPIO pin for other purposes with a custom devicetree binding.
|
|
|
|
We assume that a load with high current demands should be switched on or off via a MOSFET. The
|
|
custom devicetree binding for the power output controlled via a GPIO pin is specified in the file
|
|
:zephyr_file:`samples/basic/custom_dts_binding/dts/bindings/power-switch.yaml`. The gate driver for
|
|
the MOSFET would be connected to the pin as specified in the ``.overlay`` file in the boards
|
|
folder.
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
For each board that should be supported, a ``.overlay`` file has to be defined
|
|
in the ``boards`` subfolder.
|
|
|
|
Afterwards, the sample can be built and executed for the ``<board>`` as follows:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/basic/custom_dts_binding
|
|
:board: <board>
|
|
:goals: build flash
|
|
:compact:
|
|
|
|
For demonstration purposes, some boards use the GPIO pin of the built-in LED.
|
|
|
|
Sample output
|
|
=============
|
|
|
|
The GPIO pin should be switched to active level after one second.
|
|
|
|
The following output is printed:
|
|
|
|
.. code-block:: console
|
|
|
|
Initializing pin with inactive level.
|
|
Waiting one second.
|
|
Setting pin to active level.
|