ARM笔记:外部按键中断程序

发布者:JoyousJourney最新更新时间:2017-11-17 来源: eefocus关键字:ARM笔记  外部按键  中断程序 手机看文章 扫描二维码
随时随地手机看文章

.extern    main
.text
.global    _start
_start:
    
    b    Reset


HandleUndef:
    b    HandleUndef


HandleSWI:    
    b    HandleSWI


HandlePrefetchAbort:
    b    HandlePrefetchAbort


HandleDataAbort:
    b    HandleDataAbort


HandleNotUsed:
    b    HandleNotUsed


    b    HandleIRQ


HandleFIQ:    
    b    HandleFIQ

Reset:
    ldr    sp,=4096        
    bl    disable_watch_dog    
    
    msr    cpsr_c,#0xd2        
    ldr    sp,=3072        
    
    msr    cpsr_c,#0xd3        
    ldr    sp,=4096        
                    
    bl    init_led        
    bl    init_irq        
    msr    cpsr_c,#0x5f        
    
    ldr    lr,=halt_loop        
    ldr    pc,=main        
halt_loop:
    b    halt_loop

HandleIRQ:    
    sub    lr,lr,#4        
    stmdb    sp!,{r0-r12,lr}        
    
    ldr    lr,=int_return        
    ldr    pc,=EINT_Handle        

int_return:
    ldmia    sp!,{r0-r12,pc}^    



#include "s3c2440.h"


#define GPF4_OUT    (1<<(4*2))
#define    GPF5_OUT    (1<<(5*2))
#define GPF6_OUT    (1<<(6*2))

#define GPF4_MSK    (3<<(4*2))
#define GPF5_MSK    (3<<(5*2))
#define GPF6_MSK    (3<<(6*2))


#define GPF0_EINT    (0x2<<(0*2))
#define GPF2_EINT    (0x2<<(2*2))
#define GPG3_EINT    (0x2<<(3*2))
#define GPG11_EINT    (0X2<<(11*2))

#define GPF0_MSK    (3<<(0*2))
#define GPF2_MSK    (3<<(0*2))
#define GPG3_MSK    (3<<(3*2))
#define GPG11_MSK    (3<<(11*2))


void disable_watch_dog(void)
{
    WATCH_DOG=0;    //置0,关闭WATCH
}


void init_led(void)
{
    GPFCON&=~(GPF4_MSK|GPF5_MSK|GPF6_MSK);
    GPFCON|=GPF4_OUT|GPF5_OUT|GPF6_OUT;
}



void init_irq(void)
{
    //GPIO设置为中断引脚
    GPFCON&=~(GPF0_MSK|GPF2_MSK);
    GPFCON|=GPF0_EINT|GPF2_EINT;
   
    GPGCON&=~(GPG3_MSK|GPG11_MSK);
    GPGCON|=GPG3_EINT|GPG11_EINT;
    //EINT8~23要使能
    //使能EINT11,EINTMASK11置0 
    EINTMASK&=(~(1<<11))&(~(1<<19));
   
    PRIORITY=(PRIORITY&((~0x01)|(0x3<<7))|0x0<<7);
   
    //EINT0 、EINT2、EINT8_23使能
    INTMSK&=(~(1<<0))&(~(1<<2))&(~(1<<5));
}


#include "s3c2440.h"

void EINT_Handle(void)
{
    unsigned long oft=INTOFFSET;
    unsigned long val;
   
    switch(oft)
    {
        //S2被按下
        case 0:
        {
            GPFDAT|=(0x7<<4);
            GPFDAT&=~(1<<4);
            break;
        }
        //S3被按下
        case 2:
        {
            GPFDAT|=(0x7<<4);
            GPFDAT&=~(1<<5);
            break;
        }
        //S4被按下
        case 5:
        {
            GPFDAT|=(0x7<<4);    //所有LED为0

            //寄存器为5即位【5】为1时,EINT8~EINT23中至少有一个中断发生呢个,需进读取EINTPEND寄存器判断
            val=EINTPEND;
            if(val&(1<<19))
            {
                GPFDAT|=(0x7<<4);
                GPFDAT&=~(1<<6);   
            }
            if(val&(1<<11))
            {
                GPFDAT|=(0X7<<4);
                GPFDAT&=~((1<<4)|(1<<5)|(1<<6));
            }
            break;
        }
        default:
            break;
    }

    //清除中断
    if(oft==5)
        EINTPEND=(1<<11)|(1<<19);
    SRCPND=1<    INTPND=1<}

int main()
{
    while(1);
    return 0;
}

关键字:ARM笔记  外部按键  中断程序 引用地址:ARM笔记:外部按键中断程序

上一篇:ARM笔记:外部中断
下一篇:ARM笔记: GPIO口LED程序

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

