各位高人.我是一个初学者,在看LM3S8962的datasheet时,发现当需要使用SSI0口时,需要设置GPIOAFSEL的对应功能引脚为硬件功能,然后才能使用SSI0口,但是设置GPIOAFSEL的前提却是先设置GPIOLOCK为解锁状态并且设置GPIOCR的相应位为"1"的情况下才能实现硬件功能的切换,我在查看TI LM3S8962_EvalBoard随板的例程hello时,却发现在设置SSI0口的库函数GPIOPinTypeSSI()里面的代码却没有进行"开锁"操作,只是简单的对GPIOAFSEL进行赋值操作:
void
GPIOPinTypeSSI(unsigned long ulPort, unsigned char ucPins)
{
//
// Check the arguments.
//
ASSERT(GPIOBaseValid(ulPort));
//
// Make the pin(s) be peripheral controlled.
//
GPIODirModeSet(ulPort, ucPins, GPIO_DIR_MODE_HW);//
注意:此函数对GPIOAFSEL寄存器操作,具体代码见下面
//
// Set the pad(s) for standard push-pull operation.
//
GPIOPadConfigSet(ulPort, ucPins, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD);
}
void
GPIODirModeSet(unsigned long ulPort, unsigned char ucPins,
unsigned long ulPinIO)
//GPIO方向及模式设置
{
//
// Check the arguments.
//
ASSERT(GPIOBaseValid(ulPort));
ASSERT((ulPinIO == GPIO_DIR_MODE_IN) || (ulPinIO == GPIO_DIR_MODE_OUT) ||
(ulPinIO == GPIO_DIR_MODE_HW));
//
// Set the pin direction and mode.
//
HWREG(ulPort + GPIO_O_DIR) = ((ulPinIO & 1) ?
(HWREG(ulPort + GPIO_O_DIR) | ucPins) :
(HWREG(ulPort + GPIO_O_DIR) & ~(ucPins)));
HWREG(ulPort + GPIO_O_AFSEL) = ((ulPinIO & 2) ?
(HWREG(ulPort + GPIO_O_AFSEL) | ucPins) :
(HWREG(ulPort + GPIO_O_AFSEL) &
~(ucPins)));
//此行代码对GPIOAFSEL操作,可是在此之前,并没有看到对GPIOLOCK及GPIOCR的操作
}
不知到高手对此有何看法,望回复,谢谢!!!
[
本帖最后由 惜时如金 于 2013-1-23 23:18 编辑 ]
此帖出自
小平头技术问答
只有在 GPIO 转 JTAG 的时候,看到要用到 GPIOLOCK。
一周热门 更多>