本帖最后由 xyz549040622 于 2015-11-7 00:06 编辑
接上,配置IO为普通IO的时候,按照上图中的流程,应该分6步配置了,那我们实际看看官方的例程,是这么配置的
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//启用GPIOF端口并提供一个时钟
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);//配置IO为输出模式
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);//配置输出高电平
实际中只用了4步,没有配置为数字功能,没有配置GPIO的时钟,没有配置IO的模式。这是为什么呢?
1.关于时钟的问题,TIVA的GPIO时钟可以选择挂在APB总线上或者挂在AHB总线上,复位后是默认挂在APB总线上的。因此这个选择使用默认的了,当选择AHB的时候需要用到这个函数 SysCtlGPIOAHBDisable(SYSCTL_PERIPH_GPIOF);//使能GPIO的AHB时钟,默认是通过APB时钟访问的
寄存器的介绍如下:
2.关于GPIO选择是外设还是普通IO,其实是有这么一个寄存器的,手册中的说明如下
这个寄存器在函数GPIODirModeSet()中被设置了,当设置IO方向的时候,自动就设置这个寄存器了
3.关于IO的方向和模式设置数,是这GPIODirModeSet()和GPIOPadConfigSet(),但是函数中没有直接设置,这是因为函数库提供了GPIOPinTypeGPIOOutput()这么一个函数,当使用这个函数的时候,自动配置了IO的方向和模式,函数源码如下:
GPIOPinTypeGPIOOutput(uint32_t ui32Port, uint8_t ui8Pins)
{
//
// Check the arguments.
//
ASSERT(_GPIOBaseValid(ui32Port));
//
// Set the pad(s) for standard push-pull operation.
//
GPIOPadConfigSet(ui32Port, ui8Pins, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
//
// Make the pin(s) be outputs.
//
GPIODirModeSet(ui32Port, ui8Pins, GPIO_DIR_MODE_OUT);
}
|