无论是哪款单片机应该都有对应的中断的功能,中断在嵌入式系统的地位毋庸置疑。LPC1768微处理器包括4个外部中断,分别是EINT0、EINT1、EINT2、EINT3对应的引脚分别是P2.10~P2.13,这几个引脚也可以作为通用IO口使用。名个外部中断可以设置成低电平/高电平或上升沿/下降沿有效,它们还有一个功能就是可用于将处理器从睡眠、深度睡眠或掉电模式中唤醒。涉及到外部中断的寄存器主要有以下几个:

寄存器名称

描述

功能

默认值

EXTINT

外部中断标志寄存器

设置或查看中断标志

0x00

EXTMODE

外部中断模式寄存器

设置电平触发或边沿触发

0x00

EXTPOLAR

外部中断极性寄存器

设置为高/低电平或上升/下降沿触发

0x00

PINSEL4

引脚功能选择寄存器

选择P2引脚的功能

0x00

因为实验选用中断方式而非查询方式来测试中断,因中P2.10口接有一个按键,所以就用这个按键来作个简单的中断实验,由于是选用的是下降沿触发,所以还涉及一个寄存器:IO2IntEnF这个寄存器的功能是使能P2口的下降沿中断功能。因为只是实验,所以电路很简单,还是使用的前两次用的电路图,如下所示:


图1-1 LED指示电路

还有一个电路,其实就是在P2.10口上接了一个轻工触按键,以触发外部中断,这里就不上图了。好了,由于实验内容简单,下面给出中断程序,关于主程序有兴趣的话可以参看附件中的,里面有完整的Real MDK4.10建立的工程工件:

/*********************************************************************************
 文件名称:extint.c
 功    能: LPC1768的外部中断函数
 编译环境: MDKV4.12
 时    钟: 外部12Mhz
 日    期: 11/08/18
 作    者: 懒猫爱飞
 备    注:NULL
 ---------------------------------------------------------------------------------
 修改内容:NULL
 修改日期:XXXX年xx月xx日      xx时xx分
 修改人员:xxx xxx xxx

**********************************************************************************/
#include "includes.h"

;   // 初始化时第一个灯亮

/********************************************************************************
 * 函数名称 :void EINT0_IRQHandler (void)
 * 函数功能 : 外部中断0函数入口
 * 入口参数 : 无
 * 出口参数 : 无
 * 备    注 :无
 *******************************************************************************/
void EINT0_IRQHandler (void)
{
  SC -> EXTINT = EINT0;        /* 清中断 */

  )
  {
      : Led1Neg();     /* LED1状态取反 */
            break;
      : Led2Neg();       /* LED2状态取反 */
            break;
      : Led3Neg();     /* LED3状态取反 */
            break;
      : Led4Neg();     /* LED4状态取反 */
            break;
      : Led5Neg();     /* LED5状态取反 */
            break;
      : Led6Neg();     /* LED6状态取反 */
            break;
      : Led7Neg();     /* LED7状态取反 */
            break;
      : Led8Neg();     /* LED8状态取反 */
            break;
    default:break;
  } 

   eint0_counter++;           /* 计数值加1 */

}

/********************************************************************************
 * 函数名称 :uint32_t EINTInit( void )
 * 函数功能 : 外部中断0初始化函数
 * 入口参数 : 无
 * 出口参数 : 返回TURE或FALSE
 * 备    注 :如果是返回false则说明中断入口函数没有在中断向量表中建立
 *******************************************************************************/
uint32_t EINTInit( void )
{

  PINCON -> PINSEL4 = 0x00100000;    /* 将P2.10脚设置为EINT0即第二功能 */
  GPIOINT -> IO2IntEnF = 0x200;        /* 设置为下降沿触发 */

  SC -> EXTMODE = EINT0_EDGE;        /* 外部中断模式选择为边沿触发 */
  SC -> EXTPOLAR = ;     /* 外部中断1极性设置,此处选默认的低电平或下降沿 */

  NVIC_EnableIRQ(EINT0_IRQn);      /* 使能外部中断0 */ 

  return( TRUE );
}

/******************************************************************************
**                            End Of File
******************************************************************************/
 /*********************************************************************************
 工程名称:lesson2
 功    能: 学习使用LPC1768的外部中断0
 编译环境: MDKV4.12
 时    钟: 外部12Mhz
 日    期: 11/08/18
 作    者: 懒猫爱飞
 版本  号:V1R0
 ---------------------------------------------------------------------------------
 修改内容:NULL
 修改日期:
 修改人员:
 ---------------------------------------------------------------------------------

**********************************************************************************/

/*********************************************************************************
 文件名称:mian.c
 功    能: 主要调度函数及应用函数
 编译环境: MDKV4.12
 时    钟: 外部12Mhz
 日    期: 11/08/18
 作    者: 懒猫爱飞
 备    注:NULL
 ---------------------------------------------------------------------------------
 修改内容:NULL
 修改日期:XXXX年xx月xx日      xx时xx分
 修改人员:xxx xxx xxx

**********************************************************************************/
#include"includes.h"

/********************************************************************************
 * 函数名称 :void PortInit(void)
 * 函数功能 : 端口初始化
 * 入口参数 : 无
 * 出口参数 : 无
 * 备    注 :无
 *******************************************************************************/
void PortInit(void)
{
   GPIO1->FIODIR = 0xB0000000;           /* LEDs on PORT1 defined as Output    */
   GPIO2->FIODIR = 0x0000007C;           /* LEDs on PORT2 defined as Output    */
   LedAllOff();                             /* 初始化时熄灭所有的灯 */
}

