2440之中断管理

发布者:科技思想家最新更新时间:2016-08-07 来源: eefocus关键字:中断管理 手机看文章 扫描二维码
随时随地手机看文章
中断处理:

       中断是嵌入式里最重要的一个概念。一般一个系统对于一个设备要么采用中断方式,要么采用轮询方式 。中断方式可以有效地减少处理器负荷 ,但是如果大量采用中断则有可能降低处理速度 ,因为中断处理破坏了处理器的流水机制。复习下微机原理中中断处理过程和中断机制。   

       2440中支持FIQ(快速中断)和IRQ(普通中断)2种中断方式,一般只采用IRQ中断。2440有60个中断源,不支持中断嵌套。具体的参考用户手册第14章。下图是2440中断产生过程。

具体的讲解一下,关于寄存器请查阅用户手册。

    中断源分为2种,子中断中断源和中断源,当一个子中断产生一个中断信号,子中断源挂起寄存器(SUBRCPND)相应位自动置1,察看子中断屏蔽寄存器(SUBMASK)该子中断是否被屏蔽(人工设置),如果没屏蔽,则中断源寄存器(SRCPND)置1,察看该中断源是否被屏蔽和采用那种模式,如果没被屏蔽,采用IRQ模式,进行优先级判断后,高优先级的执行,中断挂起寄存器置1,产生IRQ信号。同时CPSR寄存器的I位置1,表明当前有一个IRQ中断产生。记得以前让大家注意该寄存器中的I和Q位了吧,他的作用就在这 。

中断处理过程:

    CPU每执行一条指令都会检查CPSR寄存器,当发现I和F位被置1时,就进行中断处理。第一步跳入异常向量表:

    b       ResetHandler

       b     HandlerUndef  ;handler for Undefined mode

       b     HandlerSWI    ;handler for SWI interrupt

       b     HandlerPabort ;handler for PAbort

       b     HandlerDabort ;handler for DAbort

       b     .             ;reserved

       b     HandlerIRQ    ;handler for IRQ interrupt

       b     HandlerFIQ     ;handler for FIQ interrupt

 

HandlerFIQ      HANDLER HandleFIQ

HandlerIRQ      HANDLER HandleIRQ

HandlerUndef    HANDLER HandleUndef

HandlerSWI      HANDLER HandleSWI

HandlerDabort   HANDLER HandleDabort

HandlerPabort   HANDLER HandlePabort

 

       ^   _ISR_STARTADDRESS        ; _ISR_STARTADDRESS=0x33FF_FF00

HandleReset   #   4

HandleUndef #   4

HandleSWI            #   4

HandlePabort    #   4

HandleDabort    #   4

HandleReserved  #   4

HandleIRQ             #   4

HandleFIQ             #   4

如果是IRQ 则跳到HandlerIRQ,此过程由硬件来完成。接下来

    ldr r0,=HandleIRQ       ;This routine is needed

    ldr r1,=IsrIRQ    ;if there is not 'subs pc,lr,#4' at 0x18, 0x1c

    str r1,[r0]

进行第2次跳转,跳转到2级中断向量表

