关于EFR32的CMU_GPIO时钟设置中0移位操作及对应寄存器的问询
EFR32 CMU时钟配置疑问解答
为什么要写0 << 4这类操作?
虽然0移位后结果还是0,但这么写不是无用功:
- 代码清晰性:明确标出时钟配置里的「预分频位段(PRESC)」和「时钟源选择位段(SEL)」是配置为默认无操作状态(
CMU_NOPRESC_REG、CMU_NOSEL_REG定义为0),让看代码的人一眼能明白这两个位段的配置意图,不会以为是漏写了。 - 方便后续修改:如果之后要调整预分频系数或切换时钟源,直接改
CMU_NOPRESC_REG、CMU_NOSEL_REG的数值就行,不用再补移位代码,保持配置结构统一。
对应的EFR32寄存器
这段代码针对的是CMU(时钟管理单元)的以下寄存器:
CMU_HFBUSCLKEN0寄存器:代码里的5<<8和2<<12部分,是用来打开GPIO模块的HF总线时钟使能——_CMU_HFBUSCLKEN0_GPIO_SHIFT是GPIO在该寄存器中对应的位偏移(值为2),移位后就能精准置位GPIO时钟的使能位。CMU_HFBUSCLKCTRL寄存器:代码里的0<<4(预分频位段)和0<<0(时钟源选择位段)对应这个寄存器的PRESC和SEL位,这里用0是取默认的无预分频、默认时钟源配置。- 另外
5<<17部分指定时钟分支为HF总线分支,对应CMU内部的时钟分支选择逻辑,关联HF总线时钟的整体配置。
内容的提问来源于stack exchange,提问作者lub2354
相关产品推荐
相关产品推荐

