zephyr学习笔记

/*
/dts-v1/是Device Tree Source(DTS)文件的版本声明。它指定了DTS文件的版本,以便
正确解析和处理文件内容,在DTS文件中,/dts-v1/通常是文件的第一行。
*/
/dts-v1/
/*是一个C/C++中的预处理指令,用于在代码中包含一个名nrf52833_qiaa.dtsi的文件。
这个文件可能是一个设备树源文件,用于描述硬件设备的配置和功能。
设备树是一种描述硬件设备的数据结构,他独立于具体的处理器架构和操作系统。设备树
源文件(.dts或dtsi)描述了硬件设备的层次结构,寄存器地址,中断等信息。在编译时,
设备树源文件会被编译成二进制设备树文件(.dts),然后由操作系统加载和解析。
#include <nordic/nrf52833_qiaa.dssi>指令表示在代码中包含名为nrf52833_qiaa.dtsi
的设备树源文件。这样做可以将设备树的配置和功能添加到代码中,以便在运行时使用。*/
#include <nordic/nrf52833_qiaa.dtsi>
#include "nrf52833dk_nrf52833-pinctrl.dtsi"
/*
这个头文件可能时用于定义输入事件代码的,在嵌入式系统中,输入设备会生成不同的输入事件,
每个事件都有一个唯一的代码哎标识他,这个头文件可能包含了这些输入事件的代码定义。
*/
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
    /*
    是一个字符串变量的赋值语句,这是一个简单的赋值操作。
    */
    model = "Nordic nRF52833 DK NRF52833";
    compatible = "nordic,nrf52833-dk-nrf52833";
    
    /*
    这段代码是一个设备树文件中的一个节点描述,它定义了一些属性和值。在这个节点中,属性
    zephyr,console\zephyr,shell-uart\zephyr,uart-mcumgr\zephyr,bt-mon-uart\
    zephyr,bt-c2n-uart等这些分别对应了不同的设备或功能,这些属性的值是对应设备或功能的
    引用,例如"&uart0"表示引用了名为"uart0"的设备。
    这段代码的作用是将这些设备或功能与节点"chosen"关联起来,以便在系统运行时进行配置和使用
    */
    chosen {
        /*
        具体的来说,它将uart0的地址赋值给zephyr和console变量
        这种操作可以用于将一个串口设备与zephyr操作系统的控制台进行关联。通过将串口设备的地址
        赋值给zephyr和console变量,可以实现在控制台上进行输入和输出操作。
        */
        zephyr,console = &uart0;
        /*
        下面的语句,是一个zephyr中的配置选项,用于将uart0与shell绑定,这个配置选项的作用是将
        UART0作为shell的输入和输出接口。
        通过将uart0与shell绑定,可以在zephyr中使用shell命令行界面来与外接设备进行交互。
        */
        zephyr,shell-uart = &uart0;
        /*
        uart-mcumgr是zephyr RTOS中的一个子系统,用于管理和控制UART设备,它提供了一组命令和
        API,使开发者能够通过UART与设备进行通信,并执行各种操作,如读取设备状态,配置设备参数,
        发送和接收数据等。
        */
        zephyr,uart-mcumgr = &uart0;
        /*
        下面的语句是一个在zephyr操作系统中设置蓝牙监视器UART的语句,它将蓝牙监视器UART与UART0设备进行关联。
        在zephyr中,可以通过设备树 device tree来配置和管理硬件设备。设备树是一种描述硬件设备和其属性的数据
        结构。通过设备树,可以在zephyr中定义和配置各种硬件设备。
        在这个语句中,zephyr,bt-mon-uart是一个设备树属性,用于指定蓝牙监视器UART的名称,&uart0是一个引用,
        用于指定与UART0设备相关联。
        */
        zephyr,bt-mon-uart = &uart0;
        /*
        
        */
        zephyr,bt-c2h-uart = &uart0;
        zephyr,sram = &sram0;
        zephyr,flash = &flash0;
        zephyr,code-partition = &slot0_partition;
        zephyr,ieee802154 = &ieee802154;
    };

    /*
    设备树节点
    这个设备树节点信息定义了4个LED,每个LED都有一个GPIO引脚和一个标签。GPIO引脚用于控制LED
    的亮灭状态,标签用于标识LED的名称。
    */
    leds {
        /*
        下面的语句是设备树中的一个属性,用于指定设备节点的类型为GPIO LED,它表示该节点是一个
        GPIO LED设备。
        有两个设备树节点使用了compatible = "gpio-leds";属性,分别是leds和led,这两个节点
        都是用来定义GPIO LED设备的。
        
        */
        compatible = "gpio-leds";
        led0: led_0 {
            gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
            label = "Green LED 0";
        };
        led1: led_1 {
            gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
            label = "Green LED 1";
        };
        led2: led_2 {
            gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
            label = "Green LED 2";
        };
        led3 :led_3 {
            gpios = <&gpio0 16 GPIO_ACTIVE_LOW>;
            label = "Green LED 3";
        };
    };

    /*
    这段代码是一个设备树中的片段,用于定义一个名为pwmleds的节点,并在该节点下定义了一个
    名为pwm_led0的子节点。该子节点使用了一个名为pwm0的PWM设备,并设置了一些属性。
    */
    pwmleds {
        compatible = "pwn-leds";
        pwm_led0: pwm_led_0 {
            pwms = <&pwn0 0 PWN_MSEC(20) PWM_POLARITY_INVERTED>;
        };
    };

    /*

    */
    buttons {
        compatible = "gpio-keys";
        button0: button_0 {
            gpios = <&gpio0 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
            label = "Push button switch 0";
            zephyr,code = <INPUT_KEY_0>;
        };
        button1: button_1 {
            gpios = <&gpio0 12 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
            label = "Push button switch1";
            zephyr,conde = <INPUT_KEY_1>;
        };
        button2: button_2 {
            gpios = <&gpio0 24 (GPIO_PULL_UP | GPIO_ACTIVE_LOW);
            label = "Push button switch2";
            zephyr,code = <INPUT_KEY_2>;
        };
        button3: button_3 {
            gpios = <&gpio0 25 (GPIO_PULL_UP | GPIO_ACTIVE_LOW);
            label = "Push button switch3";
            zephyr,code = <INPUT_KEY_3>;
        };
    };

    /*
    这段代码是一个设备树中的片段,用于描述ardunio的引脚连接器。在这个片段中,
    compatible属性指定了连接器的兼容性
    #gpio-cells属性指定了GPIO单元的数量
    gpio-map-mask属性指定了GPIO映射的掩码
    gpio-map-pass-thru属性指定了GPIO映射的传递值
    gpio-map属性则指定了GPIO的映射关系,其中&gpio0表示引脚的GPIO控制器
    3表示引脚的偏移量,0表示引脚的标志位
    这段代码的作用是定义了arduino的引脚连接器的GPIO映射关系,以便在设备树中使用这些引脚
    进行硬件控制。
    */
    arduino_header: connector {
        compatible = "arduino-header-r3";
        #gpio-cells = <2>;
        gpio-map-mask = <0xffffffff 0xffffffc0>;
        gpio-map-pass-thru = <0 0x3f>;
        gpio-map = <0 0 &gpio0 3 0>, /* A0 */
        ...
    };
}