efr32 cmuClock_GPIO设置中4次移位0的逻辑

问题描述 投票:0回答:1

在下面的变量中定义了gpio的cmuClock。 我知道什么是<< and bit wise or operations . but there are logical stuff like shifting 0 four times :-) shifting 0 4 times still will result in zero. What kind of registers are used in efr32 for this purpose? Thanks.

cmuClock_GPIO = (CMU_NOPRESC_REG << CMU_PRESC_REG_POS)//0<<4
                  | (CMU_NOSEL_REG << CMU_SEL_REG_POS)//0<<0
                  | (CMU_HFBUSCLKEN0_EN_REG << CMU_EN_REG_POS)//5<<8
                  | (_CMU_HFBUSCLKEN0_GPIO_SHIFT << CMU_EN_BIT_POS)//2<<12
                  | (CMU_HFBUS_CLK_BRANCH << CMU_CLK_BRANCH_POS),//5<<17
microcontroller
1个回答
0
投票

这样写使得代码可维护。

如果

CMU_NOPRESC_REG
的值需要改变为非零的值,你可以只改变一个地方的一个常量,代码仍然有效。

如果你取消移位,那么当你想改变那个位域的值时,你不能只改变一个常量,你必须遍历所有代码并将移位放回去。

(另请注意,如果您使用常量编写

(0 << N)
,那么编译器将永远不会实际生成移位指令,它会在编译时进行移位并将结果值插入二进制文件中)。

© www.soinside.com 2019 - 2024. All rights reserved.