S3C2440外部中断之按键中断

发布者:asdfrewqpp最新更新时间:2016-08-14 来源: eefocus关键字:S3C2440  外部中断  按键中断 手机看文章 扫描二维码
随时随地手机看文章
要做2440的中断实验。首先要了解ARM的中断体系结构。ARM体系CPU有七种工作模式。分别是:

用户模式(usr):ARM处理器正常程序执行状态。

快速中断模式(fiq):用于高速数据传输或通道处理。

中断模式(irq):用于通用的中断处理。

管理模式(svc):操作系统使用的保护模式。

数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。

系统模式(sys):运行具有特权的操作系统任务。

未定义指令终止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

此外,ARM体系的CPU有两种工作状态,分别是:ARM状态、Thumb状态。

实际上,CPU一上电就工作在ARM状态,所以我们不必关心CPU工作状态。

 

每一种工作模式对应相应的寄存器,这里就不详细说了。可以自己查阅相关资料。

CPU处理不预期事件有以下两种方法:

1.查询方式:程序循环的查询各个设备的状态并作出相应的反应。

2.当某些事件发生时,硬件会设置某个寄存器;CPU在每执行完一个指令时,通过硬件查看这个寄存器,如果发现所关注的事件发生了,则中断当前程序流程,跳转到一个固定的地址处理这件事,最后返回继续执行被中断的程序。

 

我们来看一个中断处理框图:

S3C2440外部中断之按键中断 - 成 - 学海泛舟
可以看出带子中断的要比不带子中断的处理过程多两个寄存器。这里面涉及到的寄存器就要看s3c2440的芯片手册了。
我们再来看一张图,来了解各个寄存器的关系。
 
S3C2440外部中断之按键中断 - 成 - 学海泛舟
 
现在来看一下2440外部中断的引脚
S3C2440外部中断之按键中断 - 成 - 学海泛舟
I/O引脚F脚与外部中断引脚EINT复用引脚。
 现在结合代码来说明中断处理过程。

#include "2440addr.h"
 #define U32 unsigned int
 
static void __irq Key1_ISR(void)   //EINT3
{
 int led;
 rSRCPND = rSRCPND | (0x1<<3);//EINT1开中断请求  EINT3位置一
 rINTPND = rINTPND | (0x1<<3);//经过仲裁器选出优先级高的中断后,这个中断在INTPND寄存器中相应位置一
 led = rGPBDAT & (0x1<<6);
 if (led ==0)
  rGPBDAT = rGPBDAT | (0x1<<6);//原本是亮的,熄灭
 else
  rGPBDAT = rGPBDAT & ~(0x1<<6);//原本是灭的,点亮
}
 
static void __irq Key2_ISR(void)   //EINT4
{
 int led;
 rSRCPND = rSRCPND | (0x1<<4);
 rINTPND = rINTPND | (0x1<<4);
 if(rEINTPEND&(1<<4))
 {
  rEINTPEND = rEINTPEND | (0x1<<4);
  led = rGPBDAT & (0x1<<5);
  if (led ==0)
   rGPBDAT = rGPBDAT | (0x1<<5);
  else
   rGPBDAT = rGPBDAT & ~(0x1<<5);
 }
}
 
static void __irq Key3_ISR(void)   //EINT2
{
 int led;
 rSRCPND = rSRCPND | (0x1<<2);
 rINTPND = rINTPND | (0x1<<2);
 led = rGPBDAT & (0x1<<8);
 if (led ==0)
  rGPBDAT = rGPBDAT | (0x1<<8);
 else
  rGPBDAT = rGPBDAT & ~(0x1<<8);
}
 
void __irq Key4_ISR(void)   //EINT0
{
 int led;
 rSRCPND = rSRCPND | 0x1;
 rINTPND = rINTPND | 0x1;
 led = rGPBDAT & (0x1<<10);
 if (led ==0)
  rGPBDAT = rGPBDAT | (0x1<<10);
 else
  rGPBDAT = rGPBDAT & ~(0x1<<10);
}
 
