LPC2478外部中断
2478的外部中断模型如下
也就是说,port0和2支持外部中断,EINT0-2是三个独立管脚的中断,而EINT3则是port0和2的所有中断共同拥有的向量
对于port0和2不需要刻意去把引脚配置为中断模式,将他配置到输入模式然后启动中断就可以了,对于独立的中断,配置过程如下
1. 将对应的引脚配置为EINT模式
2. mode按照自己的需求设置上拉或者下拉
3. 在系统控制寄存器中对中断模式和中断极性进行配置
4. 配置中端,配种中断函数,优先级,使能中断等
对于PORT0 与PORT2的中断,其实使用差不多,主要是EINT3的配置
1. IO口功能选择GPIO
2. 使能管脚的GPIO中断
3. 接下来配置好eint3中断就可以使用了
中断处理的时候,对于eint0-2可以直接处理,对于eint3中的port0和port2中断要进行一次判断,依靠以下三个寄存器
从这三个寄存器可以看到每个引脚的中断状态,从而选择正确的处理方式
具体查看代码即可
#ifndef __EXTI_H_
#define __EXTI_H_
#include "common.h"
#include "lpc24xx.h"
extern u8 eint0Count;
extern u8 eint3Count;
void ExtiInit(void);
void GPIOEINT3Init(void);
#endif
#include "exti.h"
u8 eint0Count = 0;
u8 eint3Count = 0;
void __irq EINT0_Handler(void)
{
IENABLE; /* handles nested interrupt */
EXTINT |= (1<<0); //清除中断
//do somethinghere
eint0Count = 1;
IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}
void __irq EINT3_Handler(void)
{
IENABLE; /* handles nested interrupt */
//do somethinghere
if((IO_INT_STAT&(1<<0)) == 1)//port0 中断
{
if((IO0_INT_STAT_F&(1<<10)) != 0)//确定P0.10上出现中断
{
eint3Count = 1;
IO0_INT_CLR |= (1<<10);
}
}
EXTINT |= (1<<3); //清除中断
IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}
//用exti0做例子
void ExtiInit(void)
{
PINSEL4 &= ~(3<<20);//配置为中断
PINSEL4 |= (1<<20);
PINMODE4 &= ~(3<<20);//配置上拉电阻
EXTMODE |= (1<<0);//边沿触发
//
EXTPOLAR |= (1<<0);//上升沿触发
//中断向量配置
VICSoftIntClr |= (1<<14);//清除软件中断,eint0中断源为14 0开始
VICIntEnClr |= (1<<14);//禁止中断
VICIntSelect &= (1<<14);//选择为IRQ中断
VICVectAddr14 = (unsigned)EINT0_Handler;//连接中断向量
VICVectPriority14 = 0x01;//中断优先级寄存器
VICIntEnable |= (1<<14);//中断向量使能有效
}
//用p0.10做例子
void GPIOEINT3Init(void)
{
PINSEL0 &= ~(3<<20);//选择普通IO功能
PINMODE0 &= ~(3<<20);//选择上拉
IO0_INT_EN_F |= (1<<10);//下降沿中断使能
EXTMODE |= (1<<3);//边沿触发
EXTPOLAR &= ~(1<<3);//下降沿触发
//中断向量配置
VICSoftIntClr |= (1<<17);//清除软件中断,eint3中断源为17 0开始
VICIntEnClr |= (1<<17);//禁止中断
VICIntSelect &= (1<<17);//选择为IRQ中断
VICVectAddr17 = (unsigned)EINT3_Handler;//连接中断向量
VICVectPriority17 = 0x01;//中断优先级寄存器
VICIntEnable |= (1<<17);//中断向量使能有效
}
在外部中断处理程序中,记得先清除对应的IO口中断
然后再清除EINT0中断,不能先清除EINT再清除IO口中断(这会导致重复中断)
关键字:LPC2478 外部中断
引用地址:
LPC2478的外部中断使用
推荐阅读最新更新时间:2024-03-16 15:30
Wince外部中断控制LED详解动态申请
本实例是基于S3C2440,WINCE5.0 1.中断分两大类:内部中断和外部中断。 外部中断:由外部设备所引发的中断,这些外部中断都是通过GPIO中的中断引脚产生的。S3C2440有24个外部中断,相关的寄存器如下: EXTINT0-EXTINT2:三个寄存器设定EINT0-EINT23的触发方式。 EINTFLT0-EINTFLT3:控制滤波时钟和滤波宽度。 EINTPEND:中断挂起寄存器 EINTMASK:中断屏蔽寄存器 内部中断:内部中断是有CPU内部器件产生的中断,如定时器中断,USB中断,UART中断等。相关的寄存器如下:
[单片机]
STM8S---外部中断应用之长按键识别
STM8常用中断指令 开总中断 _asm(“rim”); 禁止中断 _asm(“sim”); 进入停机模式 _asm(“halt”); 中断返回 _asm(“iret”); 等待中断 _asm(“wfi”); 软件中断 _asm(“trap”); STM8S常用中断映射 如使用中断函数时,可以通过在上图中查找相对应的中断向量号,而中断函数的名字可以自定义 /* BASIC INTERRUPT VECTOR TABLE FOR STM8 devices * Copyright (c) 2007 STMicroelectronics */ typedef vo
[单片机]
51单片机按键控制数码管0~9_51单片机外部中断
前面为大家介绍的点亮LED灯、数码管、按键只用到了51单片机的IO资源,我们要是仅仅用单片机点灯、操作数码管,那可真是大才小用了。这些都只是51单片机资源的冰山一角,51单片机还有好多的功能,我后面将为大家一一介绍。今天为大家介绍单片机一个重要的外设——中断。 中断 没接触过单片机的朋友听到这个词肯定很陌生,大家对打断这个词应该不陌生吧,中断字面意思可以理解为中途被打断。大家可以思考一下,什么的中途被什么给打断了呢?想明白了这个问题就说明理解中断了。下面看看百度的解释: 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情 况的程序,处理完毕后又返回原被暂停的程
[单片机]
STM8外部中断不响应
在编写STML152K4的一个简单的按键输入中断时被迷惑了半天,做一个总结帮助后人填坑。 BUG坑现象 void key_init(void) { GPIO_Init(POWER_KEY, GPIO_Mode_In_FL_IT); EXTI_DeInit(); EXTI_SetPinSensitivity(EXTI_Pin_4, EXTI_Trigger_Falling);//下降沿触发 } 上面是一个按键外部中断初始化的代码,看似没什么问题。但是调试时候问题出现了,稍微碰一下按键中断在中断函数里不断进行触发,即使请了外部中断标志位 还是不停触发。通过调试发现需要在按键初始化前先关闭总中断 然后在开
[单片机]
CC2530外部中断控制LED灯开关
实验要求 代码实现 #include ioCC2530.h #define D3 P1_0 #define D4 P1_1 #define D5 P1_3 #define D6 P1_4 //延迟函数 void Delay(unsigned int t) { while(t--); } //端口初始化函数 void Init_Prot() { //配置4个LED灯的引擎 //选择端口的功能 P1SEL &=~0x1B;//设置通用io端口 //配置端口的方向 P1DIR |=0x1B; //关闭LED灯 P1 &=~0x1B; } //外部中断端口1的初始化 void Init_INTP1() {
[单片机]
从LCD电极读数的单片机接口技术
摘要 以测量仪表中常见的时分割驱动法驱动的段式LCD显示器为例,分析LCD显示器的电极连接结构和驱动信号波形;介绍单片机读取仪表LCD读数的接口电路。此接口电路应用于笔者开发的自动血压监控仪的研制及临床应用项目中,由8031单片机读取血压计的收缩压、舒张压、心率以及充气和放气时瞬时压强。实验证明,此接口电路工作稳定、可靠。 关键词 LCD电极 读数 时分割驱动法 接口设计 通过测量仪表拾取被测信号是单片机前向通道设计中常用的数据采集方式。通常,接口电路从仪表电路中取得相关的模拟信号,经过A/D转换或V/F 转换送入单片机;或者取得一个频率信号,经整形后送入单片机 。然而,有些测量仪表电路中可能找不到这样的信号。
[单片机]
8051外部中断0解析
程序实现功能: 在实验板上左下方有一个黑色的独立按键(K3), 当我们按下它时, D1(LED灯)的状态就会取反. 思路分析: 我们令IT0 = 1, 即选择了 边沿触发 , 所以每当独立按键按下时, 中断处理函数EX_INT0()就会执行. 当进入中断处理函数执行时, 若P32引脚的电平为低电平, 则说明K3按键已按下; 若P32引脚的电平为高电平, 说明K3按键已抬起. 低电平触发 和 边沿触发 的区别: ① 低电平触发 是指在电平处于低电平态的时间内触发. ② 边沿触发 是指在电平由高 - 低或由低 - 高的一瞬间触发. 独立按键电路原理图: 抖动的处理: 为什么我们要在中断处理函数
[单片机]
51单片机基础(1) -外部中断
中断的基本概念 中断 CPU与外设并行工作,当外设数据准备好或者有某种突发事件发生时,向CPU提出请求,CPU暂停正在进行的工作,转而为该外设服务(或者是处理紧急事件),处理完毕后再回到原断点继续执行原程序。这个过程称为中断。中断实例图示: 中断可以分为 外部中断 定时器中断 串口中断 中断系统 CPU处理某件事的时候外界发生了紧急事件,要求CPU暂停转而去处理紧急事件,处理完之后回到被中断的地方,继续原来的工作,这个工作过程叫中断,实现这个功能的部件称为中断系统。请示CPU中断的请求源称为中断源。当几个中断源同时申请CPU中断的时候,CPU会根据中断优先级来确定响应哪一个中断,CPU总是根据优先级的高低来解决中断请求。
[单片机]