今天把最后的配置讲完,不过可能要分两次。
首先是下面的函数:
void PORT_PinPassiveFilterConfig(uint32_t instance, uint8_t pin, bool status)
{
SIM->SCGC5 |= SIM_GPIOClockGateTable[instance];
(status) ? (PORT_InstanceTable[instance]->PCR[pin] |= PORT_PCR_PFE_MASK):(PORT_InstanceTable[instance]->PCR[pin] &= ~PORT_PCR_PFE_MASK);
}
表示将上面的寄存器的相应位设置为0或是1,在实际的功能上表示,将选中的引脚配置为输入(0)或是输出(1)。
接下来是最后的一个函数了
void PORT_PinMuxConfig(uint32_t instance, uint8_t pin, PORT_PinMux_Type pinMux)
{
SIM->SCGC5 |= SIM_GPIOClockGateTable[instance];
PORT_InstanceTable[instance]->PCR[pin] &= ~(PORT_PCR_MUX_MASK);
PORT_InstanceTable[instance]->PCR[pin] |= PORT_PCR_MUX(pinMux);
}
这个函数是针对下面的寄存器进行配置的:
第一句代码不说,第二句和第三句表示将寄存器的8-10位先清零,再付给相应的值。具体到这个功能中是配置为通用 GPIO, 数值上为1。
先清零,再赋值就是为了避免之前有值形成干扰。
那么到此为止,GPIO终于就说完了!