在hw_types.h文件下可以找到这样一段宏定义,然后在打开工程的函数是会发现几乎所有的对寄存器的配置都是通过这几
个定义实现的,这就是位带操作,这种方法可以提高代码执行效率。
HWREG(x) 定义一个32位无符号指针x,然后在取出它的值,最终得到的是x地址的值,下面的都类似
HWREGH(x) 定义的是16位无符号指针的值
HWREGB(x) 定义的是8位无符号指针的值
HWREGBITW(x,b) 表示获取x的地址下第b为的值
下面我将通过对GPIO的配置说明一下如何使用位带操作对寄存器进行配置。
程序的初始化流程如图:
先进行外设使能,然后GPIO管脚复用配置,然后管脚初始化,我们先来看看GPIOBankPinMuxDet()函数,打开函数看到如
图的调用函数,随便选择一个,比如第一个继续打开
然后就会看到函数的源码如图:
首先定义了一个 u32 savePinmux 变量,然后用HWREG(x)获取目标地址下的值,
savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) &~(