c - 如何格式化设备数据表中的 I2C 数据?

标签 c i2c bitmask

我最近开始了一个使用 Nordic NRF52832 DK 的项目。我已将一个 DRV2605 线性谐振执行器驱动器连接到该板。在转向 Nordic 开发板之前,我正在 Arduino 上使用 DRV2605 提供的库进行原型(prototype)设计,所以这非常简单。

现在,我尝试通过从 device setup guide 写入指定寄存器来自行初始化和控制 DRV2605。 .

Section 1.6.2这是我一直在关注的。假设我想写入反馈控制寄存器。我知道地址是 0x1A 并且我需要编写一个与所列出的四个设置相对应的值。我所困扰的是如何实际创建我需要写入的数据。该表有一列是我假设要为每个设置修改的位范围?

通过查看图表(使用默认设置),我假设我需要写入的数据为13331122。如果我将该值插入十进制到十六进制转换器,我会得到CB6AB2。该值的“B6”部分与图表中的“值(十六进制)”列相关还是巧合?

这是我用来写入 FC reg 的代码:

#define DRV_ADDR 0x5A
uint8_t fc_reg[2] = {0x1A, 13331122};
nrf_drv_twi_tx(&m_twi, DRV_ADDR, fc_reg, sizeof(fc_reg), false);

从做一些research看来位掩码可能是我所缺少的?这仍然不能真正解释图表中的值不匹配。

我真的很感激任何能在这方面得到的帮助,谢谢!

最佳答案

根据提供的屏幕截图,您可以看到反馈控制寄存器的地址为 0x1A,更重要的是,该寄存器保存 1 字节的信息。它有效地充当位标志,其中每个位代表不同的东西。例如,只有位 7 代表 LRA。因此,如果您将 0x80(DEC 128) 写入该寄存器,它将打开 LRA,如果您想启用/配置其他内容,则只需对 0x80 进行按位或运算即可。您对构建的框架有正确的想法,但是,对于 LRA,它应该看起来像这样。

uint8_t fc_reg[2] = {0x1A, 0x80};

显然,将 0x80 替换为您想要设置的任何标志。

关于c - 如何格式化设备数据表中的 I2C 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629880/

相关文章:

c - 内核中[inittest]的优势是什么

c - 嵌入式 newlib-nano printf 导致硬故障

python - 将 I2C 传感器 (DS1624) 读数转换为数字

Java从很长的范围内获取位范围

c++ - 将位插入字节

c - 从 C 中的 unsigned int 末尾获取 'n' 二进制位?位掩码?

c - 如何通过变量引用结构体成员?

c - 如何检查 DES key 的奇偶校验?

i2c - 初始化连接到 Raspberry Pi Pico 的 ssd1306 OLED 时出错

c - XMC4400 和 MAX44009 传感器灯 (I2C)