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);//中断清零
//接下来可以做自己的事情了
}
}
}
转载于:https://www.cnblogs.com/dengxiaojun/p/4336271.html
LPC1768外部中断与GPIO中断相关推荐
- linux 应用层gpio中断_linux gpio中断
最近用到gpio中断,gpio中断也是嵌入式系统用的比较多的. 对于GPIO操作 linux 有一套标准的 API,set value.get value之类的,当然也有关于中断的. 关于中断的就是: ...
- unbalanced enable irq 问题的解决 以及共享的gpio中断引起的问题
点击打开链接 最近在工作中使用irq时遇到如下问题,根据log显示应该是什么所谓的不平横问题,先前也没有仔细研究这个问题,只是定位到是enable_irq函数调用所致. 因为在项目中使用的中断是gpi ...
- STM32的:外部中断线EXTIN和外部中断向量EXTIN_IRQn和中断服务程序入口EXTIN_IRQHandler详解
一:硬件情况:采用PA11管脚 需要明确的是,PxN管脚共用外部中断线EXTIN和外部中断向量EXTIN_IRQn和中断服务程序入口EXTIN_IRQHandler,但是需要注意的是[9...5]共用 ...
- ARM(IMX6U)ARM Cortex-A7中断系统(GPIO按键中断驱动蜂鸣器)
参考:Linux之ARM Cortex-A7 中断系统详解 作者:一只青木呀 发布时间: 2020-09-16 16:07:22 网址:https://blog.csdn.net/weixin_453 ...
- STM32震动感应控制继电器(使用循环VS使用外部中断EXTI和中断控制器NVIC)
参考:stm32的外部中断 震动感应 控制 继电器 作者:点灯小哥 发布时间: 2021-03-05 22:37:01 网址:https://blog.csdn.net/weixin_46016743 ...
- 树莓派移植SX1278 LoRa通信--使用wiringPi 移植GPIO中断
一.SX1278 数字接口状态映射 从官方文档可知sx1278的数字接口状态映射明细,移植的代码中主要用查询的方式来判断在连续模式下是否接收和发送完成,因此只需要用到DIO0.如果要用到CAD,则需要 ...
- 将5350 i2c clk设置为gpio 中断模式的方法
5350和我之前用的三星和全志的芯片在中断这块有点差别,三星和全志的都是有专门的外部中断管脚,并且每个中断管脚对应一个中断号,对管脚寄存器的配置即irq_desc里chip变量,都是bsp里自带的,我 ...
- IMX6ULL学习笔记(18)——GPIO中断
一.中断简介 相比 STM32 的 NVIC,IMX6ULL 的中断控制系统更复杂,它的中断管理器使用的是 GIC V2,GIC V2 的实现方式与我们熟知的 NVIC 差别较大. 1.1 GIC G ...
- stm32l4 外部中断按键会卡死_【stm32f407】外部中断实现按键中断方式
一.外部中断 STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处.STM32F407的中断控制器支持22个外部中断/事件请求.每个中断设有状态位,每个中断/事件都 ...
最新文章
- 4个做管理后才知道的秘密
- AspectJ对AOP的实现
- 微软部分服务已迁移至中国本地服务器
- mysql 列序号,在mysql中使用列号而不是名称进行选择
- Redis(案例二:高并发商品首页热点数据开发实战)
- htt://3g.hn_根据我对“询问HN:谁在招聘?”的分析,开发人员技能发展趋势
- DtCms.ActionLabel.Article.cs
- linux系统安装升级win10双系统,Win10 安装Linux ubuntu-18.04双系统(安装指南)
- 【Android】1.1 开发环境安装和配置
- 6.3 API : XGBoost
- 市面上好用的 Markdown 编辑器,我给你整理好了
- 【leetcode】力扣算法:杨辉三角 java语言解题
- oracle里round函数补0,Oracle的Round函数
- Windows10如何在文件夹打开DOS命令窗口
- 人生感悟经典哲理句子,句句都是人生哲理!
- CentOS7常用工具包安装
- 博弈论--取石子游戏
- ios7 UITableView底线右移
- 贪吃蛇小游戏编写心得
- 近十年量化交易领域最重要的十本参考书是哪些