mini2440 外部中断控制led

概述

1.中断需要用到寄存器说明:

·        SRCPND、SUBSRCPND 表明那些中断被触发。

          SUBSRCPND中几位若有一位置位,且SUBINTMSK未屏蔽,则SRCPND中相应有一位置1(多对1关系)

·        INTMSK、SUBINTMSK用于屏蔽某些中断

·        INTMOD中断模式选择。1==FIQ0==IRQ

·        INTOFFSETINTPND寄存器位[x]1时,INTOFFSET寄存器的值为x,在清除SRCNDINTPND时,自动清除INTOFFSET

2.中断寄存器改变过程:

·       中断触发:SUBSRCPND相应位置1(自动)->SUBINTMSK未屏蔽(手动)-> SRCPND相应位置1(自动)->若是FIQ中断(INTMOD相应位为1(手动))-> INTMSK未屏蔽(手动)-> INTPND相应位置1(自动)

Note:读取INTPNDINTOFFSET可以确定中断源。

·       清除中断:SUBSRCPND(EINTPEND)-> SRCPND->INTPND(中断触发过程中自动置1的寄存器) 相应位置1

中断初始化流程

概述

初始化中断向量表->将相应引脚的功能设置为“外部中断”->设置中断触发条件->开启子中断屏蔽寄存器(若有)(SUBINTMSK相应位设0->设置中断模式FIQIRQINTMOD相应位设1->设置IRQ执行优先级(PRIORITY->开启中断屏蔽寄存器(INTMSK相应位设0->使能IRQFIQCPSR中的IIRQ)和FFIQ)位设0

 

1.初始化中断向量表

0x00 -> 0x1c

    复位、未定义指令终止模式、管理模式、指令预取终止、数据访问终止、保留、中断模式、快速中断模式

Note:每种模式进入C程序都需要设置各自的Stack

2.初始化外部中断寄存器

a.打开设置引脚为中断方式

                     GPGCON |= EINT8 | EINT11 | EINT13 | EINT14 | EINT15 | EINT19;

                b.设置CPSR IF位为1,关闭中断

                            msr cpsr_c #0xdf

c.设置外部中断触发方式

            EXTINTn  eg. EXTINT0->EINT0[2:0]  01=下降沿触发 10x=上升沿 11x=边沿触发(x=0低电平,x=1高电平)

d.使能外部中断屏蔽设置

                           EXINTMSK  &= (~(1<<8)) & (~(1<<11)) & (~(1<<13)) & (~(1<<14)) & (~(1<<15)) & (~(1<<19));

                e.设置中断优先级.

                           PRIORITY

                f.  使能中断屏蔽设置

                           INTMSK  &=  (~(1<<5));

                g.  打开IF中断为

                           msr cpsr_c, #0x5f

3.中断处理

                   HandleIRQ:

                                sub lr, lr, #4                                        @计算中断返回地址

                                stmdb sp!, {r0-r12, lr}                       @保护现场

                                ldr lr, =int_return                                                @

                                ldr pc, =FUNCTION_EINTHANDLE

          int_return:

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

程序

Note:使用arm-linux-objdump –D –m arm xxx_elf > xxx.dis反汇编。必须满足中断向量表是从0x00000000开始

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值