X210(s5pv210)中断系统

发布者:Mingyue1314最新更新时间:2024-12-16 来源: cnblogs关键字:s5pv210  中断系统 手机看文章 扫描二维码
随时随地手机看文章

1.SoC对中断的实现机制:异常向量表

(1)异常向量表是CPU中某些特定地址的特定定义。当中断发生的时候,中断要想办法通知CPU去处理中断,怎么做到?这就要靠异常向量表。
(2)在CPU设计时,就事先定义了CPU中一些特定地址作为特定异常的入口地址(譬如定义0x00000000地址为复位异常向量地址,则发生复位异常时CPU会自动跳转到0x00000000地址去执行指令。又譬如外部中断对应的异常向量地址为0x30000008,则发生外部中断后,CPU会硬件自动跳转到0x30000008地址去执行指令。)如
(3)以上讲的是CPU硬件设计时对异常向量表的支持,下来就需要软件支持了。硬件已经决定了发生什么异常CPU自动跳转PC到哪个地址去执行,软件需要做的就是把处理这个异常的代码的首地址填入这个异常向量地址。

2.异常向量表的编程处理

  1、像内存一样去访问异常向量表
  (1)S5PV210的异常向量表可以改变(在CP15协处理器中),以适应操作系统的需求。但是目前系统刚启动时,此时DRAM尚未初始化,程序都在SRAM中运行。210在iRAM中设置了异常向量表,供暂时性使用。
  (2)查210的iROM application note文档中iRAM的地址分配,可知,iRAM中的异常向量表起始地址为0xD0037400。知道了异常向量表的起始地址后,各个异常对应的入口就很好知道了。
  2、函数名的实质就是函数的首地址
  (1)函数名在C语言中的理解方法和变量名其实没区别。编译器会把这个函数的函数体对应的代码段和这个函数的函数名(实质是符号)对应起来,等我们在使用这个函数名符号时,编译器会将函数的函数体实际上做替换。因为函数体都不止4字节,而函数名这个符号只能对应1个地址,所以实际对应的是函数体那一个代码段的首地址。
  (2)拿C语言中的语法来讲,函数名就是这个函数的函数指针。

  总结:当我们将异常处理程序的首地址和异常向量表绑定起来后,异常处理初步阶段就完成了。到目前可以保证相应异常发生后,硬件自动跳转到对应异常向量表入口去执行时,可以执行到我们事先绑定的函数。

3.汇编保存现场和恢复现场

  (1)中断处理要注意保护现场(中断从SVC模式来,则保存SVC模式下的必要寄存器的值)和恢复现场(中断处理完成后,准备返回SVC模式前,要将保存的SVC模式下的必要寄存器的值恢复回去,不然到了SVC模式后寄存器的值乱了,SVC模式下原来正在进行的常规任务就被你搞坏了)
  (2)保存现场包括:第一:设置IRQ栈;第二,保存LR;第三,保存R0~R12
  (3)为什么要保存LR寄存器?要考虑中断返回的问题。中断ISR执行完后如何返回SVC模式下去接着执行原来的代码。中断返回其实取决于我们进入中断时如何保存现场。中断返回时关键的2个寄存器就是PC和CPSR。所以我们在进入IRQ模式时,应该将SVC模式下的下一句指令的地址(中断返回地址)和CPSR保存起来,将来恢复时才可以将中断返回地址给PC,将保存的CPSR给CPSR。
  (4)中断返回地址就保存在LR中,而CPSR(自动)保存在(IRQ模式下的)SPSR中

  (5)保护现场关键是保存:中断处理程序的返回地址,r0-r12(cpsr是自动保存的)
  (6)恢复现场主要是恢复:r0-r12,pc,cpsr


#define IRQ_STACK 0xd0037f80

// 在这个汇编函数中,用来做中断模式下的现场保护和恢复,并且调用真正的中断处理程序


IRQ_handle:

    // 设置IRQ模式下的栈

    ldr sp, =IRQ_STACK

    // 保存LR(储存的是pc值)

    // 因为ARM有流水线,所以PC的值会比真正执行的代码+8,

    sub lr, lr, #4

    // 保存r0-r12和lr到irq模式下的栈上面

    stmfd sp!, {r0-r12, lr}

    // 在此调用真正的isr来处理中断

    bl irq_handler

    // 处理完成开始恢复现场,其实就是做中断返回,关键是将r0-r12,pc,cpsr一起回复

    ldmfd sp!, {r0-r12, pc}^


