写在最前,不喜请略过。本博文的主要内容已在QQ空间、人人网、网易博客、百度空间等平台发表过,作者为Mr_D_prince(斌斌-龙臻),也就是本人,前两者均为我在非技术论坛的昵称。在技术论坛我更喜欢newofcortexm3这个昵称,原因无他,我就是个技术新人。之所以文章类型为什么是整理,是因为博文的主要内容均来自TI相关的技术手册,我只是做了下解读或者整理。
F28335有88个IO口,为GPIO0至GPIO87,其中GPIO0至GPIO63可以配置为8个核心中断。28335的GPIO口可以分为三组,分别为A口(GPIO0至GPIO31),B口(GPIO32至GPIO63)和C口(GPIO64至GPIO87)。GPIO的寄存器可以分为三种,分别是GPIO控制寄存器,GPIO数据寄存器和GPIO中断与低功耗模式选择寄存器。
每个通用I/O端口都受多路复用(MUX),方向(DIR),数据(DAT),置位(SET),清楚(CLEAR),以及切换(TOGGLE)寄存器的控制。
多路复用寄存器GPxMUX(x=A,B,C)用来配置引脚的功能,是外设操作还是I/O操作。复位时,所有的GPIO引脚都配置成数字I/O功能。当寄存器中某位置1时,相应的引脚配置成相应的外设。具体的管脚与外设功能见技术手册sprufb0d——System Control and Interrupts的Table 50(GPAMUX1)。
方向控制寄存器GPxDIR用来将相应的I/O管脚配置成输出或输入,复位时,所有的GPIO引脚配置成输入,当GPxDIR.bi t= 1时,引脚配置成输出。在采用GPxDIR寄存器位将输入端口改变成输出端口之前,引脚的当前电平反应到GPXDAT寄存器上。在改变输入成输出状态之前,初始化GPxDAT用寄存器GPxSET、GPxCLEAR、GPxTOGGLE实现。
上拉电阻使能寄存器GPxPUD用来配置是否使能上拉电阻。复位时,所有的GPIO引脚使能上拉电阻,当GPxPUD寄存器的某位置1时,相应的引脚的上拉电阻不使能。
数据寄存器GPxDAT,是一个读/写寄存器,读入的该寄存器的值反应了输入限制后输入引脚当前的电平,写寄存器可设置输出引脚为相应的电平。但在实验过程中发现,要对该寄存器的某个位写1或置零,必须延迟多个系统周期才能实现。鉴于此对GPIO的某个具体引脚操作时不建议使用此寄存器,使用置位寄存器和清楚寄存器要来的高效的多。
置位寄存器GPxSET是一个只写寄存器,读为0。如果对应的引脚配置为输出,则向置位寄存器的该位写1,将对应引脚的电平拉高,写0则无效。
清除寄存器GPxCLEAR是一个只写寄存器,读为0。如果对应的引脚配置为输出,则向清除寄存器的该位写1,将把对应引脚的电平拉低,写0无效。
切换寄存器GPxTOGGLE,是一个只写寄存器,读为0。如果对应的引脚配置为输出,则向切换寄存器的该位写1,将把对应引脚拉成反向电平,写0无效。
中断选择寄存器GPIOXIMTnSEL的功能是选择某位I/O引脚来配置中断。具体的配置见表6。该表配置的是GPIO0至GPIO31,对应的是XINT1和XINT2,具体的中断配置见寄存器XINT1CR和XINT2CR。
低功耗模式唤醒选择寄存器GPIOLPMSEL针对的是GPIO0至GPIO31,向寄存器的某位写1,则相应的信号引脚将唤醒设备,无论设备处于HALT或者STANDBY低功耗模式。写0则无效。
下面介绍一个简单的例子,点亮LED。电路图如下图所示:
在图中,LED所连接的GPIO引脚是GPIO60和GPIO61和GPIO61,当GPIO60和GPIO61为低时,D1和D2发光。程序如下:
#define LED1 GpioDataRegs.GPBDAT.bit.GPIO60
#define LED2 GpioDataRegs.GPBDAT.bit.GPIO61
LED 的初始化程序
void configLED(void)
{
EALLOW;
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;
EDIS;
}
在主函数中调用configLED()函数,再对LED1和LED2进行简单的赋值即可实现LED的控制。例如:LED1亮,LED2灭,即LED1=0;LED2=1.
文章评论(0条评论)
登录后参与讨论