LPC1768外部中断与GPIO中断
LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明

控制这四个外部中断靠以下寄存器

这三个寄存器的0 1 2 3位分别代表中断的0 1 2 3,EXTINT寄存器表示中断是否发生,在发生中断的时候该寄存器会置位,可以通过写1清零,EXTMODE寄存器表示触发模式,有电平触发和变化沿触发两种,EXTPOLAR与EXTMODE,在电平触发模式下,决定高电平还是低电平触发,在变化沿触发的情况下决定上升沿还是下降沿触发
这三个中断分别相关的引脚为 EINT0—P2.10 EINT1—P2.11 EINT2—P2.12 EINT3—P2.13,
使用这三个引脚作为中断的方法如下.
首先初始化相应的引脚,选择中断功能,然后配置中断触发方式,最后打开nvic中断许可,这就完成了初始化,然后便是中断响应程序,在中断响应程序中先清除extint中的中断标志,然后清除nvic中断挂起,接着做自己的事情,完整的流程就OK了,示例代码如下:
static void Eint1Init(EINTMODE eintMode,EINTLOGIC eintLogic,PREEMPTPRIORITY PreemptPriority,SUBPRIORITY SubPriority)
{
u8 i = 0;
LPC_PINCON->PINSEL4 &= ~(0X03L<<22);
LPC_PINCON->PINSEL4 |= (0X01L<<22);//设置IO口功能为EINT1
if(eintMode)LPC_SC->EXTMODE |= 1<<1;
else LPC_SC->EXTMODE &= ~(1<<1);//选择中断模式为电平或者边沿
if(eintLogic)
{
LPC_SC->EXTPOLAR |= 1<<1;
LPC_GPIOINT->IO2IntEnR &= 1<<11;
}
else
{
LPC_SC->EXTPOLAR &= ~(1<<1);
LPC_GPIOINT->IO2IntEnF &= 1<<11;
}//设置中断触发电平
//初始化清零
i = (LPC_SC->EXTINT>>1)&0x01;
if(i)LPC_SC->EXTINT &= ~(0x01<<1); //清除中断标志
NVIC_SetPriority(EINT1_IRQn,NVIC_EncodePriority(PriorityGroup2,PreemptPriority,SubPriority));//设置中断优先级
NVIC_EnableIRQ(EINT1_IRQn);//使能中断
}
中断处理函数中流程如下
void EINT1_IRQHandler(void)
{
if(Eint1GetFlag())
{
Eint1ClearFlag();
}
}
从这一点看,似乎1768的中断数量少了点,但是在gpio的资料中,有这么一句话

也就是说,1768的gpio口是有中断的,但是可能是厂商觉得麻烦,没有专门开辟GPIO中断通道,所GPIO中断也是用的EINT3的中断通道,P0端口和P2端口的所有端口都能用在中断上,那么1768的外部中断一下子就提升了几十个.
使用GPIO作中断有这些需要设置

指明整个端口有没有中断发生,可想而知,这个寄存器只有两个位是可用的,因为只有两个端口支持中断

这是使能某个端口的上升沿中断,既然如此,就还会有一个对应的下降沿中断使能

然后,上升沿中断和下降沿中断都有一个中断标志位,分别如下


最后,中断标志位需要有一个清零位,原则上,两个标志位应该对应两个清零,但是1768为了简便,用一个清零位清除两个标志位,如下

