在阅读starterware里控制led的代码,GPIO初始化有个这个函数
void GPIO1Pin23PinMuxSetup(void)
{
HWREG(SOC_CONTROL_REGS + CONTROL_CONF_GPMC_A(7)) = CONTROL_CONF_MUXMODE(7);
}
如果不熟悉可能看的一头雾水,这个含义是:
解释一下:
1、我们要控制的管脚是GPIO1_23这个管脚,
2、HWREG是个写地址值的函数;
SOC_CONTROL_REGS是个通用的地址偏移量,就不说了;
CONTROL_CONF_GPMC_A(7),是个地址offset,这里算出的值是0x840+ 7*4 = 85Ch,恰好是conf_gpmc_a7这个寄存器
3、上面说了一大堆,看下芯片管脚原理图:
看到这个GPMC_A7管脚没,就是这个conf_gpmc_a7寄存器来控制这个管脚功能,
这里将conf_gpmc_a7寄存器值 = 0x07;
07是啥功能呢??
看到管脚的斜杠没有?恰好是7个斜杠,8个值,分别对应管脚的8钟功能,0~7和图上写的一一对应了,所以7就是GPIO1_23.
4、附上这个conf_gpmc_a7寄存器详情
低三位选择功能,恰好最多8种功能
最后:
我们可以尝试将语句修改
HWREG(SOC_CONTROL_REGS + CONTROL_CONF_GPMC_A(7)) = CONTROL_CONF_MUXMODE(0);
选择功能为GPMC_A7,可以,发现led灯不再闪烁。