void Main(void)
{
 int light;
 
    rGPBCON = 0x155550;//0000 0001 0101 0101 0101 0000
       rGPBUP = 0x7ff;//上拉无效
       rGPFCON = 0xaaaa;//1010 1010 1010 1010 GPF管脚均设为中断模式
   
       rSRCPND = 0x1d;//0001 1101  EINT0、2、3、4_7开
       rINTMSK = ~0x1d;//屏蔽关
       rINTPND =0x1d;
       rEINTPEND = (1<<4);
       rEINTMASK = ~(1<<4);
       rEXTINT0 = 0x22222;//0010 0010 0010 0010 0010 设计触发方式  均设为下降沿
   
       light = 0x0;
       rGPBDAT = ~light;
       
       pISR_EINT0 = (U32)Key4_ISR;
       pISR_EINT3 = (U32)Key1_ISR;
       pISR_EINT2 = (U32)Key3_ISR;
       pISR_EINT4_7 = (U32)Key2_ISR;
      
       while(1)
      ; 
}
//******************************************************************************/

SRCPND/INPND设置要保持一致,负责哪些中断的开关。INTMSK是总的中断屏蔽。EINTPEND/EINTMASK只有外部中断EINT4-EINT23需要设置,在EXTINT0寄存器中设置触发方式。

 

 

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

 

 pISR_EINT0-pISR_EINT4_7 定义的是中断向量入口地址,在2440addr.h文件中。如图:

S3C2440外部中断之按键中断 - 成 - 学海泛舟

关键字:S3C2440  外部中断  按键中断 引用地址:S3C2440外部中断之按键中断

上一篇:系统时钟和定时器——PWM定时器
下一篇:U-Boot 在44B0X 开发板上的移植以及代码分析

推荐阅读最新更新时间:2024-03-16 15:04