4.异常处理的2个阶段
  (1)可以将异常处理分为2个阶段来理解。
    第一个阶段是异常向量表跳转;
    第二个阶段就是进入了真正的异常处理程序irq_handler之后的部分。

  (2)第一个阶段之所以能够进行,主要依赖于CPU设计时提供的异常向量表机制。第一个阶段的主要任务是从异常发生到响应异常并且保存/恢复现场、跳转到真正的异常处理程序处。

  (3)第二个阶段的目的是识别多个中断源中究竟哪一个发生了中断,然后调用相应的中断处理程序来处理这个中断。

5.相关寄存器

VICnINTENABLE         

  负责相应的中断的使能 

VICnINTENCLEAR

  负责相应的中断的禁止

VICnINTSELECT

  设置各个中断的模式为irq还是fiq。一般都设置成irq

VICnFIQSTATUS&

VICnIRQSTATUS

  中断状态寄存器,是只读的。当发生了中断时,硬件会自动将该寄存器的对应位置为1,表示中断发生了。软件在处理中断第二阶段的第一阶段,就是靠查询这个寄存器来得到中断编号的。

VICnVECTPRIORITY(0~31)

  中断优先级设置寄存器,设置多个中断同时发生时先处理谁后处理谁的问题。一般来说高优先级的中断可以打断低优先级的中断,从而嵌套处理中断。当然了有些硬件/软件可以设置不支持中断嵌套。

VICnVECTADDR(0~31)

  VICnVECTADDR0到31这32个寄存器分别用来存放真正的各个中断对应的isr的函数地址。相当于每一个中断源都有一个VECTADDR寄存器,程序员在设置中断的时候,把这个中断的isr地址直接放入这个中断对应的VECTADDR寄存器即可。

VICnADDR

  VICnADDR这个寄存器是只需要读的,它里面的内容是由硬件自动设置的。当发生了相应中断时,硬件会自动识别中断编号,并且会自动找到这个中断的VECTADDR寄存器,然后将其读出复制到VICnADDR中,供我们使用。这样的设计避免了软件查找中断源和isr,节省了时间,提高了210的中断响应速度。

5.整个中断的流程梳理:
  整个中断的工作分为2部分:
  第一部分是我们为中断响应而做的预备工作:
  1. 初始化中断控制器
  2. 绑定写好的isr到中断控制器
  3. 相应中断的所有条件使能
  第二部分是当硬件产生中断后如何自动执行isr:
  1. 第一步,经过异常向量表跳转入IRQ/FIQ的入口
  2. 第二步,做中断现场保护(在start.S中),然后跳入isr_handler
  3. 第三步,在isr_handler中先去搞清楚是哪个VIC中断了,然后直接去这个VIC的ADDR寄存器中取isr来执行即可。
  4. 第四步,isr执行完,中断现场恢复,直接返回继续做常规任务。

中断设置初始化流程图

中断相应流程


关键字:s5pv210  中断系统 引用地址:X210(s5pv210)中断系统

上一篇:s5pv210 fimc 之 fimc-dev.c
下一篇:X210串口配置与stdio移植

推荐阅读最新更新时间:2026-03-25 10:44

