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

ICM20948 DMP代码详解(38)

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

 

上一回继续解析inv_icm20948_set_slave_compass_id函数,解析了第3段代码,本回解析接下来的代码。为了便于理解和回顾,再次贴出该函数源码,在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;
}

4)inv_icm20948_set_secondary函数

代码片段如下:

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

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

/**
*  @brief      Set up the secondary I2C bus on 20630.
*  @param[in]  MPU state varible
*  @return     0 if successful.
*/
int inv_icm20948_set_secondary(struct inv_icm20948 *s)
{int r = 0;static uint8_t lIsInited = 0;if(lIsInited == 0){r  = inv_icm20948_write_single_mems_reg(s, REG_I2C_MST_CTRL, BIT_I2C_MST_P_NSR);r |= inv_icm20948_write_single_mems_reg(s, REG_I2C_MST_ODR_CONFIG, MIN_MST_ODR_CONFIG);lIsInited = 1;}return r;
}

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

/* bank 3 register map */
#define REG_I2C_MST_ODR_CONFIG  (BANK_3 | 0x0)#define REG_I2C_MST_CTRL        (BANK_3 | 0x01)
#define BIT_I2C_MST_P_NSR               0x10#define REG_I2C_MST_DELAY_CTRL  (BANK_3 | 0x02)

4109d01fc9fd4ff99c3fc421e4c354df.png

835bd08bfa134024a7c5f021d95291b9.png

448cddd0030e4050bf002dbce92e55bc.png

eb7494dc1a4a4de5b6a2b2b787938991.png

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

#define MIN_MST_ODR_CONFIG       4

综上,以下代码片段的意思是:

r  = inv_icm20948_write_single_mems_reg(s, REG_I2C_MST_CTRL, BIT_I2C_MST_P_NSR);

写I2C_MST_CTRL寄存器的值为0x10,即I2C_MST_CLK[3:0]设置为0b0000;

93e76d6eabe64b42af74328660a74112.png

 MULT_MST_EN位为0;I2C_MST_P_NSR位为1。

以下代码片段的意思是:

		r |= inv_icm20948_write_single_mems_reg(s, REG_I2C_MST_ODR_CONFIG, MIN_MST_ODR_CONFIG);

写I2C_MST_ODR_CONFIG寄存器的值为4(0x04),即I2C_MST_ODR_CONFIG[3:0]设置为0b0000。

同时,设置lIsInited变量的值为1。

至此,inv_icm20948_set_secondary函数就解析完了。inv_icm20948_set_slave_compass_id函数后续内容的解析请看下回。

 


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

相关文章:

  • 【功能详解】IoTDB 与 ThingsBoard 成功集成!
  • NASA:ASTER L1A 重建未处理仪器数据 V003
  • Easy Excel从入门到精通!!!
  • 【Python】Tartiflette:用 Python 实现的 GraphQL 服务器
  • Android15音频进阶之新播放器HwAudioSource(八十六)
  • C++在线开发服务器环境搭建
  • Github 2024-09-23 开源项目周报 Top15
  • CSS常用定位
  • Linux C编程使用lseek和dup函数
  • awk从0学习
  • 遗传算法与深度学习实战(14)——进化策略详解与实现
  • Java应用的数据库连接池连接池监控
  • IQ Tools---OFDM
  • 60.【C语言】内存函数(memset函数)
  • 基于单片机的水位检测系统仿真
  • C#/.NET/.NET Core技术前沿周刊 | 第 6 期(2024年9.16-9.22)
  • 基于STM32残疾人辅助行走系统
  • Python知识点:如何使用Python进行物联网数据处理
  • 【全网最全】2024年华为杯研究生数学建模A题成品论文
  • tornado