找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

查看: 6|回复: 0

[Nordic] nRF54L15 GPIO 特性(二)

[复制链接]
连续签到天数:1天
签到总天数:8天
签到总奖励:36金币
发表于 6 小时前 | 显示全部楼层 |阅读模式
2. 如何从devicetree中获取GPIO并将其映射到软件中?
​ 可参考文章:
https://www.cnblogs.com/jayant97/articles/18141263
https://github.com/aiminhua/ncs_samples/blob/master/ble_comprehensive/src/io_int_thread.c
​ 我们从两个简单的参考例子开始:
​ ncs/zephyr/samples/basic/blinky/src/main.c
​ ncs/zephyr/samples/basic/button/src/main.c
2.1 devicetree 中的GPIO描述gpio0: gpio@10a000 {    compatible = "nordic,nrf-gpio";  gpio-controller;  reg = < 0x10a000 0x300 >;  #gpio-cells = < 0x2 >;  ngpios = < 0x5 >;  status = "okay";  port = < 0x0 >;  gpiote-instance = < &gpiote30 >;};gpio1: gpio@d8200 {  compatible = "nordic,nrf-gpio";  gpio-controller;  reg = < 0xd8200 0x300 >;  #gpio-cells = < 0x2 >;  ngpios = < 0x10 >;  status = "okay";  port = < 0x1 >;  gpiote-instance = < &gpiote20 >;  phandle = < 0xd >;};gpio2: gpio@50400 {  ...};
参考文件:
​ ncs/zephyr/dts/bindings/gpio/nordic,nrf-gpio.yaml
​ ncs/zephyr/include/zephyr/dt-bindings/gpio/gpio.h
​ ncs/zephyr/include/zephyr/drivers/gpio.h
a.节点名:gpio@10a000;gpio@d8200;gpio@d8200b.标签:gpio0;gpio1;gpio2c.gpio-controller: 声明具有域控制器功能d.reg: 外设在总线上的地址分布,需跟节点名对应e.phandle:一个节点node1可以通过phandle被另一节点node2引用作为属性值f.gpiote-instance:指向外部gpiote节点的phandle属性,表明可使用该GPIO port的gpiote实体g.ngpios:所在GPIO Port(槽位)中最大可用GPIO口的数目。如对于nrf54L15:    gpio0(port0):   ngpios = < 0xb >;   => P0.00~P0.10    gpio1(port1):   ngpios = < 0x10 >;  =>1.00~P1.15    gpio2(port2):   ngpios = < 0x5 >;   =>2.00~P2.04h.gpio-reserved-ranges:为系统保留的gpio口,用户不可以直接使用.比如:    "gpio-reserved-ranges = [5,3]": 表明GPIO pin脚偏移为5,6,7的IO口为系统保留    "gpio-reserved-ranges = <0 2>,<10 1>": 表明GPIO pin脚偏移为0, 1,10的IO口为系统保留, 即使定义了ngpios = <0xb>i.#gpio-cells:gpio节点作为controller时的specifier参数数量。比如#gpio-cells = < 0x2 >; 意味着在其他节点中引用gpio0控制器时,specifier参数数量为2,如:    led0: led_0 {        gpios = < &gpio2 0x9 0x0 >;         label = "Green LED 0";    };     &gpio2:指gpio2控制器, 对应物理上的gpio port2     0x9: 指pin脚编号是0x9,即P2.09     0x0: devicetree中定义的GPIO口配置参数,在软件中有时被描述为flag(s),0x0等价于GPIO_ACTIVE_HIGH |GPIO_PUSH_PULL |GPIO_LINE_OPEN_SOURCE
补充说明:
GPIO_ACTIVE_HIGH: GPIO口高有效(有效指逻辑1)
GPIO_PUSH_PULL: 配置GPIO输出为推挽模式
PIO_LINE_OPEN_SOURCE:单端开源模式(线或)
2.2 代码中如何让获取&配置GPIO?
gpio及其配置更多时候是作为某个节点的属性出现,如button节点的GPIO属性,led节点的gpio属性;spi的cs-gpio属性等等
spi@abcd0001 {    cs-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;    spidev: spi-device@0 { ... };};buttons {    compatible = "gpio-keys";    button0: button_0 {    gpios = < &gpio1 0xd 0x11 >;    label = "ush button 0";    zephyr,code = < 0xb >;};button1: button_1 { ...};nrf52840_reset: gpio-reset {    compatible = "nordic,nrf9160dk-nrf52840-reset";    status = "disabled";    gpios = < &interface_to_nrf52840 0x9 0x1 >;  };aliases {    led00 = &led0;    pwm-led0 = &pwm_led1;    sw0 = &button0;};
spi@abcd0001, buttons, button_0, button_1, gpio-reset为devicetree中的节点名(node name)
button0,button1,nrf52840_reset,为节点的标签(LABEL)
led00, pwm-led0,sw0为节点的别名(ALIAS)
对于GPIO的应用,也可以系统预留给用户自定义的节点(zephyr,user)中将其定义为属性:
/{    zephyr,user{        my-gpios = <&gpio0 12    (GPIO_ACTIVE_HIGH|GPIO_PUSH_PULL|GPIO_PULL_DOWN)>;    };};

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册  

×
楼主热帖
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2025-9-4 17:05 , Processed in 0.124503 second(s), 13 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表