IsrIRQ

    sub sp,sp,#4       ;reserved for PC

    stmfd   sp!,{r8-r9}

    ldr r9,=INTOFFSET

    ldr r9,[r9]

    ldr r8,=HandleEINT0

    add r8,r8,r9,lsl #2

    ldr r8,[r8]

    str r8,[sp,#8]

    ldmfd   sp!,{r8-r9,pc}

 

HandleEINT0     #   4

HandleEINT1     #   4

HandleEINT2     #   4

HandleEINT3     #   4

次代码完成了建立2级中断向量表,在我们中断程序中我们先对中断进行注册

例 EINT0 = ISR_FUNC();这样就完成了中断向量和中断服务程序的关联。跳到2级中断向量表后就进入了中断处理程序。中断处理完成了CPU返回继续执行中断处理前的下一条程序,关于处理现场的保护部分参考微原部分。

下边是一个关于中断处理函数的测试题:明白中断处理函数的使用

中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字

__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

__interrupt double compute_area (double radius)

{

 double area = PI * radius * radius;

 printf("\nArea = %f", area);

 return area;

}

 

上边就是2440的中断产生及处理过程,这些是最基本的知识要牢牢掌握。对于ARM这些都是一样的,只不过是寄存器有可能不一样,但处理过程是一样的,有些处理器支持中断可重入,如710处理器。阅读下用户手册14章中关于优先级部分,注意下有些寄存器的清0方法。

关键字:中断管理 引用地址:2440之中断管理

上一篇:s3c2440头文件之2440addr.h
下一篇:ARM-Linux GPIO操作事宜

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

S3C2440上LCD驱动(FrameBuffer)开发(一)
一、开发环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二、背景知识 1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。 2. S3C2440内部LC
[单片机]
ARM 2440 学习笔记
1、NOR Flash 和 NAND Flash NOR Flash 的特点是芯片内执行(XIP ,eXecute In Place),这样 应用程序 可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。 NOR 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响到它的性能。NAND的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于Flash的管理和需要特殊的系统接口。通常读取NOR的速度比NAND稍快一些,而NAND的写入速度比NOR快很多。 http://baike.baidu.com/view/2741245.htm
[单片机]
S3C2440-IIS放音
[单片机]
了解LCD驱动(FrameBuffer)的实例开发
一、开发环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二、背景知识 1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。 2. S3C2440内部LCD控
[单片机]
了解LCD驱动(FrameBuffer)的实例开发
S3C2440 RTC实时时钟 驱动分析以及使用(三十)
RTC驱动分析总结: driversrtcrtc-s3c.c s3c_rtc_init platform_driver_register s3c_rtc_probe rtc_device_register( s3c , &pdev- dev, &s3c_rtcops, THIS_MODULE) rtc_dev_prepare cdev_init(&rtc- char_dev, &rtc_dev_fops); rtc_dev_add_device cdev_add linux中的rtc驱动位于drivers/rtc下,里面包含了许多开发平台的RTC驱动,我们这里是以S3C24XX为主,所以它的RTC驱
[单片机]
S3C<font color='red'>2440</font> RTC实时时钟 驱动分析以及使用(三十)
s3c2440的简单BOOTLOADER
调试了很久终于成功启动了板子,这个程序分两个部分,一个是启动代码boot.s负责初始化硬件并拷贝前4k的程序到内存中执行。另外一个是主程序文件main.c,main设置UART并使用串口循环输出打印一个类似于shell的界面,可以接收命令,但暂时没做命令解释,功能还不全,主要是为了看看能不能实现基本的BOOTLOADER功能。 mian.c #define BUF_SIZE 100 #define GPHCON (*(volatile unsigned long *)0x56000070) #define GPHUP (*(volatile unsigned long *)0x56000078) #define ULCON0
[单片机]
S3C2440 测试程序(一)PWM控制蜂鸣器测试
while(1) { U8 idx; Uart_Printf( \nPlease select function : \n ); for(i=0; CmdTip .fun!=0; i++) Uart_Printf( %d : %s\n , i, CmdTip .tip); idx = Uart_GetIntNum_GJ() ; if(idx i) { (*CmdTip .fun)(); Delay(20); Uart_Init( 0,115200 ); } } struct {
[单片机]
mini2440裸机开启MMU实验
.text .global _start _start: ldr sp, =4096 @ 设置栈指针,以下都是C函数,调用前需要设好栈 bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启 bl memsetup @ 设置存储控制器以使用SDRAM bl copy_2th_to_sdram @ 将第二部分代码复制到SDRAM bl create_page_table @ 设置页表 bl mmu_init @ 启动MMU ldr sp, =0xB4000000
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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