基于mini2440 的 bootloader 设计 ---- 9、中断初始化

原创 2015年11月17日 17:05:51
      

开发环境:

               电脑系统:RedHat Enterprise Linux6   kernel version : linux-2.6.32

               交叉工具链:arm-linux-xxx4.3.2 

               开发板版本:mini2440 S3C2440处理器  64M SDRAM   256M nand flash

      本文将介绍S3c2440芯片的中断系统。为了测试中断功能,笔者使用了一个外部中断----按键。

一、背景知识

     中断的概念这里就不再赘述了。2440 CPU 共支持60个中断源,分为IRQ和FIQ,或者分为外部中断和内部中断,还可以分为有子中断的中断和没有子中断的中断。所谓的子中断,就如一个串口中断,它又分为读中断和写中断。当一个中断源来临的时候,需要经过一个筛选器,通过筛选器的中断源才能中断CPU核,让CPU处理它的请求。这么一个筛选器如下图所示:


       其中中断源有两条路径,这其实就是由有子中断和没子中断引起的。当中断源来临时,会在SRCPND寄存器将相应的位置1(SRCPN寄存器的每一位都代表着一个或者一类中断,当该位被置1时说明该中断来临),这时如果该中断被打开了,就可以到达中断优先级判断,经过优先级判断以后就可以将INTPND寄存器的相应位置1。当CPU发现INTPND的某一位被置1时,CPU就会查找中断号,然后响应该中断,转去处理相应的中断子程序。因此要初始化中断,其实就是将相应的中断打开,然后在适当的时候读取中断号判断中断类型,并提供中断子程序。

    中断的处理还涉及到一个很重要的话题:环境保护和回恢复。事实上,在中断源通过了筛选器,并成功中断CPU以后,CPU的PC指针就指向一个固定的地址---异常向量表的一项,并且CPU 的工作模式就进入irq 或者fiq模式。为了让CPU处理完中断子程序后能够成功返回,需要将刚进入中断模式下时的寄存器保存起来。当完成中断处理后将这些寄存器恢复,就能够继续中断前的工作。因此在异常向量表里,该地址完成的事就三件:保护环境、跳转到中断处理程序、恢复环境。恢复环境时将CPU也一并恢复,这样就能直接回到中断前的地方继续执行。

二、代码实现

       从代码的角度来看,要完成中断的初始化可以按照如下步骤:

       开启中断-->保护环境-->跳转到中断总入口-->恢复环境。

其中在中断总入口中完成:判断中断源-->调用相应的中断处理函数

按照这一流程,笔者实现了相应的外部中断,并通过按键测试到中断成功。

     实现代码位于:点击打开链接

      












版权声明:本文为博主原创文章,转载请注明出处:http://blog.csdn.net/u013819957

mini2440之动手写简易bootloader

Bootloader 它的终极使命就是启动内核,它的主要工作就是在上电之后
  • wu20093346
  • wu20093346
  • 2014年05月23日 22:59
  • 1111

友善之臂Mini2440NORflash bootloader烧写详述---亲测可用

友善之臂Mini2440NORflash bootloader烧写详述---亲测可用 bootloader: 1.友善之臂提供的Superboot2440.bin(该bootloader可以使用友善之...
  • u012857368
  • u012857368
  • 2016年10月27日 15:03
  • 1019

OK6410开发板bootloader架构设计分析---嵌入式回归第五篇

在介绍bootloader嵌,先简要介绍一下汇编的相关知识!为后边的学习做铺垫!大学里面学习过汇编,之前汇编部分的视频也是一点一点的跟着国嵌的视频把代码撸出来一步一步的调试!相对学习起来还是比较容易的...
  • coding__madman
  • coding__madman
  • 2016年04月23日 16:35
  • 3615

基于mini2440 的 bootloader 设计 ---- 5、内存初始化

开发环境:                电脑系统:RedHat Enterprise Linux6   kernel version : linux-2.6.32                ...
  • u013819957
  • u013819957
  • 2015年11月12日 09:10
  • 395

基于mini2440 的 bootloader 设计 ---- 8、NandFlash 初始化

开发环境:                电脑系统:RedHat Enterprise Linux6   kernel version : linux-2.6.32            ...
  • u013819957
  • u013819957
  • 2015年11月17日 16:18
  • 272

mini2440系统移植篇之u-boot分析

1. Bootloader概念 系统上电后,需要一段程序来初始化重要的硬件,有些程序是固化在固件firmwware上的,如PC的BIOS。然后是Bootloader,如PC上的GRUB。对于嵌入式系统...
  • HYQ458941968
  • HYQ458941968
  • 2015年05月04日 22:10
  • 532

基于mini2440 的 bootloader 设计 ---- 4、CPU核心初始化

开发环境:                电脑系统:RedHat Enterprise Linux6   kernel version : linux-2.6.32                ...
  • u013819957
  • u013819957
  • 2015年11月10日 19:12
  • 281

基于mini2440 的 bootloader 设计 ---- 1、 准备工作

今天开始着手设计一个简单的bootloader,为此预计会有一系列关于bootloader和arm知识的文章出现了。本篇文章主要为以后的编码工作做一些铺垫,介绍一下开发板情况以及即将实现的bootlo...
  • u013819957
  • u013819957
  • 2015年11月10日 12:32
  • 201

Mini2440 裸机实验之LED程序、按键、中断

测试平台:Mini2440 Win7 64 ADS开发环境测试   此程序主要考虑按键、LED点亮、中断模式(IRQ)之间的联系 以下为main.c代码部分,其他请参考三星提供的2440用例代码 #d...
  • comwise
  • comwise
  • 2013年05月28日 16:18
  • 1416

关于mini2440按键中断的配置

在本文我们以按键中断为例(其他中断差不多配置方法):   一:首先我们应该按键初始化, 从上图中可以看到,按键外部中断分别是EINT8,EINT11,EINT13,EINT14,EINT15,EIN...
  • Y_Dennis
  • Y_Dennis
  • 2015年08月17日 20:30
  • 379
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于mini2440 的 bootloader 设计 ---- 9、中断初始化
举报原因:
原因补充:

(最多只允许输入30个字)