对,经过我自己的查找,正如四楼所说的原因,确实在没能使能GPIOA口之前就读取AFSEL寄存器,从而引发用法错误,后来我又实验在OLED屏的初始化程序中的使能GPIOA口的语句之后再进行AFSEL的读取操作就能顺利读出数据了.
后来又经过翻书仔细查找,其实GPIOCR确认允许单元的值在每次上电后,除了JTAG的5个引脚默认为0,也就是不允许修改外,其它引脚都是随时随地修改硬件功能的,也就是说确认控制(commit)与设置GPIO的AFSEL寄存器(除了JTAG以外的引脚)是不矛盾的,除非想修改JTAG引脚对应的硬件功能,才需要进行解锁操作,又搞明白了一个道理,在此多谢了!!!
[ 本帖最后由 惜时如金 于 2013-1-23 23:14 编辑 ]
我做了一个实验:通过分析程序得知,将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寄存器进入的锁定状态?