X210s5pv210中断系统
1.SoC对中断的实现机制:异常向量表 (1)异常向量表是CPU中某些特定地址的特定定义。当中断发生的时候,中断要想办法通知CPU去处理中断,怎么做到?这就要靠异常向量表。 (2)在CPU设计时,就事先定义了CPU中一些特定地址作为特定异常的入口地址(譬如定义0x00000000地址为复位异常向量地址,则发生复位异常时CPU会自动跳转到0x00000000地址去执行指令。又譬如外部中断对应的异常向量地址为0x30000008,则发生外部中断后,CPU会硬件自动跳转到0x30000008地址去执行指令。)如 (3)以上讲的是CPU硬件设计时对异常向量表的支持,下来就需要软件支持了。硬件已经决定了发生什么异常CPU自动跳转PC到哪个地
[单片机]
<font color='red'>X210</font>(<font color='red'>s5pv210</font>)<font color='red'>中断系统</font>
关于x210开发板和主机、虚拟机ping通问题
步骤:   1、关闭 Ubuntu、关闭VMware软件; 2、打开 网络连接,设置 以太网 IP地址,并确认使用的网卡         3、以管理员身份打开VMware软件,然后打开虚拟网络编辑器;   4、还原默认设置、并选择桥接模式,然后桥接到 以太网 所用到的网卡;        5、打开虚拟机,设置虚拟机的网址,然后重启网卡,注意:开发板、虚拟机、主机三者的IP地址必须处于同一网段;   6、设置开发板IP、子网掩码、网关、服务器地址(Ubuntu的IP);        7、开发板和Ubuntu的相互平通。(由于uboot下,开发板的网卡不是一直使能的,所以这是单向的ping通,在Android下,能够双向p
[单片机]
关于<font color='red'>x210</font>开发板和主机、虚拟机ping通问题
IAP15W4K58S4单片机中断系统详解与管理学习笔记
中断服务入口程序入口地址: 存储空间两个字节 0003H:外部中断0 000BH:定时/计数器0 0013H:外部中断1 001BH:定时/计数器1 0023H:串口1 TCON与SCON寄存器 寄存器 地址 D7 D6 D5 D4 D3 D2 D1 D0 复位值 TCON 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 00000000B SCON 98H SM0/FE SM1 SM2 REN TB8 RB8 TI RI 00000000B TCON,SCON在SFR区中 外部中断0 IT0:外部中断INT0的触发控制位,0为双边沿触发(上升沿和下降沿都触发),1为下降沿触发 IE
[单片机]
IAP15W4K58S4单片机<font color='red'>中断系统</font>详解与管理学习笔记
实验五--中断系统
一。平台   系统:ubuntu12.04   开发板:jz2440   编译器:gcc 二。中断简略   大概除了FPGA这种并行的cpu才不需要中断,像51,AVR,arm这类串行的芯片中断是他们不被淘汰的利器。没有中断,他们不可能得到这么广泛的应用。   arm中断和51的类似,无非就是设置相关寄存器、中断开关,中断源,中断分辨之类的东西;但是注意,arm的中断只是7个模式下的一个,此外,中断还有普通中断和快速中断之分。   而快速中断不需要进行中断的分辨,因为每次最多只有一个被设置为快速中断。    这里看中断源分为两部分。一个是with sub-register,另一个是without,有何区别?试想下,串口会有几
[单片机]
实验五--<font color='red'>中断系统</font>
单片机中断系统介绍_51单片机中断系统结构
什么是中断?就是打断当前要做的事,转而去执行别的事情。单片机中断就是当单片机正在执行程序的时候,突然某个按键按下了(产生外部中断),单片机就必须得去处理那个按键(中断的响应),看看是发生了什么事,按键处理完后继续回来执行程序(中断的返回)。 MCS-51单片机中断系统的结构 5个中断源的符号、名称及产生的条件如下。 INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。 INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 T0:定时器/计数器0中断,由T0计满回零引起。 T1:定时器/计数器l中断,由T1计满回零引起。 TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。 整个中断系统的结
[单片机]
单片机<font color='red'>中断系统</font>介绍_51单片机<font color='red'>中断系统</font>结构
MCS-51 单片机的中断系统
知识点5. MCS-51 单片机的中断系统 主要内容:中断技术概述、中断系统结构、中断允许与中断优先级的控制、响应中断请求的条件、外部中断的响应时间、外部中断的触发方式选择、中断请求的撤销、中断服务子程序的设计和多外部中断源系统设计。 5.1中断技术概述 中断系统作用:实时测控,单片机能及时地响应和处理单片机外部事件或内部事件所提出的中断请求。 CPU正在执行程序时,单片机外部或内部发生的某一事件,请求CPU迅速去处理。CPU暂时中止当前的工作,转到中断服务处理程序处理所发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来的工作,这称为中断。 CPU处理事件的过程,称为CPU的中断响应过程。 中断响应和处理过程
[单片机]
MCS-51 单片机的<font color='red'>中断系统</font>
51单片机——中断系统、外部中断、定时器中断、串口通信C语言入门编程
中断系统: 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。当几个中断源同时向 CPU请求中断,CPU总是先响应优先级别最高的中断请求。当CPU正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。STC89C5X 系列单片机提供了8个中断请求源,它们分别是:外部中断0(INT0)、外部中断1(INT1)、外部中断2(
[单片机]
51单片机——<font color='red'>中断系统</font>、外部中断、定时器中断、串口通信C语言入门编程
【51单片机实验】3-单片机并行口与中断系统应用
一、实验目的 掌握51单片机并行口的应用设计 掌握中断系统的使用方法和中断应用程序设计 熟悉单片机应用系统设计、调试以及软硬件联合调试的方法。 二、实验设备 1、微机一台,Keil C集成开发环境 2、DP-51PRO.NET综合实验箱 3、Proteus仿真软件 注:本实验报告采用的单片机为AT89C51,其晶振频率为12MHz 三、实验内容 1、51单片机的P1口接8个发光二极管LED,相邻的4个LED为一组,实现两组LED每隔1秒交替点亮一次,周而复始,画出电路,并用C51编写程序。 提示:1秒延时函数建议采用定时器编程实现。 方法1——for循环嵌套实现1秒延时 //循环嵌套实现——8个LE
[单片机]
【51单片机实验】3-单片机并行口与<font color='red'>中断系统</font>应用
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved