Initial commit for blinky
This commit is contained in:
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# editors
|
||||||
|
*.swp
|
||||||
|
*~
|
||||||
|
|
||||||
|
# build
|
||||||
|
/build*/
|
||||||
7
CMakeLists.txt
Normal file
7
CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.20.0)
|
||||||
|
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
||||||
|
project(blinky)
|
||||||
|
|
||||||
|
target_sources(app PRIVATE src/main.c)
|
||||||
97
README.rst
Normal file
97
README.rst
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
.. zephyr:code-sample:: blinky
|
||||||
|
:name: Blinky
|
||||||
|
:relevant-api: gpio_interface
|
||||||
|
|
||||||
|
Blink an LED forever using the GPIO API.
|
||||||
|
|
||||||
|
Overview
|
||||||
|
********
|
||||||
|
|
||||||
|
The Blinky sample blinks an LED forever using the :ref:`GPIO API <gpio_api>`.
|
||||||
|
|
||||||
|
The source code shows how to:
|
||||||
|
|
||||||
|
#. Get a pin specification from the :ref:`devicetree <dt-guide>` as a
|
||||||
|
:c:struct:`gpio_dt_spec`
|
||||||
|
#. Configure the GPIO pin as an output
|
||||||
|
#. Toggle the pin forever
|
||||||
|
|
||||||
|
See :zephyr:code-sample:`pwm-blinky` for a similar sample that uses the PWM API instead.
|
||||||
|
|
||||||
|
.. _blinky-sample-requirements:
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
************
|
||||||
|
|
||||||
|
Your board must:
|
||||||
|
|
||||||
|
#. Have an LED connected via a GPIO pin (these are called "User LEDs" on many of
|
||||||
|
Zephyr's :ref:`boards`).
|
||||||
|
#. Have the LED configured using the ``led0`` devicetree alias.
|
||||||
|
|
||||||
|
Building and Running
|
||||||
|
********************
|
||||||
|
|
||||||
|
Build and flash Blinky as follows, changing ``reel_board`` for your board:
|
||||||
|
|
||||||
|
.. zephyr-app-commands::
|
||||||
|
:zephyr-app: samples/basic/blinky
|
||||||
|
:board: reel_board
|
||||||
|
:goals: build flash
|
||||||
|
:compact:
|
||||||
|
|
||||||
|
After flashing, the LED starts to blink and messages with the current LED state
|
||||||
|
are printed on the console. If a runtime error occurs, the sample exits without
|
||||||
|
printing to the console.
|
||||||
|
|
||||||
|
Build errors
|
||||||
|
************
|
||||||
|
|
||||||
|
You will see a build error at the source code line defining the ``struct
|
||||||
|
gpio_dt_spec led`` variable if you try to build Blinky for an unsupported
|
||||||
|
board.
|
||||||
|
|
||||||
|
On GCC-based toolchains, the error looks like this:
|
||||||
|
|
||||||
|
.. code-block:: none
|
||||||
|
|
||||||
|
error: '__device_dts_ord_DT_N_ALIAS_led_P_gpios_IDX_0_PH_ORD' undeclared here (not in a function)
|
||||||
|
|
||||||
|
Adding board support
|
||||||
|
********************
|
||||||
|
|
||||||
|
To add support for your board, add something like this to your devicetree:
|
||||||
|
|
||||||
|
.. code-block:: DTS
|
||||||
|
|
||||||
|
/ {
|
||||||
|
aliases {
|
||||||
|
led0 = &myled0;
|
||||||
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
myled0: led_0 {
|
||||||
|
gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
The above sets your board's ``led0`` alias to use pin 13 on GPIO controller
|
||||||
|
``gpio0``. The pin flags :c:macro:`GPIO_ACTIVE_HIGH` mean the LED is on when
|
||||||
|
the pin is set to its high state, and off when the pin is in its low state.
|
||||||
|
|
||||||
|
Tips:
|
||||||
|
|
||||||
|
- See :dtcompatible:`gpio-leds` for more information on defining GPIO-based LEDs
|
||||||
|
in devicetree.
|
||||||
|
|
||||||
|
- If you're not sure what to do, check the devicetrees for supported boards which
|
||||||
|
use the same SoC as your target. See :ref:`get-devicetree-outputs` for details.
|
||||||
|
|
||||||
|
- See :zephyr_file:`include/zephyr/dt-bindings/gpio/gpio.h` for the flags you can use
|
||||||
|
in devicetree.
|
||||||
|
|
||||||
|
- If the LED is built in to your board hardware, the alias should be defined in
|
||||||
|
your :ref:`BOARD.dts file <devicetree-in-out-files>`. Otherwise, you can
|
||||||
|
define one in a :ref:`devicetree overlay <set-devicetree-overlays>`.
|
||||||
9
boards/nrf54l15dk_nrf54l15_cpuapp_egpio.overlay
Normal file
9
boards/nrf54l15dk_nrf54l15_cpuapp_egpio.overlay
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024 Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
&led0 {
|
||||||
|
gpios = <&egpio 9 GPIO_ACTIVE_HIGH>;
|
||||||
|
};
|
||||||
12
sample.yaml
Normal file
12
sample.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
sample:
|
||||||
|
name: Blinky Sample
|
||||||
|
tests:
|
||||||
|
sample.basic.blinky:
|
||||||
|
tags:
|
||||||
|
- LED
|
||||||
|
- gpio
|
||||||
|
filter: dt_enabled_alias_with_parent_compat("led0", "gpio-leds")
|
||||||
|
depends_on: gpio
|
||||||
|
harness: led
|
||||||
|
integration_platforms:
|
||||||
|
- frdm_k64f
|
||||||
48
src/main.c
Normal file
48
src/main.c
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016 Intel Corporation
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <zephyr/kernel.h>
|
||||||
|
#include <zephyr/drivers/gpio.h>
|
||||||
|
|
||||||
|
/* 1000 msec = 1 sec */
|
||||||
|
#define SLEEP_TIME_MS 1000
|
||||||
|
|
||||||
|
/* The devicetree node identifier for the "led0" alias. */
|
||||||
|
#define LED0_NODE DT_ALIAS(led0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A build error on this line means your board is unsupported.
|
||||||
|
* See the sample documentation for information on how to fix this.
|
||||||
|
*/
|
||||||
|
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
bool led_state = true;
|
||||||
|
|
||||||
|
if (!gpio_is_ready_dt(&led)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
|
||||||
|
if (ret < 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
ret = gpio_pin_toggle_dt(&led);
|
||||||
|
if (ret < 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
led_state = !led_state;
|
||||||
|
printf("LED state: %s\n", led_state ? "ON" : "OFF");
|
||||||
|
k_msleep(SLEEP_TIME_MS);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user