基于PIC单片机引脚中断程序的设计技巧
1 简 述 所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假
[单片机]
基于ARM7软中断程序的设计
1 存储器部分原理 笔者在设计一项目时采用LPC2458。此CPU为ARM7内核,带512K字节的片内FLASH,98k字节的片内RAM,支持片外LOCAL BUS总线,可从片外NOR FLASH启动CPU。由于代码量较大,程序放在片外的NOR FLASH中。且存在片外NOR FLASH在运行程序时,需对片外的NOR FLASH擦写的需求。图1为存储部分框图。 图1 存储部分原理框图 在设计中,片外NOR FLASH的大小为16M字节。其中2M规划为存放运行程序,剩余的空间用于产品运行日志,告警灯存储空间。因此存在着在程序运行时对片外NOR FLASH擦写的需求。如果程序正在正常运行的片外FLASH中去擦写
[单片机]
基于<font color='red'>ARM</font>7软<font color='red'>中断</font><font color='red'>程序</font>的设计
中断服务程序初始化
main.c里面的中断服务程序初始化:void Isr_Init(void); 子函数为:void Isr_Init(void) { pISR_UNDEF=(unsigned)HaltUndef; pISR_SWI =(unsigned)HaltSwi; pISR_PABORT=(unsigned)HaltPabort; pISR_DABORT=(unsigned)HaltDabort; rINTMOD=0x0; // All=IRQ mode rINTMSK=BIT_ALLMSK; // All interrupt is masked. //pISR_URXD0=(unsigned)Uart0_RxInt; /
[单片机]
<font color='red'>中断</font>服务<font color='red'>程序</font>初始化
ARM aarch64汇编学习笔记(三):寄存器概述
ArmV8 寄存器简单概念: ARMv8拥有两种执行模式: AArch64执行A64指令,使用64bit的通用寄存器; AArch32执行A32/T32指令,使用32bit的通用寄存器; 本篇主要描述aarch64执行模式的一些概念 OverView PSTATE不是一个寄存器,是保存当前PE状态的一组寄存器统称,其中可访问寄存器有:PSTATE.{NZCV,DAIF,CurrentEL,SPSel},属于ARMv8新增内容,64bit下代替CPSR 注: 没有名为X31或W31的寄存器。 一些指令被编码了,以使数字31代表零寄存器ZR(WZR / XZR)。 还有一组受限制的指令,其中一个或多个参数被编码,以使数字31
[单片机]
<font color='red'>ARM</font> aarch64汇编学习<font color='red'>笔记</font>(三):寄存器概述
ARM汇编语言学习笔记(二)跑个灯程序以及.s文件分析
一、汇编语言怎么写 我们都知道,c语言可以写成c语言然后编译。那么汇编语言了? 汇编语言用汇编语言写,然后写出来为.s文件。所以我们只需要任意一款可以编写.s文件的编辑器就可以啦,例如:source insight、notepad等。 二、写一个试试 /* * 点亮LED1: gpf4 */ .text .global _start _start: /* 配置GPF4为输出引脚 * 把0x100写到地址0x56000050 */ ldr r1, =0x56000050 ldr r0, =0x100 /* mov r0, #0x100 */ str r0, /* 设置GPF4输出
[单片机]
<font color='red'>ARM</font>汇编语言学习<font color='red'>笔记</font>(二)跑个灯<font color='red'>程序</font>以及.s文件分析
S3C2440 中断程序
CPU 运行过程中,如何知道各类外设发生了某些不预期的事件,比如串口接收到了新数据、USB 接口中插入了设备、按下某个按键等。主要有以下两个方法: 查询方式:程序循环地查询各设备的状态并作出相应反应。它实现简单,常用在功能相对单一的系统中,比如在一个温控系统中可以使用查询方式不断检测温度的变化。确定是占用 CPU 资源过高,不适用于多任务系统。 中断方式:当某事件发生时,硬件会设置某个寄存器; CPU 在每执行完一个指令时,通过硬件查看这个寄存器,如果发现所关注的事件发生了,则中断当前程序流程,跳转到一个固定的地址处理这事件,最后返回执行被中断的程序。它的实现相对复杂,但是效率很高,是常用的办法。 CPU 中断处理的过
[单片机]
arm学习笔记006之redhat5.0的安装定制以及tftp服务器的安装
一、小红帽的安装定制 新建虚拟机时Ethernet要选择Bridged方式; 要定制; 定制中有程序配置的选择:服务器- 老的网络服务器- 可选的软件包- tftp-server-0.42-3.1.i386,如下图 在重新引导中: 防火墙我选的是禁用; SELinux选的是默认的强制,选择“禁用“麻烦,其实在后面配置tftp服务器是查看到的SELinux是disable的 Kdump可以选择”启用“ 设置软件更新:以后注册 注意:这样安装好的小红帽,其中的tftp服务器是不能用的,需要进行下面的配置 在”定制“中没有选择tftp时,小红帽中是没有”/tftpboot“的文件夹路径的
[单片机]
<font color='red'>arm</font>学习<font color='red'>笔记</font>006之redhat5.0的安装定制以及tftp服务器的安装
S3c2440ARM异常与中断体系详解4---_und异常模示程序示例
1、异常向量表 /******下面这些就是异常向量表*****/ .globl _start _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq _undefined_instruction: .word undefined_instruction _software_inte
[单片机]
S3c2440<font color='red'>ARM</font>异常与<font color='red'>中断</font>体系详解4---_und异常模示<font color='red'>程序</font>示例
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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