目录
一、工作状态和模式
【两种工作状态】
THUMB | THUMB指令集 | 2 Byte / 指令 |
ARM | ARM指令集 | 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 寄存器的值。