芯片IC的mask位置

记录芯片ic驱动中mask标志的作用。
mask是指修改指定的位的寄存器配置,而不是全部。
原因是因为之前在调试的时候出现了一些意外,我们一般设置方式是 寄存器地址 + 数据。
格式如下

set_register_date [] = {
	/* reg  data*/
	{0x01, 0x11}, 
	{0x02, 0x22}
	......
	{0x09, 0x11}
}

这样我就把 0x01的数据设置为了0x11, 0x02的地址上数据设置为0x22,但是后来死活不对,这个IC就是没有正常工作。

后来发现芯片厂商那边没有给我提供对应的寄存器的mask,我们不应该设置设置对应起存起的全部地址,而是需要设置对应的寄存器地址的指定的位置,如何指定位置,就是通过mask码指定。

格式如下:(仅供参考)

set_register_date [] = {
	/* reg  data  mask*/
	{0x01, 0x11, 0x0200}, 
	{0x02, 0x22, 0x0100}
	......
	{0x09, 0x11, 0x4000}
}

内核中也使用的 I 运算来达到这个目的。

#define MASK_BIT_RST 0X0101
#define MASK_BIT_PW  0X1000

reg = set_date (0x01, 0x11 | MASK_BIT_RST );
.....

这里主要记录下mask码的东西,避免有些同学第一次看到会有迷惑

你可能感兴趣的:(linux驱动学习(兼容安卓),linux,C语言学习,linux,c语言)