您的位置:首页 > 健康 > 养生 > ICM20948 DMP代码详解(17)

ICM20948 DMP代码详解(17)

2024/10/6 10:38:33 来源:https://blog.csdn.net/phmatthaus/article/details/142107624  浏览:    关键词: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函数,放在下一回解析。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com