Hi,
I am just starting out creating a project to run on an nRF9160 on custom hardware. I have set up a development environment (v1.9.0) through nRF Connect for Desktop app. I have created a custom board configuration based on the thingy91_nrf9160 board files, and successfully built an example project (cloud_client) for this board configuration.
Now I want to add some GPIO of my own to setup connections to the rest of my system, but since I am new to device trees I am not sure that I am doing things correctly.
Starting out with a testpad on the pcb, I added a GPIO pin to the dts file as follows:
/ { /* model and compatible parameter defined here... */ tp: testpin { gpios = <&gpio0 22 0>; }; /* reserved memory defined here... */ }; /* some peripherals defined here... */ &gpio0 { status = "okay"; }; /* some more peripherals defined here... */
And I try to use the pin through a sourcefile that I have added to the src folder, using the nrf52840_reset.c code as an example:
#include <drivers/gpio.h> #include <device.h> #include <devicetree.h> #define TP_NODE DT_NODELABEL(tp) #define TP_GPIO_CTRL DT_GPIO_CTLR(TP_NODE, gpios) #define TP_GPIO_PIN DT_GPIO_PIN(TP_NODE, gpios) #define TP_GPIO_FLAGS DT_GPIO_FLAGS(TP_NODE, gpios) static struct device *port = NULL; void TestpinInit(void) { port = DEVICE_DT_GET(TP_GPIO_CTRL); gpio_pin_configure(port, TP_GPIO_PIN, TP_GPIO_FLAGS | GPIO_OUTPUT_INACTIVE); } void TestpinToggle(void) { if (NULL != port) { gpio_pin_toggle(port, TP_GPIO_PIN); } }
Unfortunately this code creates quite some build errors; all similar. For example:
In file included from C:\_tools\v1.9.0\zephyr\include\toolchain\gcc.h:72, from C:\_tools\v1.9.0\zephyr\include\toolchain.h:50, from C:\_tools\v1.9.0\zephyr\include\sys\printk.h:11, from C:\_tools\v1.9.0\zephyr\include\sys\__assert.h:11, from C:\_tools\v1.9.0\zephyr\include\drivers\gpio.h:18, from c:\_repo\project\nrf9160\cloud_client\src\testpin.c:32: ../src/testpin.c: In function 'TestpinInit': C:\_tools\v1.9.0\zephyr\include\device.h:96:39: error: '__device_dts_ord_DT_N_S_testpin_P_gpios_IDX_0_PH_ORD' undeclared (first use in this function) 96 | #define DEVICE_NAME_GET(name) _CONCAT(__device_, name) | ^~~~~~~~~ C:\_tools\v1.9.0\zephyr\include\toolchain\common.h:132:26: note: in definition of macro '_DO_CONCAT' 132 | #define _DO_CONCAT(x, y) x ## y | ^ C:\_tools\v1.9.0\zephyr\include\device.h:96:31: note: in expansion of macro '_CONCAT' 96 | #define DEVICE_NAME_GET(name) _CONCAT(__device_, name) | ^~~~~~~ C:\_tools\v1.9.0\zephyr\include\device.h:291:37: note: in expansion of macro 'DEVICE_NAME_GET' 291 | #define DEVICE_DT_NAME_GET(node_id) DEVICE_NAME_GET(Z_DEVICE_DT_DEV_NAME(node_id)) | ^~~~~~~~~~~~~~~ C:\_tools\v1.9.0\zephyr\include\device.h:311:34: note: in expansion of macro 'DEVICE_DT_NAME_GET' 311 | #define DEVICE_DT_GET(node_id) (&DEVICE_DT_NAME_GET(node_id)) | ^~~~~~~~~~~~~~~~~~ c:\_repo\project\nrf9160\cloud_client\src\testpin.c:72:12: note: in expansion of macro 'DEVICE_DT_GET' 72 | port = DEVICE_DT_GET(TP_GPIO_CTRL); | ^~~~~~~~~~~~~ C:\_tools\v1.9.0\zephyr\include\device.h:96:39: note: each undeclared identifier is reported only once for each function it appears in 96 | #define DEVICE_NAME_GET(name) _CONCAT(__device_, name) | ^~~~~~~~~ C:\_tools\v1.9.0\zephyr\include\toolchain\common.h:132:26: note: in definition of macro '_DO_CONCAT' 132 | #define _DO_CONCAT(x, y) x ## y | ^ C:\_tools\v1.9.0\zephyr\include\device.h:96:31: note: in expansion of macro '_CONCAT' 96 | #define DEVICE_NAME_GET(name) _CONCAT(__device_, name) | ^~~~~~~ C:\_tools\v1.9.0\zephyr\include\device.h:291:37: note: in expansion of macro 'DEVICE_NAME_GET' 291 | #define DEVICE_DT_NAME_GET(node_id) DEVICE_NAME_GET(Z_DEVICE_DT_DEV_NAME(node_id)) | ^~~~~~~~~~~~~~~ C:\_tools\v1.9.0\zephyr\include\device.h:311:34: note: in expansion of macro 'DEVICE_DT_NAME_GET' 311 | #define DEVICE_DT_GET(node_id) (&DEVICE_DT_NAME_GET(node_id)) | ^~~~~~~~~~~~~~~~~~ c:\_repo\project\nrf9160\cloud_client\src\testpin.c:72:12: note: in expansion of macro 'DEVICE_DT_GET' 72 | port = DEVICE_DT_GET(TP_GPIO_CTRL); | ^~~~~~~~~~~~~
I am not sure how to interpret these errors. To me it appears that the compiler creates a node name through the macros used, and it does not match the node name given in the dts file. I am having trouble getting out of this what name the compiler actually expects; where exactly have I made my error and what should I do to fix it.
Can anyone here point me in the right direction?