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

ICM20948 DMP代码详解(17)

接前一篇文章:ICM20948 DMP代码详解(16)

前一篇文章讲到了inv_icm20948_set_chip_power_state函数中尚需解析的3个函数中的第1个函数:inv_icm20948_write_single_mems_reg_core。并没有完全讲完,本回继续解析。为了便于理解和回顾,再次贴出该函数源码,在在C:\Users\ns\Ykq\eMD-SmartMotion-ICM20948-1.1.1\EMD-Core\sources\Invn\Devices\Drivers\ICM20948\Icm20948Transport.c中,如下:

/**
*  @brief      Write single byte of data to a register on MEMs with no power control
*  @param[in]  Register address
*  @param[in]  Data to be written
*  @return     0 if successful.
*/
int inv_icm20948_write_single_mems_reg_core(struct inv_icm20948 *s, uint16_t reg, const uint8_t data)
{
	int result = 0;
	unsigned char regOnly = (unsigned char)(reg & 0x7F);
 
	result |= inv_set_bank(s, reg >> 7);
	result |= inv_icm20948_write_reg(s, regOnly, &data, 1);
 
	return result;
}

这个函数本身实际上已经解析完了,先设置bank,后写bank中的寄存器。

但是传入该函数的参数并没有完全交代清楚,这里说明一下。在inv_icm20948_set_chip_power_state函数中,调用inv_icm20948_write_single_mems_reg_core函数的代码如下:

    status = inv_icm20948_write_single_mems_reg_core(s, REG_PWR_MGMT_1, s->base_state.pwr_mgmt_1);

REG_PWR_MGMT_1宏在EMD-Core\sources\Invn\Devices\Drivers\ICM20948\Icm20948Defs.h中定义,如下:

#define REG_PWR_MGMT_1          (BANK_0 | 0x06)

对应于ICM20948手册中的PWR_MGMT_1寄存器,如下所示:

前文讲到,在inv_icm20948_set_chip_power_state函数中有awitch,两个case对应了不同的位,分别是BIT_SLEEP和BIT_LP_EN。这两个宏定义和上边的REG_PWR_MGMT_1是在一起的,代码如下:

#define REG_PWR_MGMT_1          (BANK_0 | 0x06)
#define BIT_H_RESET                     0x80
#define BIT_SLEEP                       0x40
#define BIT_LP_EN                       0x20
#define BIT_CLK_PLL                     0x01

对应到芯片手册中,就是上边PWR_MGMT_1寄存器的SLEEP位(bit6)和LP_EN位(bit5)。

至此,inv_icm20948_write_single_mems_reg_core函数就解析完了。

inv_icm20948_set_chip_power_state函数中尚需解析的其余两个函数:inv_icm20948_get_lpen_control函数和inv_icm20948_sleep_100us函数,放在下一回解析。


http://www.kler.cn/a/301936.html

相关文章:

  • vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-
  • 数据结构—栈和队列
  • SASS 控制指令详解@for、@if、@each、@while
  • 第八节 如何结合AAA实现用户远程登录-路由基础
  • STM32 串口输出调试信息
  • [Mysql] Mysql的多表查询----多表关系(上)
  • Mysql查看锁阻塞信息
  • 机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用
  • 用钱能解决的事儿真不叫事儿!
  • SQL Server数据库简单的事务日志备份恢复
  • arcgis Feature Server的新增、更新、删除
  • 从边缘到云端,合宙DTURTU打造无缝物联网解决方案
  • AI学习指南深度学习篇-Adam在深度学习中的应用
  • Linux和C语言(Day07)
  • uniapp实现下拉刷新
  • 什么是数据库回表,又该如何避免
  • 简单比较 http https http2,我们要如何把http升级为https
  • UML-统一建模语言学习笔记20240912
  • 性能测试-跨线程组使用变量(十四)
  • 【网络安全】对称密码体制
  • Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现
  • Git常用指令大全详解
  • 以太坊学习
  • 从卷积的物理意义出发的第二种卷积计算方法
  • 《深度学习》OpenCV轮廓检测 模版匹配 解析及实现
  • Redis的C客户端(hiredis库)使用