GPIO的配置 是 软件与硬件的联接点!!!
因为首次进行此类设计的原故,对于Flash及CPU的功能特性不是太熟悉,因此第一版设计后为Flash的AL、CL、E#、RB#四个功能pin脚连接到普通的GPIO口,并将其都设置为作为普通的GPIO口的特性。
根据的是《STR910FAW32》芯片手册中的Table 5. Device pin description来对此四个口进行配置,都选择为GP Output的功能。
根据Flash芯片手册中的时序图来进行这四个口的时序配置,以满足功能性要求。
PS:在对各个GPIO口进行配置之前使能相应的GPIO口时钟。
以页写操作为例,CL、AL、E#、RB#、I/O信号线都需要自己手动进行程序编写,而在编写程序的期间则无需W#、R#信号的处理。
尤其需要注意是RB#的GPIO的配置及其硬件连接,此处因为最初未进行单独考虑,耗了大量时间。
从此图中可以清楚地看出,RB#是open drain,在Str91x的库函数里有pushpull和opencollector两个选择,原先一直将RB#和其它的功能口都设置成pushpull,并没有对此引脚过多地关注,直到后续的程序始终会卡在此语句上,才开始注意到可能是配置方式的问题,重新查阅手册后发现此图。并且,此引脚是自动模式,并非我起初理解的手动抬高拉低中间加延时的操作,原理得先要弄明白!
图8-5-4为RB#引脚的上拉电阻的计算公式,对此公式目前不是太明白,目前采用的上拉电阻是经验值的4.7K。
Port 8作为复用口,其中之一的功能是EMI的专用数据口,在配置上有其特殊性。
在91x_gpio.c的库函数的文件里可以看出,GPIO_EMIConfig()函数的本质即为将SCU_EMI寄存器的相应位从0设为1。
在子函数里的配置如下图。