微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LPC1114通用输入/输出端口(GPIO)续

LPC1114通用输入/输出端口(GPIO)续

时间:11-13 来源:互联网 点击:
前面讨论了GPIO数据寄存器和屏蔽结构的用法,这里再接着讨论一下涉及到GPIO的其它寄存器用法。从GPIO定义的结构体中可以看出,除了前面讨论的DATA寄存器以外,还剩余有8个寄存器,偏移地址从0x8000到0x801C,它们都在GPIO设置中起着重要的作用,下面就一一进行讨论。

首先看DIR寄存器,其偏移地址为0x8000,属性为可读可写,它负责GPIO引脚的方向,即引脚是用做输入还是输出,由该寄存器的设置来决定。虽然DIR寄存器也是32位结构,但由于LPC1114每组只有12个引脚,所以只用了其中的低12位。当位为0 时做输入,为1时做输出,12位与12个引脚一一对应,每位设置对应一个引脚。在默认状态下DIR的值为全0,所以在默认状态下所有的引脚为输入状态。要改变引脚状态,可通过写DIR寄存器对应的位来实现。例如,要把端口0的第1、3、5脚设为输入,其它全为输出,执行语句“LPC_GPIO0->DIR = 0xFD5;”就可以了。

接下来看IS寄存器,其偏移地址为0x8004,属性为可读可写,它负责GPIO引脚外部中断的触发方式,即引脚响应中断是电平触发还是边沿触发,由该寄存器的设置来决定。IS寄存器也只用了32位中的低12位,当位为0 时选择边沿触发,为1时选择电平触发,12位与12个引脚一一对应,每位设置对应一个引脚。在默认状态下IS的值为全0,所以在默认状态下所有的引脚在外部中断时是边沿触发方式。要改变引脚中断的触发方式,可通过写IS寄存器对应的位来实现。例如,要把端口1的第11脚设为电平触发,执行语句“LPC_GPIO1->IS |= 0x800;”就可以了。另外,在选择触发方式时要注意,若选择了电平触发,必须要考虑是否会在触发电平保持期间引发多次外部中断响应。一般情况下,选择边沿触发方式就不会存在这个问题。

接着看IEV寄存器,其偏移地址为0x800C,属性为可读可写,它负责配合上面的IS寄存器来确定具体的触发方式。即:若IS配置为边沿触发方式,则IEV负责选择是上跳沿还是下跳沿;若IS配置为电平触发方式,则IVE负责选择是高电平触发还是低电平触发。IVE寄存器也只用了32位中的低12位,当位为0 时选择下跳沿触发或低电平触发方式,为1时选择上跳沿触发或高电平触发方式,12位与12个引脚一一对应,每位设置对应一个引脚。在默认状态下IEV的值为全0,所以在默认状态下所有的引脚在外部中断时是下跳沿触发或低电平触发方式。要改变引脚中断的具体触发方式,可通过写IEV寄存器对应的位来实现。例如,要把端口2的第5脚设为高电平触发,执行两句语句“LPC_GPIO1->IS |= 0x020;LPC_GPIO1->IVE |=0x020;”就可以了。另外要强调一点,IEV寄存器必须和IS寄存器配合使用。一般来说,应先配置IS,再配置IVE。

接下来是IBE寄存器,其偏移地址为0x8008,属性为可读可写,它负责GPIO在外部中断时,用来选择是否使用双边沿触发方式。在某些特殊应用的地方(比如需要同时捕获脉冲的上跳沿和下跳沿时),需要在程序中频繁转换触发方式,而在LPC1114中由于有IBE寄存器,所以操作就简单多了,只要通过设置IBE寄存器来使能对应引脚的双沿触发方式就可以了。IBE寄存器也只用了32位中的低12位,当位为0 时关闭双沿触发,此时的触发方式由IEV寄存器决定。为1时开启双沿触发,12位与12个引脚一一对应,每位设置对应一个引脚。在默认状态下IBE的值为全0,所以在默认状态下所有的引脚在外部中断时双沿触发方式处于关闭状态。要使能双边沿触发方式,可通过写IBE寄存器对应的位来实现。例如,要把端口3的第1脚设为双沿触发方式,执行两句语句“LPC_GPIO2->IS &= ~0x002;LPC_GPIO2->IBE |=0x002;”就可以了。另外有一点需要强调一下,如果某引脚被IBE设置为双边沿触发,则其对应的IEV设置就不起作用了。还有就是IBE寄存器也必须和IS寄存器配合使用,一般来说,应先配置IS,再配置IBE。

下一个是IE寄存器,其偏移地址为0x8010,属性为可读可写,它负责使能GPIO引脚的外部中断功能。该寄存器也只用了32位中的低12位,当位为0 时中断功能被屏蔽(即中断不使能),为1时中断功能未屏蔽(即中断使能),12位与12个引脚一一对应,每位设置对应一个引脚。在默认状态下IE的值为全0,所以在默认状态下所有的引脚不使用外部中断(中断全部被屏蔽)。要使能某引脚的外部中断功能,可通过写IE寄存器对应的位来实现。例如,要开启端口0的第1引脚中断功能,执行语句“LPC_GPIO0->IE = 0x002;”就可以了。

再下一个是RIS寄存器,其偏移地址为0x8014,属性为只读,它负责查询哪个GP

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top