/********************************************************************************
 * 函数名称 :int main(void)
 * 函数功能 : 主函数
 * 入口参数 : 无
 * 出口参数 : 无
 * 备    注 :无
 *******************************************************************************/
int main(void)
{
    SystemInit();     /* 系统初始化,函数在system_LPC17xx.c文件夹中定义 */
                                                /* 在core_cm3.h中定义*/
    PortInit();       /* 端口初始化 */
    EINTInit();
    );

}

这个程序只有两个函数,一个是中断处理函数,没有什么不好理解,在这里不总结,关于中断初始化函数,前面都是设置相关的中断寄存器的,关于寄存器是怎么设置的可以看一下LPC1768的手册,上面都有详细的说明,在这里不再码字总结。关于void NVIC_EnableIRQ(IRQn_Type IRQn)这个函数,它在core_cm3.h中有定义,其实就是设置中断使能寄存器ISER,从名字就可以看出来了,它的功能就是使能中断。这次外部中断没有用查询的方式,查询方式的原理就是设置好中断,使能中断,然后主程序一直查询中断位是否有中断,然后再执行相应的措施。相对来说查询方式比较消耗软件系统资源,但程序也不是太难,关于其它几个外部中断与此类似。

Cortex-M3学习日志(三)-- 外部中断0的更多相关文章

  1. stm32和cortex M3学习内核简单总结

    1.stm32综述 2.寄存器组 3.操作模式和特权级别 4.存储器映射 5.中断和异常 6.其他 Stm32综述 这可以说是我第一款认真学习的单片机了,学完这个就要开启我通往arm9的大门了,接下来 ...

  2. stm32寄存器版学习笔记03 外部中断

    stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...

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

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

  4. spring学习日志三

    一.回顾 1.1 依赖注入的方式. set方法来注入 <property name="属性名" /> 构造方法来注入<construtor-arg index=& ...

  5. C#学习笔记三: C#2.0泛型 可控类型 匿名方法和迭代器

    前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...

  6. Servlet3.0学习总结(三)——基于Servlet3.0的文件上传

    在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...

  7. springmvc学习日志三

    一.文件的上传 1.首先在lib中添加相应的jar包 2.建立jsp页面,表单必须是post提交,编码必须是multipart/form-data,文件上传文本框必须起名 <body> & ...

  8. ATmega8仿真——外部中断的学习

    前面我们学习了ATmega8的I/O口作为通用数字输入/输出口来用时对LED数码管控制和扫描按键的应用: 但ATmega8多数的I/O口都是复用口,除了作为通用数字I/O使用,还有其第二功能,这里我们 ...

  9. (stm32f103学习总结)—stm32外部中断

    一.外部中断介绍 1.1 EXTI简介 EXTI简介 STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事 件/中断请求的边沿检测器.EXTI的每根输入线都可单独进行配置,以 ...

随机推荐

  1. mysql学习(五)-字段属性

    字段属性: unsigned: 无符号类型,只能修饰数值类型: create table if not exists t1(id int unsigned); zerofill:前端填0 //只能修饰 ...

  2. Python成长之路第一篇(4)_if,for,while条件语句

    有了以上的基本基础,已经上面写的几个小练习,大家肯定有很多的不满,比如查询为什么查询一次就退出了呢?下面我们来学习条件语句 一.万恶的加号 以前我们在print的时候如果要加上变量都有是使用+来作为连 ...

  3. Android07-Android广播

    ¨广播机制简介 ¨动态和静态注册广播 ¨接收系统广播 ¨自定义广播 ¨本地广播   n广播是一种系统级的事件(Event). n当系统发生某些事件时(例如,收到短信.来电.电量低),就会向整个Andr ...

  4. 转: JavaScript函数式编程(二)

    转: JavaScript函数式编程(二) 作者: Stark伟 上一篇文章里我们提到了纯函数的概念,所谓的纯函数就是,对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环 ...

  5. C#内存操作

    原文:[转]C#内存操作 最近闲来无事发现周围的朋友都在玩<植物大战僵尸>的游戏!于是动了制作这游戏工具的念头!虽然在网上同类工具很多 但是用C#写的我几乎看不到!所以我想用C#写一个!  ...

  6. magento 获取attribute的所有option

    $attribute = Mage::getSingleton('eav/config')->getAttribute('catalog_product', 'color');if ($attr ...

  7. [置顶] 【IOS】IOS7 UI适配

    昨天下了把手机升级成了IOS7 正式版,然后下了最新的xocde5.  试着编译了一下刚刚完成的几个应用,还好问题不大,半个小时的时间都适配好了,然后改了下几个新出现的warning.过几天等空了,要 ...

  8. java中文乱码解决之道(一)—–认识字符集

    原文出处:http://cmsblogs.com/?p=1395 沉寂了许久(大概有三个多月了吧),LZ“按捺不住”开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要 ...

  9. Semantic UI基础使用教程

    自己今后要使用Semantic UI进行项目开发了,一步步的记录下来,供大家参考,也让自己去简单的学习一下,有空了就会更新一点东西,大家有什么问题可以相互交流一下,文采不是很好,希望大家要多多见谅,这 ...

  10. 动态设置 GridView 列宽

    /// <summary>        /// 设置简单评语列的宽度        /// </summary>        /// <param name=&quo ...