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、