第014课 异常与中断

目录

一、工作状态和模式

二、异常

三、中断控制器

四、中断源

4.1 外部中断

4.2 定时器中断


 

一、工作状态和模式

【两种工作状态】

THUMBTHUMB指令集2 Byte / 指令
ARMARM指令集4 Byte / 指令

【七种工作模式】

除用户模式外,其他模式均为特权模式

  CPSR Mode位
USR
用户模式10000
FIQ快速中断模式10001
IRQ中断模式10010
SVC管理模式10011
ABT中止模式10111
UND未定义模式11011
SYS系统模式11111

【CPSR】当前程序状态寄存器,只有一个,用于指示当前模式下的程序状态,格式如下:

【SPSR】保存程序状态寄存器,格式与CPSR相同,每种模式都有一个,共 7 个,用于保存前一模式(从该模式跳转至当前模式);同时,每种模式都有各自专用的 R14 LR 和 R13 SP 寄存器,FIQ模式有自己专用的 R8 - R14 寄存器。

 

二、异常

【异常】程序在运行过程中发生由于某些问题导致的程序异常事件。异常向量表如下,涉及 5 种异常:

【进出异常】

进出异常时的操作
 硬件自动进行软件手动进行
进入异常

1、复制 PC 到 LR_exception;

2、复制 CPSR 到 SPSR_exception;

3、修改 CPSR 的 Mode 位为 exception;

4、将 PC 值设为异常向量表的相应值。

1、设置 SP 的值,给异常分配一个新的栈;

2、将 LR(存储着之前的 PC 值)进行偏移,偏移量为0/4/8,由芯片手册可知;

3、将 R0 - R12、LR 的值压入栈,防止被更改;

4、调用异常处理函数。

 

退出异常

从 SPSR_exception 中恢复 CPSR 值。

1、恢复压入栈中的 R0 - R12值;

2、将栈中的 LR 值恢复到 PC。

 

三、中断控制器

首先要在 CPSR 中使能 I位 和 F 位,分别对应 IRQ 和 FIQ,否则不支持中断。

中断控制器的工作原理如下:

1、中断源或次级中断源发出中断请求后,中断源寄存器 SRCPND 的相应位置 1(可以有多位同时为 1);

2、如果中断模式寄存器 INTMOD 中相应位为 1,则直接进入 FIQ 模式处理中断;

* FIQ 模式下只能处理一个中断请求(因为没有经过 INTMSK 和 PRIORITY 两个选择器,来哪个就处理哪个)所以 INTMOD 寄存器中同时只能有一位为 1;

3、否则进入 IRQ 模式,如果中断屏蔽寄存器 INTMSK 中相应位为 1,则该中断被屏蔽,不予处理;

4、中断优先级寄存器 PRIORITY 决定了中断优先生成模块的工作方式,中断优先生成模块原理如下:

5、所有未屏蔽的 IRQ 在中断优先生成模块中经过两级仲裁选出优先级最高的那一个,把中断挂起寄存器 INTPND 的相应位置 1;

6、CPU 进入 IRQ 模式开始处理中断请求;

7、中断处理完成后,需要将 SRCPND 和 INTPND 中的相应位清零。

 

【其他】

1、可以通过读取 INTPND 或 INTOFFSET 知道当前正在处理哪个中断源;

2、有些中断位对应多个次级中断源,所以需要 SUBSRCPND 和 INTSUBMSK 寄存器;

3、通过读取 SUBSRCPND 可以知道有哪些次级中断源被触发,但如果有多个同属一个中断位的次级中断源被触发,且正在处理其中的某一个,则仅通过 INTPND 或 INTOFFSET 是无法确定当前正在处理哪个的。这时需要了解次级中断源的工作原理,找到其中记录中断触发的地方。

 

四、中断源

S3C2440 支持 60 个中断源,对应中断控制器中寄存器的 32 个位,每个位对应一个或多个中断源。

4.1 外部中断

外部设备可以通过 连接到外部中断引脚并向引脚发送中断信号 来向 CPU 请求中断。

S3C2440 支持 24 个外部中断引脚:

  • 通过 EXTINT 寄存器配置中断触发的方式(高低电平、上升沿、下降沿等),使能外部中断信号的过滤
  • 通过 EINTFLT 寄存器配置外部中断信号的滤波时钟和滤波宽度
  • 通过 EINTMASK 寄存器对外部中断进行开关
  • 通过 EINTPEND 寄存器指示外部中断是否被触发

4.2 定时器中断

S3C2440A有五个16位定时器。定时器0、1、2和3具有脉冲宽度调制(PWM)功能。定时器4只有一个内部定时器,没有输出引脚。计时器0有一个死区生成器,用于大电流设备。

这些定时器都是下行计时器,结构图如下:

寄存器:TCFG0、TCFG1、TCON、TCNTBn、TCMPBn、TCNTOn

用于外围低速设备的时钟信号 PCLK 进入定时器后,先由预分频器(TCFG0)进行分频,然后再由时钟分频器分频,定时器从选择器中选择一个信号或使用外部时钟 TCLK 作为计时时钟(TCFG1)。

定时器初始值存储在 TCNTB 寄存器中,TCMPB 寄存器用于脉冲宽度调制 PWM。

【PWM】定时器从初始值下行到 0 形成一个周期,可以为 TCMPB 设置一个 [ 0, TCNTB ] 的值,当 TCNTB 下行到TCMPB时,定时器的输出产生一个上升沿,TCNTB 下行到 0 时,发出中断信号,并产生一个下降沿。这样,如果设置自动加载(TCON),定时器就输出了一个稳定的时钟,通过 TCNTB 设置时钟的周期,通过 TCMPB 设置脉冲宽度,就生成了脉冲宽度可调制的时钟信号。

可以通过 TCNTO 寄存器读取当前 TCNTB 寄存器的值。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值