另外,使用GPIO中断的时候,GPIO设置为通用输出输入功能,使用IO口中断的例程如下
//使用p2.5做测试
void GPIO_INT_Init(void)
{
LPC_SC->PCONP |= (1<<15);//打开时钟
LPC_PINCON->PINSEL4 &= ~(0X03L<<10);//选择GPIO功能
LPC_PINCON->PINMODE4 &= ~(0X03L<<10);//使能内部上拉电阻
LPC_PINCON->PINMODE_OD2 &= ~(0X01<<5);//取消推挽模式
LPC_GPIOINT->IO2IntEnR |= (1<<5);//使能下降沿中断
LPC_GPIOINT->IO2IntEnF &= ~(1<<5);//禁止上升沿中断
LPC_GPIOINT->IO2IntClr |= (1<<5);//中断清零
NVIC_SetPriority(EINT3_IRQn,NVIC_EncodePriority(PriorityGroup2,PreemptPriority,SubPriority));
NVIC_EnableIRQ(EINT3_IRQn);//打开NVIC中断
}
void EINT3_IRQHandler(void)
{
NVIC_ClearPendingIRQ(EINT3_IRQn);
if(LPC_GPIOINT->IntStatus &(1<<2))//端口2有中断
{
if(LPC_GPIOINT->IO2IntStatR &(1<<5))//p2.5有中断发生
{
LPC_GPIOINT->IO2IntClr |= (1<<5);//中断清零
//接下来可以做自己的事情了
}
}
}
LPC1768外部中断与GPIO中断的更多相关文章
- LPC1788的外部中断和GPIO中断
首先是gpio中断,这一点和1768不同,1768使用的中断时和eint3共用中断通道,到了1788,专门为gpio开辟了中断 #ifndef __JOYPAD_H_ #define __JOYPAD ...
- 在xilinxFPGA上使用microblaze及自写GPIO中断
很久很久没有更新过博客了,今天来扒一扒FPGA上CPU软核的使用. 主要完成的功能:使用的开发板是nexys 4 DDR,板上有16个switch以及16个LED,需要完成microblaze对led ...
- 外部按键 控制 LED 中断 (参考 http://www.oschina.net/question/565065_115196?sort=time )
转帖: http://www.oschina.net/question/565065_115196?sort=time 实验目的: mini2440开发板上有6个按键,将其中的前4个按键设为外部中断方 ...
- MSP430 G2553 LaunchPad GPIO中断
P1.P2端口上的每个管脚都支持外部中断.P1端口的所有管脚都对应同一个中断向量(Interrupt Vector),类似的,P2端口的所有管脚都对应另一个中断向量:通过PxIFG寄存器来判断中断来源 ...
- 十天学会单片机Day1点亮数码管(数码管、外部中断、定时器中断)
1.引脚定义 P3口各引脚第二功能定义 标号 引脚 第二功能 说明 P3.0 10 RXD 串行输入口 P3.1 11 TXD 串行输出口 P3.2 12 INT0(上划线) 外部中断0 P3.3 1 ...
- Linux Zynq GPIO中断
注册中断:对每个pin进行循环遍历for (pin_num = 0; pin_num < min_t(int, ZYNQ_GPIO_NR_GPIOS, (int)chip->ngpio) ...
- DAM的使用结合串口和中断以及GPIO。
DAM的使用结合串口和中断以及GPIO. 当我学到DMA这章的时候就意味着我已经学完了,GPIO里的LED,按键,还有就是串口发送数据. 那么下面就来总结下前段时间所学的知识(因为接下来有断时间我是没 ...
- esp8266 SDK开发之GPIO中断
先秀一下自己焊的板子,黑的开关用于复位,蓝的开关用于烧录程序. 首先要明确的是esp8622的大多数管脚都有多个功能, 比如可以用来当做GPIO管脚,还可以用来当做SPI管脚. 如下图所示 使用PIN ...
- TI-RTOS 之 GPIO中断(按键)
TI-RTOS 之 GPIO中断(按键) 前面已经用过LED, 定时器,这次来了解GPIO的中断是怎么用的,从CC1310+TI-RTOS的例程可以直接找到相应的例子程序,它的关键是在于要使能中断,也 ...
随机推荐
- ACE_Get_Opt解析命令行
ACE_Get_Opt是一种解析命令行参数选项的迭代器. 1:构造方法 ACE_Get_Opt需要引用头文件,#include "ace/Get_Opt.h". ACE_Get_O ...
- Node.js学习 - File Operation
同步异步 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync(). 异步的方法函数最后一个参数为 ...
- 我终于有案例库啦(github 提供的)
穷逼一个,一直在纠结要不要买个服务器什么的. 后来在慕课网看 git 教程时看到 github 可以帮你展示网页哟,于是我便有了这个案例库. 网址:https://foreverz133.github ...
- hdu_5555_Immortality of Frog(状压DP)
题目连接:hdu_5555_Immortality of Frog 题意: 给你一个NxN的网格,第N行的每一列都有个青蛙,这些青蛙只会往上走,上帝会在每个膜中放一个长生不老的药,一共有N个膜,每个膜 ...
- IE7&IE8不支持rgba的方法
使用滤镜功能 filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#BF000000,endColorstr=#BF0000 ...
- 用C#实现的两个试验编程(txt文本数据的导入,和数据导出为TXT)
1. 文件的存取 数据文件1.txt为学生成绩统计表,要对它做一个统计工作.文件中若一个人有多个成绩,则取他们的最好成绩来统计,然后计算全班平均成绩:统计0-69.70-79.80-89.90-100 ...
- javascript 中arguments.callee 调用自身
一.Arguments该对象代表正在执行的函数和调用他的函数的参数.[function.]arguments[n]参数function :选项.当前正在执行的 Function 对象的名字.n :选项 ...
- loadView 再思考
如果使用代码创建view,那么就需要重写loadView方法: 在这个方法中,如果不创建view,就会循环的调用loadView. - (void)loadView { UIView *view = ...
- C#使用FFmpeg 将视频格式转换成Gif图片示例
根据EFmpeg封装的视频转换gif工具:https://my.oschina.net/tianma3798/blog/825317 一.本次使用参数说明 /* * 参数说明: * -i 源文件位置 ...
- 如何高效的用判断用js判断ie6
用js判断ie6的方法有很多,如: 1. var isIE=!!window.ActiveXObject; var isIE6=isIE&&!window.XMLHttpRequest ...