cortex m0 lpc1114 RIS寄存器
扫描二维码
随时随地手机看文章
这一节,介绍如何利用读取RIS寄存器检测引脚上的高低电平变化。
新建一个工程,结构如下图所示:
在main.c文件中,输入以下代码:
#include “LPC11XX.H”
#define LED1_ON LPC_GPIO1->DATA &= ~(1<<0)
#define LED1_OFF LPC_GPIO1->DATA |= (1<<0)
#define LED2_ON LPC_GPIO1->DATA &= ~(1<<1)
#define LED2_OFF LPC_GPIO1->DATA |= (1<<1)
#define KEY1_DOWN (LPC_GPIO1->DATA&(1<<9))!=(1<<9)
#define KEY2_DOWN (LPC_GPIO1->DATA&(1<<10))!=(1<<10)
void led_init()
{
LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟
LPC_IOCON->R_PIO1_0 &= ~0x07;
LPC_IOCON->R_PIO1_0 |= 0x01; //把P1.0脚设置为GPIO
LPC_IOCON->R_PIO1_1 &= ~0x07;
LPC_IOCON->R_PIO1_1 |= 0x01; //把P1.1脚设置为GPIO
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟
LPC_GPIO1->DIR |= (1<<0); // 把P1.0设置为输出引脚
LPC_GPIO1->DATA |= (1<<0); // 把P1.0设置为高电平
LPC_GPIO1->DIR |= (1<<1); // 把P1.1设置为输出引脚
LPC_GPIO1->DATA |= (1<<1); // 把P1.1设置为高电平
}
int main()
{
led_init();
while(1)
{
if((LPC_GPIO1->RIS&(1<<9))==(1<<9)) // 读取RIS寄存器
{
LED1_ON;
while(KEY1_DOWN);
LED1_OFF;
LPC_GPIO1->IC = 0XFFF; // 清RIS状态位
}
if((LPC_GPIO1->RIS&(1<<10))==(1<<10)) // 读取RIS寄存器
{
LED2_ON;
while(KEY2_DOWN);
LED2_OFF;
LPC_GPIO1->IC = 0XFFF; // 清RIS状态位
}
}
}
与上一节DATA的程序相比,重点在第26和33行,这里是读取RIS寄存器,来判断引脚上的电平高低。RIS寄存器是原始中断状态寄存器,只要有IS、IBE、IEV寄存器中设置的中断方式产生,就会使得RIS位置1,由IS、IBE、IEV寄存器的默认值可以看出,引脚为下降沿中断,所以当按键按下,产生低电平,RIS对应位就会置1。还有一点需要注意的是,RIS寄存器需要软件清0,如第31行和第38行。