今天利用HOST example/enet_lwip/m3/enet_lwip.c看了GPIO的复用配置。以其中的这段程序为例:
// MII_TXD3GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_DIR_MODE_HW);GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_TYPE_STD);HWREG(GPIO_PORTC_BASE + GPIO_O_PCTL) &= 0xFFF0FFFF;HWREG(GPIO_PORTC_BASE + GPIO_O_PCTL) |= 0x00030000; 1、我的理解是每一组的PORT,如PORTA 、PORTB等,它们都有各自的的GPIOASEL 、GPIOCSEL 、GPIOPCTL等寄存器,因为这些寄存器只有8个位的状态,必须每组PORT都有一个。
2、HWREG(GPIO_PORTC_BASE + GPIO_O_PCTL) &= 0xFFF0FFFF;
HWREG(GPIO_PORTC_BASE + GPIO_O_PCTL) |= 0x00030000;
结果是使GPIOPCTL寄存器的PMC4为0011,然后对应功能技术手册的table4-1,选择PC4的3号(0011)功能,即MII_TXD3。这样理解是对的吗?
3、GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_PIN_TYPE_STD);这句是配置管脚的什么属性?手册上有5种GPIO_PIN_TYPE_X,分别是什么?各用在什么场合?
4、我看到后面有些引脚的配置使用了GPIOASEL寄存器,有些没有。我的理解是这些管脚是分成两组的,在上面组中的 GPIOASEL相应位清0,,在下面就置1,因默认是0,故在上面组无需配置,在下面组则多了配置GPIOASEL寄存器的语句。这样理解是对的吗?