4756|4

15

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

(已解决)设置GPIO的AFSEL寄存器需要确认控制(commit)吗? [复制链接]

各位高人.我是一个初学者,在看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 编辑 ]

最新回复

"可是就因为加了这条语句,导致OLED不再显示了" 我想你的问题应该出现在,你没有使能 GPIOA,就对 GPIOA 的寄存器进行了如下的读取操作,导致产生了 Hard fault. :temp = HWREG(0x40004000 + GPIO_O_AFSEL); 要读取之前,请先加上 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);  详情 回复 发表于 2013-1-22 17:38

点评

应该不需要吧。 只有在 GPIO 转 JTAG 的时候,看到要用到 GPIOLOCK。  详情 回复 发表于 2013-1-21 17:39
 
点赞 关注

回复
举报

1803

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

回复 楼主 惜时如金 的帖子

应该不需要吧。
只有在 GPIO 转 JTAG 的时候,看到要用到 GPIOLOCK。
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我做了一个实验:通过分析程序得知,将PA口由上电默认的GPIO功能转换为对SSI0口的操作在函数"RIT128x96x4Init()"中实现,于是我在main函数的RIT128x96x4Init(1000000)运行前(也就是初始化为SSI0口之前)加上一条读取:temp = HWREG(0x40004000 + GPIO_O_AFSEL);完成读取AFSEL的操作,并且想通过OLED屏显示出此值,看看到底在设置硬件功能之前,状态寄存器的值是多少,可是就因为加了这条语句,导致OLED不再显示了,但是当我把这条语句放在OLED屏初始化函数的后面,却能正常的在OLED屏上显示出0x0000002C,接下来我就尝试在OLED初始化函数前面分别读取temp = HWREG(0x40004000 + GPIO_O_LOCK);锁定寄存器的值和temp = HWREG(0x40004000 + GPIO_O_CR);读取确认寄存器的值,只要在OLED的初始化函数前面读取相关寄存器的操作,就会导致OLED黑屏,我猜想大概是读取操作是AFSEL寄存器进入的锁定状态?

点评

\"可是就因为加了这条语句,导致OLED不再显示了\" 我想你的问题应该出现在,你没有使能 GPIOA,就对 GPIOA 的寄存器进行了如下的读取操作,导致产生了 Hard fault. :temp = HWREG(0x40004000 + GPIO_O_AFSEL); 要  详情 回复 发表于 2013-1-22 17:38
 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

4
 

回复 板凳 惜时如金 的帖子

"可是就因为加了这条语句,导致OLED不再显示了"
我想你的问题应该出现在,你没有使能 GPIOA,就对 GPIOA 的寄存器进行了如下的读取操作,导致产生了 Hard fault.
:temp = HWREG(0x40004000 + GPIO_O_AFSEL);
要读取之前,请先加上 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

点评

对,经过我自己的查找,正如四楼所说的原因,确实在没能使能GPIOA口之前就读取AFSEL寄存器,从而引发用法错误,后来我又实验在OLED屏的初始化程序中的使能GPIOA口的语句之后再进行AFSEL的读取操作就能顺利读出数据了. 后  详情 回复 发表于 2013-1-23 23:10
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 Study_Stellaris 的帖子

对,经过我自己的查找,正如四楼所说的原因,确实在没能使能GPIOA口之前就读取AFSEL寄存器,从而引发用法错误,后来我又实验在OLED屏的初始化程序中的使能GPIOA口的语句之后再进行AFSEL的读取操作就能顺利读出数据了.
后来又经过翻书仔细查找,其实GPIOCR确认允许单元的值在每次上电后,除了JTAG的5个引脚默认为0,也就是不允许修改外,其它引脚都是随时随地修改硬件功能的,也就是说确认控制(commit)与设置GPIO的AFSEL寄存器(除了JTAG以外的引脚)是不矛盾的,除非想修改JTAG引脚对应的硬件功能,才需要进行解锁操作,又搞明白了一个道理,在此多谢了!!!

[ 本帖最后由 惜时如金 于 2013-1-23 23:14 编辑 ]
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表