当前位置: 首页 > news >正文

Nordic nRF54L15 SoC对包含电池监测、中断处理和电源轨控制的定制 nPM1300 示例

1:以下是适用于 nRF Connect SDK (NCS) 的基于 Zephyr 的示例应用程序,展示了:

  • 读取电池电压和状态
  • 处理来自 nPM1300 的中断(例如,电池或电源轨事件)
  • 控制电源轨(通过 GPIO 启用/禁用)

main.c

#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/pmic.h>
#include <zephyr/drivers/pmic/npm1300.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/logging/log.h>
#include <zephyr/sys/printk.h>LOG_MODULE_REGISTER(npm1300_sample, LOG_LEVEL_INF);#define NPM1300_NODE DT_NODELABEL(npm1300)
#define NPM1300_IRQ_NODE DT_NODELABEL(npm1300_irq)
#define NPM1300_PWR_GPIO_NODE DT_NODELABEL(npm1300_pwrgpio)static const struct device *npm1300_dev = DEVICE_DT_GET(NPM1300_NODE);static struct gpio_callback irq_cb_data;void npm1300_irq_handler(const struct device *gpiodev, struct gpio_callback *cb, uint32_t pins)
{printk("nPM1300 IRQ triggered!\n");struct pmic_npm1300_irq_status irq_status;int ret = pmic_npm1300_irq_status_get(npm1300_dev, &irq_status);if (ret == 0) {if (irq_status.batt_chg) {LOG_INF("Battery charging event detected");}if (irq_status.vbus_det) {LOG_INF("VBUS detected event");}if (irq_status.temp) {LOG_INF("Temperature warning/fault event");}// Add more handlers as needed.} else {LOG_ERR("Failed to read nPM1300 IRQ status: %d", ret);}
}void main(void)
{if (!device_is_ready(npm1300_dev)) {LOG_ERR("nPM1300 device not ready");return;}LOG_INF("nPM1300 demo starting...");// Set up IRQ handlingconst struct device *irq_gpio_dev = DEVICE_DT_GET(NPM1300_IRQ_NODE);gpio_pin_configure(irq_gpio_dev, DT_GPIO_PIN(NPM1300_IRQ_NODE, gpios), GPIO_INPUT | DT_GPIO_FLAGS(NPM1300_IRQ_NODE, gpios));gpio_init_callback(&irq_cb_data, npm1300_irq_handler, BIT(DT_GPIO_PIN(NPM1300_IRQ_NODE, gpios)));gpio_add_callback(irq_gpio_dev, &irq_cb_data);gpio_pin_interrupt_configure(irq_gpio_dev, DT_GPIO_PIN(NPM1300_IRQ_NODE, gpios), GPIO_INT_EDGE_TO_ACTIVE);LOG_INF("nPM1300 IRQ configured");// Battery monitoring loopwhile (1) {int batt_mv;int status = pmic_npm1300_battery_voltage_get(npm1300_dev, &batt_mv);if (status == 0) {LOG_INF("Battery voltage: %d mV", batt_mv);} else {LOG_ERR("Failed to read battery voltage: %d", status);}// Power rail control (example: enable/disable)int pwr_status;status = pmic_npm1300_power_rail_enable(npm1300_dev, 0, true); // enable rail 0if (status == 0) {LOG_INF("Power rail 0 enabled");}k_sleep(K_MSEC(1000));status = pmic_npm1300_power_rail_enable(npm1300_dev, 0, false); // disable rail 0if (status == 0) {LOG_INF("Power rail 0 disabled");}k_sleep(K_SECONDS(10));}
}

prj.conf

CONFIG_PMIC_NPM1300=y
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3
CONFIG_GPIO=y

 nrf54l15dk_nrf54l15.overlay

&i2c1 {npm1300: npm1300@6b {compatible = "nordic,npm1300";reg = <0x6b>;// IRQ and other properties as needed};
};/ {npm1300_irq: gpio0_pin12 {gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;};
};

使用方法:

  1. 将文件放置在您的 NCS 项目中(例如,在 src/ 、 boards/ 和根目录下)。
  2. Build for your board:  为您的板卡构建:
west build -b nrf54l15dk_nrf54l15
west flash

http://www.lqws.cn/news/538237.html

相关文章:

  • springcloud 尚硅谷 看到9开头
  • 华为云鸿蒙应用入门级开发者认证 实验(HCCDA-HarmonyOS Cloud Apps)
  • 玄机抽奖Spring Web项目
  • Maven Javadoc 插件使用详解
  • [论文阅读]RaFe: Ranking Feedback Improves Query Rewriting for RAG
  • 解决uniapp vue3版本封装组件后:deep()样式穿透不生效的问题
  • react-嵌套路由 二级路由
  • 事件循环(Event Loop)机制对比:Node.js vs 浏览器​
  • python+requests接口自动化测试
  • 大脑感官:视觉系统中将感观信息转换为神经信号
  • @Autowired 和 @Resource 有什么区别?
  • Java常用设计模式详解
  • linux网络编程socket套接字
  • 【论文阅读】--Instruction Backdoor Attacks Against Customized LLMs
  • Neo4j2.0.1桌面端使用教程(简化版)
  • MySQL 锁的分类
  • WinAppDriver 自动化测试:C#篇
  • EMQ X Broker 配置HTTP 的外部鉴权接口
  • 生物化学 PCR(聚合酶链式反应)引物 制造(固相磷酰胺化学法) 购买 存储
  • 如何在x86_64 Linux上部署Android Cuttlefish模拟器运行环境
  • MySQL事物隔离级别详解
  • 笔记04:层叠的定义及添加
  • 链表基本功(相交链表)
  • Ubuntu通过防火墙管控Docker容器
  • Go语言与云原生:Kubernetes Operator开发全流程
  • Selenium+Pytest自动化测试框架实战
  • 第十二章:温度传感器拓展模块
  • 《汇编语言:基于X86处理器》第5章 过程(1)
  • LeetCode 2311.小于等于 K 的最长二进制子序列:贪心(先选0再选1)-好像还是比灵神写的清晰些
  • Python打卡:Day36