老古开发网首页
导航:老古开发网首页文章索引文章分类AVR单片机→[44b0X的中断控制]
| -文章搜索 - 最新文章 - |

44b0X的中断控制

发布时间:2006年4月1日 点击次数:2255
来源:   作者:
 

中断控制是所示嵌入式系统中不可或缺的一部分。对于不同的处理器,虽然中断控制的原理是基本一致的,但其管理方式往往都有很大的区别。学过51系列单片机的刚开始学ARM人会觉得ARM的中断管理系统很复杂,因为在51中中断向量几乎不用你管。主要是因为在ARM系统中中断源多,且为了实现不同系统对实时性的要求不同而进行多优先级的管理的造成的。

1ARM7TDMI内核的中断

至于中断的概念这里就说的,下面我来介绍一下ARM7TDMI内核下的中断。

51单片机只有一种模式不同,ARM7TDMI内核CPU在响应中断后会切换到异常模式下:FIQ中断是进入快中断模式,IRQ中断时进入中断模式(ARM7TDMI内核有7种模式:用户模式,系统模式,快中断模式,中断模式,管理模式,中止模式和未定义模式,其中后5种被称为异常模式,由程序状态寄存器的M4M3M2M1M05位来决定,其实ARM7的模式管理的这5位和51单片机状态寄存器的RS1RS0两位的作用相似)。

1.1、中断处理过程

ARM7进入及退出快中断模式和中断模式的过程(中断响应过程)如下:

     将下一条指令的地址复制到LR(R14)中(在ARM状态下)。

     CPSR复制到适当的SPSR(各种模式处CPSR是共用一个的,而SPSR在不同异常模式下是不同的)。

     根据异常将CPSR模式强制设为快中断模式或中断模式。

     强制PC从相关的异常向量处取指。(到此完成进入中断服务程序的动作)

     执行异常服务程序。

     LR中的值减去偏移量后移入PCARM状态快中断模式和中断模式下这个偏移量为4,因为LR保存的是由于FIQIRQ占先面没有被执行的指令的地址。

     SPSR的值复制回CPSR中。

     清零在入口置位的中断禁止标志。

1.2、异常向量表

       一旦产生IRQ中断,微控制器会切换到IRQ模式,并且跳转到向量表0x0000018地址处执行程序。而一旦产生FIQ中断,微控制器会切换到FIQ模式,并且跳转到向量表0x000001C地址处执行程序。所示,在0x00000080处和0x0000001C处必须各有一条跳转指令,分别跳转的IRQFIQ中断处理的代码处。在0x00000000处的一般向量表称为异常向量表,定义如下:

ENTRY

    b ResetHandler      ;for debug

    b HandlerUndef     ;handlerUndef

    b HandlerSWI       ;SWI interrupt handler

    b HandlerPabort     ;handlerPAbort

    b HandlerDabort    ;handlerDAbort

    b .                    ;handlerReserved

    b HandlerIRQ           ;这里是IRQ中断入口处0x00000018

b HandlerFIQ           ;这里是FIQ中断入口处0x0000001C

 

ResetHandlerHandlerUndef等只是地址标签,是由用户自己在这些异常处理代码的开始处定义的。

244b0X的中断

2.144b0X的启动时中断的初始化

44B0的初始化程序就是初始化各个关键的寄存器,建立中断向量,然后转移到主函数去执行程序。不过44B0不支持地址映射,所以程序不COPYRAM种执行。44B0初始化对我们广大初学者来说,比较难理解的是中断的处理和一些少见的操作符号。下面我来一段一段地分析。

2.1.144b0的中断子程序地址

就是存放在初始化程序最后的一段:
              ^      _ISR_STARTADDRESS

HandleReset    #     4

HandleUndef   #     4

HandleSWI     #     4

HandlePabort  #     4

HandleDabort  #     4

HandleReserved      #     4

HandleIRQ      #     4

HandleFIQ      #     4

 

;Don''t use the label ''IntVectorTable'',

;because armasm.exe cann''t recognize this label correctly.

;the value is different with an address you think it may be.

;IntVectorTable

HandleADC     #     4

HandleRTC     #     4

HandleUTXD1       #     4

HandleUTXD0       #     4

HandleSIO      #     4

… …

HandleEINT3  #     4

HandleEINT2  #     4

HandleEINT1  #     4

HandleEINT0  #     4   ;0xc1(c7)fff84

这段第一行 “^”符号表示在RAM区开辟空间。 ^  _ISR_STARTADDRESS 表示在RAM_ISR_STARTADDRESS处开辟一段空间。这里开辟的空间是用来存放中断服务程序及其他异常处理程序地址的。每个中断或其他异常都开辟4个字节的空间,这是因为RAM区的程序地址要4个字节才能放得下。而中断程序的地址是应用程序在使用这个中断时,将中断服务程序的地址存入这对应的空间内。_ISR_STARTADDRESS一般是定义在RAM的最后一段空间,可以在一些配置文件中找到这个标签,如:Option.inc

 

2.1.2IRQ中断
   44B0
IRQ中断有两种装断模式 一种是非向量IRQ中断,一种是向量IRQ中断。

当有两个中断同时发生时,前者是由软件方式来判断决定先执行那个中断服务,而后者是由硬件逻辑来决定的。

           非向量IRQ中断的执行过程

(1)       中断允许并且外部中断请示产生。

(2)       PC自动跳转一0x00000018

也就是异常向量表:

       b ResetHandler     

    b HandlerUndef    

    b HandlerSWI      

    b HandlerPabort     

    b HandlerDabort    

    b .                    

    b HandlerIRQ        ;这里是非向量IRQ中断入口处0x00000018


欢迎进入老古论坛进行讨论
[AVR单片机] 相关文章:
arm7和arm9的区别
简介:
ARM7内核是0.9MIPS/MHz的三级流水线和冯·诺伊曼结构; ARM9内核是5级流水线,提供1.1MIPS/MHz的哈佛结构。 arm7没有mmu, arm720T是MMU的;arm9是有mmu的,arm940T只有Memory protection unit.不是一个完整的MMU。 ARM7TDMI提供了非常好的性能-功耗比。它包含了THUMB指令集快速乘法指令和ICE调试技术的内核。ARM9的时钟频率比ARM7更高,采用哈佛结构区分了数据总线和指令总线。 ......

[转帖]关于ARM启动的一篇文章
[转]44B0之bootloader理解
[转]如何开发arm
关于ARM的汇编中分支结构的小技巧
[转帖]ARM的生意经
Source Insight配置WinAVR的具体步骤
AVR应用经验
AVR芯片的ISP全攻略
AVR的主要特性
 
下一个:[AVR单片机]ARM的介绍和选择
简介:
ARM公司以及ARM芯片的现状和发展,从应用的角度介绍了ARM芯片的选择方法,并介绍了 具有多芯核结构的ARM芯片。列举了目前的主要ARM芯片供应商,其产品以及应用领域。举例说明 了几种嵌入式产品的最佳ARM芯片选择方案。 关键词:ARM MMU SOC RISC CPU ARM公司自1990年正式成立以来, 在32位RISC (Reduced Instruction Set Computer CPU开 发领域不断取得突破,其结构已经从V3发展到V6。由于ARM公司自成立以来,一直以IP (Intelligence P......
 

上一个:[AVR单片机]指导导师的条件和修养

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:10分钟 执行时间:16毫秒