2440-中断

1、  CPU与外设之间的数据传送控制方式(即I/O控制方式),通常有以下三种:

  a)         查询方式

  b)        中断方式

  c)         DMA方式(Direct Memory Access)

2、  中断定义

  在程序运行中,出现了某种紧急事件,CPU必须中止现行程序,转去处理此紧急事件(执行中断服务程序),并在处理完毕后再返回运行程序的过程。

  中断的过程:

  a)         中断请求

  b)        中断仲裁

  c)         中断响应(含保护现场)

  d)        中断处理

  e)         中断返回(含恢复现场)

3、  ARM中断处理流程:

  a)         中断控制器捕获当前外设发出的中断信号,通知SOC。

  b)        SOC保存当前程序的运行环境,然后调用中断服务程序(ISR,与中断处理程序不同)来处理中断。

  c)         在ISR中通过读取中断控制寄存器、外设的相关寄存器来识别是哪一个中断触发,获取硬件中断号IRQ,跳转到相应的处理程序完成中断处理。

  d)        清除中断:通过读写相关中断控制寄存器和外设相关的寄存器来实现。

  e)         最后恢复被中断程序的环境,继续执行。

4、  S3C2440A中断控制器包含60个中断控制源,这些中断源来自于外设如:定时器,DMA控制器,UART,I2C,外部中断EINT等。S3C2440A的中断过程如下:

  

5、  S3C2440A中断优先级控制如下图:

  第一步分六级,REQ0的等级最高,第二步分六级,ARBITER0的等级最高,在每个模块级别总又分级别,例如在ARBITER0中,EINT0级别最高

   

6、  下面列出S3C2440A中断相关的寄存器,下面简单介绍(具体位含义见S3C2440A手册)

  a)         子中断源源挂起寄存器SUBSRCPND

  b)        子中断屏蔽寄存器INTSUBMASK

  c)         源挂起寄存器SRCPND

  d)        中断屏蔽寄存器INTMASK

  e)         中断模式寄存器INTMOD

  f)         中断优先级寄存器PRIOPITY

  g)        中断挂起寄存器INTPND

  h)        确认中断源寄存器INTOFFSET

  SUBSRCPND(Sub Source Pending)寄存器用来标识INT_RXD0,INT_TXD0等子中断是否发生。S3C2440有这样的15个子中断。每一位对应一个子中断。当这些子中断发生,并且子中断未被屏蔽,则它们对应的父中断将在SRCPND中被置位。例如:SUBSRCPND寄存器中的3个中断INT_RXD0,INT_TXD0、INT_ERR0,只要有一个发生了,且没有被屏蔽,则SRCPND的INT_UART0位被置1。

  清中断时只要往SUBSRCPND寄存器中的对应位写入1即可。这是比较特殊的地方,与常规寄存器清零方式不同。

  INTSUBMSK(Interrupt Submask)寄存器用来配置SUBSRCPND寄存器所对应的子中断是否被屏蔽。INTSUBMSK寄存器中某位被设置为1,对应的子中断被屏蔽;设置为0,表示子中断允许。

  SRCPND(Source Pending)寄存器中每一位用来表示一个(或一类)中断是否已经发生。SRCPND寄存器操作与SUBSRCPND寄存器相似。清除某一个中断,则往中断对应位写入1。

  INTMSK(Interrupt Mask)寄存器用来配置SRCPND寄存器所对应的中断是否被屏蔽。INTMSK寄存器中某位被设置为1,对应的中断被屏蔽;设置为0,表示中断允许。INTMSK只能屏蔽设为IRQ的中断,不能屏蔽设为FIQ的中断。

  INTMOD(Interrupt Mode)当INTMOD寄存器中某位被设置为1时,它对应的中断被设为FIQ,即此中断发生时,SOC将进入快速中断模式,这通常用来处理特别紧急的中断。当某位被置为0时,表示为IRQ中断。注意:同一时间里,INTMOD上只能有一位被设置为1。

  INTPND(Interrupt Pending)经过中断优先级仲裁器选出优先级最高的中断后,这个中断在INTPND寄存器中的相应位被置1,随后,SOC将进入中断处理模式处理这个中断。同一时间内,此寄存器只有一位被置1。在ISR中可以根据这个位确定是哪一个中断触发。清除该中断时,往INTPND对应位写入1。

  INTOFFSET(Interrupt Offset)这个寄存器用来表示INTPND寄存器中哪位被置1了,即INTPND寄存器中位[x]为1时,INTOFFSET寄存器的值为x(x为0~31)。在清除SRCPND、INTPND寄存器时,INTOFFSET寄存器被自动清除。

7、   

posted on 2013-03-16 17:37  suwen  阅读(382)  评论(0编辑  收藏  举报

导航