2440 外部中断

2440外部中断的使用

1、设置io为外部中断引脚

  通过2440数据手册可以知道需要使用io的外部中断需要配置那些位

  

  a、通过上面的表格可以看出,如果要使用io的外部中断需要把对应的位设置为10

  例如:GPF0和GPF2这两个io需要使用外部中断

GPFCON &= ~((3<<0)|(3<<4));//清除相应位
GPFCON |=  ((2<<0)|(2<<4));//设置相应位为外部中断引脚

  

  b、通过上面这个表格可以看出,需要设置外部中断的触发,可以通过设置相对应的位实现,低电平,高电平,下降沿,上升沿,双边沿触发

   例如:GPF0和GPF2这两个io需要使用双边沿触发,就是下降沿上升沿都触发。

    

EXTINT0 |= ((7<<0)|(7<<8));// config eint0 and eint2 is both edge triggered双边沿触发

  

    c、通过上面这个表格可以看出,外部中断的使能是需要操作EINTMASK这个寄存器的。外部中断0-3不需要设置这个寄存器,默认是使能的。

    例如:需要EINT11 和EINT19的外部中断可以这样设置

    

EINTMASK &=~(1<<11);//使能外部中断11
EINTMASK &=~(1<<19);//使能外部中断19

    通过上面三个步骤,外部中断的IO设置就可以了

2、设置中断控制器允许外部中断

    

      这里需要设置,INTMSK寄存器,使得中断屏蔽寄存器无效,不屏蔽对应的中断。

      例如:这里关闭了,EINT0,TINT2,EINT8_23的中断屏蔽      

INTMSK &=~((1<<0)|(1<<2)|(1<<5));

3、开启中断总开关CPSR的I位

  

     

//保存现场
        ldr sp, =0x33d00000//指定sp到64m的最高地址
        sub lr,lr,#4
        stmdb sp!,{r0-r12,lr}//保存r0-r12 和lr寄存器中的值到堆栈中
        //lr是异常处理完后的返回地址,也要保存
        //处理函数
        bl interrupt_fun
        //恢复现场
        ldmia sp!,{r0-r12,pc}^// 恢复现场,从堆栈中取出r0-r12 和lr寄存器的值

//切换到urs mode
    mrs r0,cpsr    //读出cpsr
    bic r0,r0,#0xf //修改m4-m0为0xb10000,进入urs模式
    bic r0,r0,#(1<<7)// 开启cpu的中断允许开关
    msr cpsr,r0    //将r0存入cpsr
    //设置sp
    ldr sp,=0x33f00000

    中断向量表:

_start:
    b hede         //Reset addr                复位地址         0x0
    ldr pc,undefin  //Undefined instructoin 未定义异常        0x4
    ldr pc,swi_addrs//software interrupt    软中断             0x8
    b halt           //pretetch abort                         0xc
    b halt         //data abort                          0x10
    b halt         //reserved                            0x14
    ldr pc,irq_addrs //irq interrupt        中断异常         0x18
    b halt         //fiq                    快中断异常        0x1c

4、处理中断

  a、分辨中断源通过 INTOFFSET中的值判断是什么中断

  

    

int bit = INTOFFSET;
    //调用对应的处理函数
    if(bit ==0 ||bit == 2 ||bit == 5)
        {
            key_eint_irq(bit);
        }

  b、中断处理  EINTPEND(外部中断等待寄存器)寄存器中存放的值判断是外部中断几

    

  c、清除中断  清除中断是从源头开始清除的 。

    1)清除EINTPEND中的对应位  EINTPEND是一个可读可写的寄存器,所以只需要读出什么值,就写入什么值就可以清除中断等待位

      

     2)清除SRCPND寄存器

      

     3)清除INTPND寄存器

      

原文地址:https://www.cnblogs.com/hjxzjp/p/8735188.html

时间: 2024-11-05 22:05:45

2440 外部中断的相关文章

s5pv210的外部中断

中断,在学单片机的时候就没有学好,这次接触到210的中断体系,直接蒙圈了..前天下午老师简单的讲了一下,他的每句话拆开都可以听得懂,联系起来就傻了,,而且懂了与会写差距还远着呢.当天下午所有人都是萎靡的状态(不懂,不会写极其郁闷),以为参照裸机开发指南可以边写会慢慢理解,结果越写越是打击.晚上没有回去,一直想体验下在教室通宵的感觉,除了蚊子比较多.床不好睡.网速依旧渣.睡得太累,好吧,好像并没有什么优点. 虽然说是通宵了,但是几乎什么都没有学到,反而把自己搞得劳累.得不偿失!早上去领了免费包子,

