diff --git a/CMakeLists.txt b/CMakeLists.txt index 1371f8c..84e50d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,4 +3,4 @@ find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(hellobt) -target_sources(app PRIVATE src/main.c) +target_sources(app PRIVATE src/main.cpp) diff --git a/boards/arm/nrf52840_test/Kconfig.board b/boards/arm/nrf52840_test/Kconfig.board new file mode 100644 index 0000000..1038de7 --- /dev/null +++ b/boards/arm/nrf52840_test/Kconfig.board @@ -0,0 +1,6 @@ +# Copyright (c) 2023 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_NRF52840_TEST + bool "nrf52840_test" + depends on SOC_NRF52840_QIAA diff --git a/boards/arm/nrf52840_test/Kconfig.defconfig b/boards/arm/nrf52840_test/Kconfig.defconfig new file mode 100644 index 0000000..a63adad --- /dev/null +++ b/boards/arm/nrf52840_test/Kconfig.defconfig @@ -0,0 +1,12 @@ +# Copyright (c) 2023 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_NRF52840_TEST + +config BOARD + default "nrf52840_test" + +config BT_CTLR + default BT + +endif diff --git a/boards/arm/nrf52840_test/board.cmake b/boards/arm/nrf52840_test/board.cmake new file mode 100644 index 0000000..f41634a --- /dev/null +++ b/boards/arm/nrf52840_test/board.cmake @@ -0,0 +1,9 @@ +# Copyright (c) 2023 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=nrf52" "--speed=4000") +board_runner_args(pyocd "--target=nrf52840" "--frequency=4000000") + +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) diff --git a/boards/arm/nrf52840_test/nrf52840_test-pinctrl.dtsi b/boards/arm/nrf52840_test/nrf52840_test-pinctrl.dtsi new file mode 100644 index 0000000..19c2973 --- /dev/null +++ b/boards/arm/nrf52840_test/nrf52840_test-pinctrl.dtsi @@ -0,0 +1,23 @@ +$pinctrl { + uart0_default: uart0_default { + group1 { + psels = , + ; + }; + group2 { + psels = , + ; + bias-pull-up; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; +}; \ No newline at end of file diff --git a/boards/arm/nrf52840_test/nrf52840_test.dts b/boards/arm/nrf52840_test/nrf52840_test.dts new file mode 100644 index 0000000..e75d8b1 --- /dev/null +++ b/boards/arm/nrf52840_test/nrf52840_test.dts @@ -0,0 +1,106 @@ +// Copyright (c) 2023 Nordic Semiconductor ASA +// SPDX-License-Identifier: Apache-2.0 + +/dts-v1/; +#include + +/ { + model = "nrf52840_test"; + compatible = "nrf52840-test"; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,uart-mcumgr = &uart0; + zephyr,bt-mon-uart = &uart0; + zephyr,bt-c2h-uart = &uart0; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + gpios = <&gpio0 23 0>; + }; + + led1: led_1 { + gpios = <&gpio0 22 0>; + }; + + led2: led_2 { + gpios = <&gpio0 24 0>; + }; + }; + + buttons { + compatible = "gpio-keys"; + button0: button_0 { + gpios = <&gpio0 18 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + }; + }; + + aliases { + led0 = &led0; + }; +}; + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x0 0xc000>; + }; + slot0_partition: partition@c000 { + label = "image-0"; + reg = <0xc000 0x72000>; + }; + slot1_partition: partition@7e000 { + label = "image-1"; + reg = <0x7e000 0x72000>; + }; + scratch_partition: partition@f0000 { + label = "image-scratch"; + reg = <0xf0000 0xa000>; + }; + storage_partition: partition@fa000 { + label = "storage"; + reg = <0xfa000 0x6000>; + }; + }; +}; + +&gpio0 { + status = "okay"; +}; + +&uart0 { + status = "okay"; + pinctrl-0 = <&uart0_default>; + pinctrl-names = "default"; + current-speed = <115200>; +}; + +&pinctrl { + uart0_default: uart0_default { + group1 { + psels = , + , + , + ; + }; + }; +}; + +&adc { + status = "okay"; +}; + +&usbd { + status = "okay"; +}; diff --git a/boards/arm/nrf52840_test/nrf52840_test.yaml b/boards/arm/nrf52840_test/nrf52840_test.yaml new file mode 100644 index 0000000..84e63b6 --- /dev/null +++ b/boards/arm/nrf52840_test/nrf52840_test.yaml @@ -0,0 +1,13 @@ +# Copyright (c) 2023 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +identifier: nrf52840_test +name: nrf52840_test +type: mcu +arch: arm +ram: 256 +flash: 1024 +toolchain: + - zephyr + - gnuarmemb + - xtools diff --git a/boards/arm/nrf52840_test/nrf52840_test_defconfig b/boards/arm/nrf52840_test/nrf52840_test_defconfig new file mode 100644 index 0000000..ae4baab --- /dev/null +++ b/boards/arm/nrf52840_test/nrf52840_test_defconfig @@ -0,0 +1,27 @@ +# Copyright (c) 2023 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRF52840_TEST=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable GPIO +CONFIG_GPIO=y + +# Enable uart driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Additional board options +CONFIG_GPIO_AS_PINRESET=y + +CONFIG_PINCTRL=y diff --git a/prj.conf b/prj.conf index 8b13789..672d4dd 100644 --- a/prj.conf +++ b/prj.conf @@ -1 +1,13 @@ +# Enalbe C++20 +CONFIG_CPP=y +CONFIG_STD_CPP20=y +CONFIG_CPP_MAIN=y +# Enable random number +CONFIG_ENTROPY_GENERATOR=y + +# Enable Bluetooth +CONFIG_BT=y +CONFIG_BT_HCI=y +CONFIG_BT_CTLR=y +CONFIG_BT_LL_SW_SPLIT=y diff --git a/src/main.c b/src/main.c deleted file mode 100644 index 75a9c07..0000000 --- a/src/main.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -int main(void) -{ - return 0; -} diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..04946c7 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,18 @@ +#include "zephyr/kernel.h" +#include "zephyr/drivers/gpio.h" +#include "zephyr/random/rand32.h" + +#define LED_NODE DT_ALIAS(led0) +static gpio_dt_spec led = GPIO_DT_SPEC_GET(LED_NODE, gpios); + +auto main() -> int { + if (!gpio_is_ready_dt(&led)) return 1; + if (gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE) < 0) return 1; + + gpio_pin_set_dt(&led, 0); + while (true) { + printk("Hello, World! %d - %u\n", 100'000, sys_rand32_get()); + k_msleep(250); + } + return 0; +}