Cortex-M3学习日志(三)-- 外部中断0
无论是哪款单片机应该都有对应的中断的功能,中断在嵌入式系统的地位毋庸置疑。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的更多相关文章
- stm32和cortex M3学习内核简单总结
1.stm32综述 2.寄存器组 3.操作模式和特权级别 4.存储器映射 5.中断和异常 6.其他 Stm32综述 这可以说是我第一款认真学习的单片机了,学完这个就要开启我通往arm9的大门了,接下来 ...
- stm32寄存器版学习笔记03 外部中断
stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...
- STM32学习笔记(九) 外部中断,待机模式和事件唤醒
学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...
- spring学习日志三
一.回顾 1.1 依赖注入的方式. set方法来注入 <property name="属性名" /> 构造方法来注入<construtor-arg index=& ...
- C#学习笔记三: C#2.0泛型 可控类型 匿名方法和迭代器
前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...
- Servlet3.0学习总结(三)——基于Servlet3.0的文件上传
在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...
- springmvc学习日志三
一.文件的上传 1.首先在lib中添加相应的jar包 2.建立jsp页面,表单必须是post提交,编码必须是multipart/form-data,文件上传文本框必须起名 <body> & ...
- ATmega8仿真——外部中断的学习
前面我们学习了ATmega8的I/O口作为通用数字输入/输出口来用时对LED数码管控制和扫描按键的应用: 但ATmega8多数的I/O口都是复用口,除了作为通用数字I/O使用,还有其第二功能,这里我们 ...
- (stm32f103学习总结)—stm32外部中断
一.外部中断介绍 1.1 EXTI简介 EXTI简介 STM32F10x外部中断/事件控制器(EXTI)包含多达 20 个用于产生事 件/中断请求的边沿检测器.EXTI的每根输入线都可单独进行配置,以 ...
随机推荐
- C++<algorithm>中sort的比较函数写法(转)
转自:http://www.wl566.com/biancheng/98907.html C++<algorithm>中sort的比较函数写法,有需要的朋友可以参考下. 定义排序函数: 方 ...
- strcpy, mencpy, memmove三者区别
首先来看strcpy,目的是实现字符串的复制,这里需要注意几个点: 1.判断指针的有效性 2.将复制后的指针地址返回,为了支持链式操作 3.不要忘记将字符串最后一个自负'\0'复制给dest 4.注意 ...
- mysql 更新 语句中 的 safe_mode
在mysql5中,可以设置safe mode,比如在一个更新语句中UPDATE table_name SET bDeleted=0;执行时会错误,报:You are using safe update ...
- jQuery无缝滚动向上
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- sqlmap的详细使用
各项参数讲的太仔细了,对于只会几个参数的我来说,太受用了. 先mark下 http://drops.wooyun.org/tips/143 http://drops.wooyun.org/tips/4 ...
- 如何使用getopt()函数解析参数
最近在写程序的过程中,把一部分时间都花费在程序对参数的处理上.今天听了学长说到getopt函数,才发现原来c里面还有一个专门解决参数处理的函数,查询了相关资料,这里简单总结一下. 使用int main ...
- 了解单位em和px的区别
这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章,题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与em之间的关系和特点,看过以后确实收获很大.平时都是用p ...
- J2SE知识点摘记(二)
1. 对象的声明 "类名 对象名 = new 类名();"例子:Person P;//先声明一个Person类的对象p p=new Person();//用new关键字实例化 ...
- RMSE、RMS、标准差
1.均方根误差,它是观测值与真值偏差的平方和观测次数n比值的平方根,在实际测量中,观测次数n总是有限的,真值只能用最可信赖(最佳)值来代替.方根误差对一组测量中的特大或特小误差反映非常敏感,所以,均方 ...
- C# 单向链表数据结构 (一)
单向链表数据结构是有节点组成,每个节点包含两部分,第一部分为存储数据,第二部分为指向下一个节点的指针.注意,有两个特色的节点,分别为“头节点”和“尾节点”,头节点本身没有数据,只存储下一个节点的指针, ...