《零死角玩转STM32》-17-EXTI外部中断/事件控制器

/* * 本文中的相关图片来自火哥的教程,只作为随笔记录,无侵权之意 * 21:25:46, 2017-04-08 */ EXTI:外部中断/事件控制器.STM32F429共有23根,其中EXTI0~EXTI15,分别对应GPIO中的PX0 ~ PX15,另外7根线有如下用途: (中间省略了EXTI1 ~ EXTI15) EXTI功能框图如下所示: 按照图中的序号标识,可以清晰的看出外部GPIO引脚上的电平变化是如何传递到内核,即GPIO -> EXTI -> NVIC,并触发相应的中断/事件

掌握所有IO口的外部中断

外部中断配置流程 1.初始化IO口工作在普通IO.上拉输入状态. 2.首先开IO口组中断(P0IE=1.P1IE=1.P2IE=1): 3.开组内对应的具体某IO口中断(P0IEM.P1IEM.P2IEM该寄存器里面的对应位对应相应的IO口): 4.上升沿还是下降沿触发(PICTL寄存器): 5.开CPU总中断EA=1; #include <cc2530.h> void main() { //步骤1 P0SEL &=0xDF;//P05口表示为普通IO口 P0DIR &=0xD

STM32外部中断

0.STM32F103上测试 #include <stm32f10x.h> void GPIO_Config(void); void NVIC_Config(void); void EXTI_Config(void); int main(void) { GPIO_Config(); NVIC_Config(); EXTI_Config(); while(1): } void GPIO_Config(void) { /*定义一个GPIO_InitTypeDef类型的结构体,本类型在stm32f1

[ZYNQ-7]PS处理PL外部中断的简单实例的剖析 (参考米联miz702n)

Zynq的ARM通过GIC中断控制器来接收核仲裁所有的中断.由于中断向量表只有4Bytes大小,仅仅正好存放一条跳转语句,因此当产生一个外部中断时,中断处理的大致过程:PC内容保存到LR_IRQ用于中断返回,拷贝CPSR到SPSR_IRQ以反应中断模式,屏蔽其他中断,紧接着将PC设置为中断向量表入口.CPU完成现场保护.确认中断源,并调用相关的中断处理函数.恢复CPSR,恢复CPU现场,中断返回. main.c of simplified Interrupt instance (from miz

STM32F4——NVIC中断优先级及外部中断

NVIC中断优先级 一.简介: CM4内核可以支持256个中断,包括16个内核中断和240个外部中断,256级的可编程中断设置.对于STM32F4没有用到CM4内核的所有东西,只是用到了一部分,对于STM32F40和41系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断. 二.相关寄存器: ISER[8]-中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82个可屏蔽的中断,因此利用ISER[0~2]这三个32位寄存器就够了.一下的几个寄

LPC1768外部中断与GPIO中断

LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明 控制这四个外部中断靠以下寄存器 这三个寄存器的0 1 2 3位分别代表中断的0 1 2 3,EXTINT寄存器表示中断是否发生,在发生中断的时候该寄存器会置位,可以通过写1清零,EXTMODE寄存器表示触发模式,有电平触发和变化沿触发两种,EXTPOLAR与EXTMODE,在电平触发模式下,决定高电平还是低电平触发,在变化沿触发的情况下决定上升沿还是下降沿触发 这三个中断分别相关

CC2540开发板学习笔记(三)&mdash;&mdash;外部中断

一.实验内容 通过外部中断方式依次按下按键S1控制LED1的亮灭 二.实验过程 1.电路原理图同上 2.中断的概念 比如说我们在执行main函数时,突然来了个指令.优先级比现在执行的main还高,那我们便选择跳过去执行优先级高的,完了之后再执行main函数,中断就类似这样一个概念,使用中断可以减少CPU的无效浪费,降低能耗. 3.寄存器调度 (1)LED1的初始化..同前两节,就是SEL,DIR,INP三个,还有附初始状态. (2)外部中断初始化(S1的外部中断初始化) 按键S1外部中断初始化方

中断之外部中断

. ARM Cortex M3共有256个中断. STM32F103CB共有43个外部中断和16个内部中断. 具有相同数值编号的IO口被分配为同一组,共用一条中断请求线,如下图: 所以共有15条中断线,另外 ●EXTI线16连接到PVD输出●EXTI线17连接到RTC闹钟事件●EXTI线18连接到USB唤醒事件 寄存器:1.外部中断配置寄存器    AFIO_EXTxCR1------->用于选择输入中断源  Pin 0..3 AFIO_EXTxCR2------->用于选择输入中断源  Pi