S3C2440学习二(基础资源的使用)
虽然有种流水账的感觉,但是这是学习的必经之路,等我渗透ARM三次后,我再全面处理问题,给出最简洁最直接的答案吧。 ①ARM有多少个通用寄存器,有什么用?(让我们一个一个记录) 通用寄存器 通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。通用寄存器的长度取决于 机器字长 ,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。   16位cpu通用寄存器共有 8 个:AX,BX,CX,DX,BP,SP,SI,DI.   八个寄存器都可以作为普通的 数据寄存器 使用。   但有的有特殊的用途:AX为 累加器 ,CX
[单片机]
S3C2440存储器SDRAM控制笔记
最近一年多的时间一直在从事任意轮系机器人运动控制及惯性导航的研究实践,买的开发板闲置了一年多了,决定继续延续一年多前的学习,继续做笔记。 SDRAM读写操作流程 Cpu发出nGCS6信号,选中bank7,对应开发板nSCS引脚,引脚标号19 SDRAM芯片行地址使用13根地址线,列地址复用行地址9根地址线,同时还有两根地址线用于芯片内部逻辑块选择,每个芯片输出16bit数据,由两个芯片并联输出32位到cpu数据总线上,所以内存大小为2^(13+9+2)*4 = 64Mbyte 由于cpu始终以32位的宽度读取SDRAM,所以cpu读SDRAM地址低2位始终为0,所以原理图cpu的地址线addr0和addr1并未接到SDRAM上
[单片机]
51单片机外部中断+串行口中断
新搭了一个系统,用线激光进行实时三维重建,不用每次都判断位置开始拍照,加了两个接近开关,当步进电机向某一方向运行时,利用两个传感器确定需要拍照的时刻,同时通过串行口向电脑发送一个字符,电脑收到这个字符开始拍照。今天先把keil端的程序弄上来,有时间再把串口通信的程序写一写。程序已经通过运行,如图所示: 利用串口调试工具试了一下完全可以,程序的思路大概就是设置了两个状态标志位flag0和flag1,当通过接近开关1时,p3.2出现下降沿,此时设置flag0=1,当通过接近开关2时,p3.3出现下降沿,此时进入外部中断1,如果满足flag0=1,就设置flag1=1,如果flag1=1,则向串口发送一串字符即可。当然这其中还需要相
[单片机]
S3C2440汇编点灯
如何点灯 步骤如下 1、看原理图确定控制LED的引脚 2、看主芯片手册确定如何设置/控制引脚 这里JZ2440的芯片,就是S3C2440 3、写程序 主芯片引脚输出高电平或低电平就可以改变LED状态 我们不关心GPIO引脚输出的逻辑电压,只关心高电平或低电平 主芯片输出的两种情况 第一种 此时主芯片 输出3.3V电压,点亮LED 输出0V电压,熄灭LED 第二种 此时主芯片 输出0V电压,点亮LED 输出3.3V电压,熄灭LED 引脚驱动能力不足的情况 有可能有的引脚能够发出的最大电流不能够点亮LED 这时候就需要我们来改进这个电路—— 使用三极管 有可能芯片只能输出1.2V,但足以使得三极
[单片机]
<font color='red'>S3C2440</font>汇编点灯
第17章 EXTI外部中断/事件控制器—零死角玩转STM32-F429系列
本章参考资料:《STM32F4xx中文参考手册》系统配置控制器以及中断和事件章节。 上一章节我们已经详细介绍了NVIC,对STM32F4xx中断管理系统有个全局的了解,我们这章的内容是NVIC的实例应用,也是STM32F4xx控制器非常重要的一个资源。学习本章时,配合《STM32F4xx中文参考手册》系统配置控制器以及中断和事件章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。 特别说明,本书内容是以STM32F42xxx系列控制器资源讲解。 17.1 EXTI简介 外部中断/事件控制器(EXTI)管理了控制器的23个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测
[单片机]
第17章 <font color='red'>EXTI</font>—<font color='red'>外部中断</font>/事件控制器—零死角玩转STM32-F429系列
STM32-自学笔记(14.NVIC和外部中断,程序用到的库函数介绍)
1.GPIO_EXTILineConfig 函数原型:void GPIO_EXTILineConfig(u8 GPIO_PortSource,u8 GPIO_PinSource) 功能:选择GPIO引脚用作外部中断线路 参数: GPIO_PortSource:选择用作外部中断源的GPIO端口 GPIO_PinSource:待设置的外部中断引脚。该参数可以取GPIO_PinSourcex(x可以是0~15) 返回值:无 参数:GPIO_PortSource GPIO_PortSourceGPIOA 选择GPIOA GPIO_PortSourceGPIOB 选择GPIOB GPIO_Port
[单片机]
STM32-自学笔记(14.NVIC和<font color='red'>外部中断</font>,程序用到的库函数介绍)
LPC1768之外部中断
/************************************************************************************* * main.c: the main file * NXP -- LPC1768 * * * Author : light * Date : 2012-4-22 * * Email : lightwu@hotmail.com ************************************************************************************
[单片机]
从LCD电极读数的单片机接口技术
   摘要 以测量仪表中常见的时分割驱动法驱动的段式LCD显示器为例,分析LCD显示器的电极连接结构和驱动信号波形;介绍单片机读取仪表LCD读数的接口电路。此接口电路应用于笔者开发的自动血压监控仪的研制及临床应用项目中,由8031单片机读取血压计的收缩压、舒张压、心率以及充气和放气时瞬时压强。实验证明,此接口电路工作稳定、可靠。    关键词 LCD电极 读数 时分割驱动法 接口设计   通过测量仪表拾取被测信号是单片机前向通道设计中常用的数据采集方式。通常,接口电路从仪表电路中取得相关的模拟信号,经过A/D转换或V/F 转换送入单片机;或者取得一个频率信号,经整形后送入单片机 。然而,有些测量仪表电路中可能找不到这样的信号。
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved