微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C6410中断以及外部中断

S3C6410中断以及外部中断

时间:11-19 来源:互联网 点击:
6410的中断系统

嵌入式软件里的中断处理,除了中断初始化,主要工作就是编写ISR.

在嵌入式的SOC的CPU里,在CPU里内部会带一些设备模块,它们产生的中断称为内部中断。因为联线比较固定,因此编程比较简单。而且在物理上CPU分离的芯片产生的中断,称为外部中断,外部中断可以联接不同的中断脚上,因此需要对中断IO进行较复杂的配置。

轮询模式是否一无是处?轮询的优点是在重负荷的情况下,轮询比中断效率会高很多。比如一个教室很多学生不断的问问题,这样与其不断被中断,老师还不如起身在教室走动,随机处理学生问题会高很多。

异常(Exception)
--------------------------------------------------------------------------

Exception(异常), 计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。异常主要是从处理器被动接受的角度出发的一种描述,指意外操作引起的异常。而中断则带有向处理器主动申请的意味。但这两种情况具有一定的共性,都是请求处理器打断正常的程序执行流程,进入特定程序的一种机制。

从结构来看,外部设备产生的中断可以看成一种特殊的异常.除了中断之外,还有ARM不少固定的异常.包括以下七种:

1. 复位(Reset)

当按下RESET键后,会产生一个复位异常,此时程序跳转到复位异常处理程序处执行.当CPU重启后.一般刚好跳到这个复位异常来

2. 未定义指令

当ARM的处理器或协处理器遇到不能处理的指令时,产生未定义指令异常,采用这个机制,可以通过软件仿真扩展ARM或Thumb 指令集.

3. 软件中断(SWI)

硬件中断是有固定的硬件产生的中断,而软中断是指没具体的硬件产生,是CPU虚拟出来的.该异常由程序执行汇编SWI产生.软中断的优点,

可用于用户模式下的程序调用特权操作指令.Linux 系统调用就是使用这个异常来实现的.

有利用程序结构的优化.比如在Linux 驱动里,硬件中断不能长时间运行.但是很多软件的长时间操作依赖的于中断的调用.有时为解决这个冲突,会在驱动设计两级,从硬件存取用硬件中断,而长时间操作用软件中断的模拟.

4. 指令预取中止

若处理预取的指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止的异常.比如用ADS把程序下载到开发板上0x8000地址上.就会产生Abort异常.

5. 数据中止

若处理器数据访问数据的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常

6. IRQ

当外部设备在外部中断脚产生中断信号时.即触发了IRQ中断.这是外部设备使用最常用的一种手段.

在S3C24X0是一个集成的SOC,内部除了ARM模块以外.还其它内部集成的模块,如USB,RTC,等.这一些模块在CPU内部也会有相应的中断线连到ARM920T的内核上.但这一些管脚在CPU外部是不可见的,只能用于寄存器去控制.

还一些GPIO脚就充当外部中断控制线,外部IC可以把自己中断信号线连到相应的中断脚上.当外部产中断信号后,CPU就可以知道,外设有中断发来.

7. FIQ

快速中断,类似于IRQ,但是具有较快响应速度.而且设为FIQ的条件也比较严格,比如一次触发只能有一个FIQ


一句话,中断(IRQ,FIQ,SWI)是异常中的一个特例。当产生外部中断时,大部分CPU会只产生一个异常。在异常处理程序里软件再去读不同的中断寄存器分析后来调用ISR。这里ISR是由软件来执行的。象S3C2440就是这样机制。


S3C6410中,还可以采用简化的中断处理流程。由CPU直接去调用中断的ISR来处理。 这样中断处理软件的编写难度就大大下降了。



向量(vector)

异常处理函数或中断处理函数的地址都会按中断号的顺离顺序排列在一个连续的内存当中,从C语言的角度来看,可以看成是一个指针数组。数组又称为向量(Vector).

如果你熟悉S3C2440的中断处理机制,可以发现S3C6410大大简化的中断编程处理。

相对于S3C2440详细而丰富的关于中断的解释,S3C6410的dataSheet明显是赶工之作,关于中断只有短短的15页,大量内容还是寄存器表格。

因此以下大部分我从S3C6410的测试程序和Application Note反推出来的。并且重新用ADS写程序验证了。

S3C6410的中断主要改进是.

增加中断向量控制器,这样在S3C2440里需要用软件来跳转的中断处理机制,在S3C6410完全由硬件来跳转。你只要把ISR地址是存在连续向量寄存器空间,而不是象S3C2440自行分配空间自行管理。

换句话说,在S3C2440下是由CPU触发IRQ/FIQ异常,由异常处理函数里再查找相关中断寄存器来跳到指定的ISR,而可以全部由S3C6410的VIC硬件来自动处理。 这个大大简化中断处理编程。

另一个是外部中断加入滤波电路,这样原来需要软件去毛刺的地方均可以采用硬件来进行滤波了,这样大大简化外部中断处理。


S3C6410 中断操作
--------------------------------------------------------------------

S3C6410 中断号



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top