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的外部中断使用的更多相关文章

  1. STM32f103之外部中断

    一.背景 有个需求,IO口检测上升沿,然后做相应的动作.在此记录STM32F103的外部中断结构及配置方法, 以备下次快速上手使用. 有许多不太明白,又是老司机(:-D)帮忙,真的是站在别人的肩膀上会 ...

  2. STM32之EXTI——外部中断

    互联网的广大网友,大家早上中午晚上好.EXTI...故名思义..EX表外,出..I表示Intrrupt..所以合起来就是外部中断...说到这..我觉得我最近的六级水平(背单词)又进了一步,稍微自夸了下 ...

  3. 转别人的 STM32外部中断使用注意事项

    前言:这些问题都是我之前在工作中遇到的,后来觉得需要总结,自己记忆不好,所以在这个给自己打个mark. 一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 ST ...

  4. STM32外部中断初理解

    PA0,PB0...PG0--->EXTI0 PA1,PB1...PG1--->EXTI1 ....... PA15,PB15...PG15--->EXTI15 以上为GPIO和中断 ...

  5. STM32——外部中断EXIT实现

    外部中断实现步骤: 一.初始化,包括:1.AFIO时钟中断和GPIO时钟使能:                          2.GPIO初始化                           ...

  6. STM32 GPIO外部中断总结

    一.STM32中断分组: STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处.STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB ...

  7. 向linux内核中添加外部中断驱动模块

    本文主要介绍外部中断驱动模块的编写,包括:1.linux模块的框架及混杂设备的注册.卸载.操作函数集.2.中断的申请及释放.3.等待队列的使用.4.工作队列的使用.5.定时器的使用.6.向linux内 ...

  8. STM32学习笔记(九) 外部中断,待机模式和事件唤醒

    学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...

  9. stm32学习笔记——外部中断的使用

    stm32学习笔记——外部中断的使用 基本概念 stm32中,每一个GPIO都可以触发一个外部中断,但是,GPIO的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一个.比如说,PA0,PB0 ...

随机推荐

  1. Android抽屉(SlidingDrawer --类似android通知栏下拉效果)

    Android抽屉(SlidingDrawer)的实现发 - 红黑联盟http://www.2cto.com/kf/201301/182507.html 可动态布局的Android抽屉之基础http: ...

  2. CDockablePane 记忆界面布局的问题

    CWinAppEx类的LoadCustomState()和SaveCustomState()用于向注册表读取和保存应用程序的界面信息,重载该方法可以取消自动记忆界面布局. void CxxxApp:: ...

  3. C 汇编代码 函数调用指令和栈平衡

    1. CALL指令: CALL指令可不是如唤指令,而是子程序调用指令.那么汇编语言中的子程序是什么呢?子程序能被其它程序调用,在实现某种功能后能自动返回到调用程序去的程序.其最后一条指令一定是返回指令 ...

  4. hbase建索引的两种方式

    转载自http://blog.csdn.net/ryantotti/article/details/13295325 在二级索引的实现技术上一般有几个方案: 1.      表索引 使用单独的hbas ...

  5. java基本输入类型数据System.out.println()或System.out.print()

  6. std::function 测试

    #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" typedef ...

  7. hadoop工作流引擎之azkaban

    Azkaban是twitter出的一个任务调度系统,操作比Oozie要简单很多而且非常直观,提供的功能比较简单.Azkaban以Flow为执行单元进行定时调度,Flow就是预定义好的由一个或多个可存在 ...

  8. AngularJS 基础用法

    判断语句: <li ng-repeat=”person in persons”> <span ng-switch on=”person.sex”> <span ng-sw ...

  9. Node.js学习 - File Operation

    同步异步 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync(). 异步的方法函数最后一个参数为 ...

  10. 【转】你必须了解的Session的本质

    有一点我们必须承认,大多数web应用程序都离不开session的使用.这篇文章将会结合php以及http协议来分析如何建立一个安全的会话管理机制.我们先简单的了解一些http的知识,从而理解该协议的无 ...