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

ICM20948 DMP代码详解(36)

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

 

上一回讲到了icm20948_sensor_setup() ---> inv_icm20948_initialize_auxiliary函数 ---> inv_icm20948_set_slave_compass_id函数,本回开始,就对于inv_icm20948_set_slave_compass_id函数进行解析。为了便于理解和回顾,再次贴出该函数源码,在EMD-Core\sources\Invn\Devices\Drivers\ICM20948\Icm20948DataBaseDriver.c中,如下:

int inv_icm20948_set_slave_compass_id(struct inv_icm20948 *s, int id)
{int result = 0;(void)id;//result = inv_icm20948_wakeup_mems(s);//if (result)//	return result;inv_icm20948_prevent_lpen_control(s);activate_compass(s);inv_icm20948_init_secondary(s);// Set up the secondary I2C bus on 20630.inv_icm20948_set_secondary(s);//Setup Compassresult = inv_icm20948_setup_compass_akm(s);//Setup Compass mounting matrix into DMPresult |= inv_icm20948_compass_dmp_cal(s, s->mounting_matrix, s->mounting_matrix_secondary_compass);if (result)desactivate_compass(s);//result = inv_icm20948_sleep_mems(s);inv_icm20948_allow_lpen_control(s);return result;
}

inv_icm20948_set_slave_compass_id函数中调用了很多函数,一个一个来看。

1)inv_icm20948_prevent_lpen_control函数

代码片段如下:

    inv_icm20948_prevent_lpen_control(s);

inv_icm20948_prevent_lpen_control函数在EMD-Core\sources\Invn\Devices\Drivers\ICM20948\Icm20948DataBaseDriver.c中,代码如下:

void inv_icm20948_prevent_lpen_control(struct inv_icm20948 *s)
{s->sAllowLpEn = 0;
}

这个函数和前文书讲过的inv_icm20948_allow_lpen_control函数是一对:

void inv_icm20948_allow_lpen_control(struct inv_icm20948 *s)
{s->sAllowLpEn = 1;inv_icm20948_set_chip_power_state(s, CHIP_LP_ENABLE, 1);
}

前一个是禁止低功耗模式,后一个是使能低功耗模式。当然,都只是设置结构体成员,并没有实际设置到寄存器中去。

2)activate_compass函数

activate_compass函数也在EMD-Core\sources\Invn\Devices\Drivers\ICM20948\Icm20948DataBaseDriver.c中,代码如下:

static void activate_compass(struct inv_icm20948 *s)
{s->s_compass_available = 1;
}

这个函数和下边的desactivate_compass函数是一对:

static void desactivate_compass(struct inv_icm20948 *s)
{s->s_compass_available = 0;
}

前一个是设置指南针(陀螺仪)可用状态,后一个是设置指南针(陀螺仪)不可用状态。当然,也都是只设置结构体成员,并没有实际设置到寄存器中去。

接下来是以下代码片段:

	inv_icm20948_init_secondary(s);// Set up the secondary I2C bus on 20630.inv_icm20948_set_secondary(s);

这一段代码的解析,放在下一回中。

 


http://www.mrgr.cn/news/33236.html

相关文章:

  • web——[SUCTF 2019]EasySQL1——堆叠注入
  • 鸿蒙生态的崛起:深度认知、机遇、挑战与案例分析
  • 实时高效,全面测评快递100API的物流查询功能
  • 【1.cmake工程管理-STM32 cmake工程分析】
  • C语言中的 printf( ) 与 scanf( )
  • java八股第二天
  • 基于Java springboot+mybatis 网上商城系统
  • 模板初阶(c++)
  • 【软件资料集】系统培训方案(Word项目参考2024)
  • 面对外行同事对你的工作指手画脚,但说不到点子上的情况,可以采取以下策略来有效合作
  • 图书管理系统小程序的设计
  • 【Python】探索 TensorFlow:构建强大的机器学习模型
  • Deepin V23安装SecureCRT 9.5.2
  • VBA技术资料MF200:只能通过按钮关闭工作簿
  • 2024年研赛-华为杯数模竞赛C题论文首发+论文讲解+代码分享
  • JavaWeb——前端工程化(2/3):Vue项目简介(创建、目录结构、启动、配置端口)
  • 用java语言写一个表的查询操作
  • Java 每日一刊(第14期):抽象类和接口
  • 【OSS安全最佳实践】降低因操作失误等原因导致数据丢失的风险
  • 从Yargs源码学习中间件的设计
  • 考研数学精解【6】
  • [OpenGL]使用OpenGL绘制带纹理三角形
  • 不同编程语言的互相调用
  • js 一个数组合并到一个数组
  • 群晖套娃:群晖+飞牛fnOS二合一,群晖nas安装飞牛fnOS系统实录(飞牛fnOS初体验,如何挂载网盘视频,轻松实现影视刮削)
  • PHP项目中Vendor错误导致项目失败的解决方案