IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Linux应用开发(八)——中断体系结构 -> 正文阅读

[嵌入式]Linux应用开发(八)——中断体系结构


特此声明

各位有缘的好朋友们,因为我没有S3C2410这款板子,所以我只是在这里和大家分享我的读书笔记,希望博客中有出现不对的地方,欢迎大家指正!非常感谢

前言

  1. 了解ARM体系CPU的7种工作模式
  2. 了解S3C2410中断体系结构
  3. 掌握S3C2410的中断服务程序的编写方式

一 中断体系结构

ARM体系CPU的7种工作模式

  1. 用户模式:ARM处理器正常的程序执行状态
  2. 快速中断模式:用于高速数据传输或通道处理(USART串口等)
  3. 中断模式:用于通用的中断处理。(按键等)
  4. 管理模式:操作系统使用的保护模式
  5. 数据访问终止模式:当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护
  6. 系统模式:运行具有特权的操作系统任务
  7. 未定义指令中止模式:当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

除用户模式外,其他6种工作模式都属于特权模式。大多数程序运行在用户模式,进入特权模式是为了处理中断,异常,或访问被保护的系统资源

ARM体系的CPU工作状态

  1. ARM状态:此时处理器执行32位的字对齐的ARM指令。
  2. Thumb状态:此时处理器执行16位的,半字对齐的Thumb指令。
    其实还有Thumb2状态,就是既可以执行16位的指令,还可以执行32位的ARM指令。

ARM状态下寄存器结构

ARM920T有31个通用的32位寄存器和6个程序状态寄存器。这37个寄存器分为7组,进入某个工作模式时就是使用它那组的寄存器。有些寄存器,不同的工作模式下有自己的副本,当切换到另一个工作模式时,那个工作模式的寄存器副本将会被使用:这些寄存器称为副本寄存器
在这里插入图片描述有兴趣的朋友可以数一下,确实是37个。
其中R0~R15都是可以直接访问的,除R15外都是通用寄存器。他们既可以保存数据也可以用于保存地址。但是R13 ~R15比较特殊
R13:栈指针寄存器(SP),保存栈指针
R14:程序连接寄存器(LR),用来保存返回地址
R15:程序计数器(PC),用来存储CPU下一条执行指令的地址
快速中断模式有7个备份寄存器R8~R14,这使得进入快速中断模式执行很大一部分程序时(只要R0 ~ R7不改变),甚至不需要保存任何寄存器。其他模式都含有两个独占的寄存器副本R13,R14,这样可以令每一个模式拥有自己的栈指针寄存器和连接寄存器。

每种工作模式除了R0~R15外,还有第十七个寄存器 CPSR(当前程序状态寄存器),CPSR中一些位被用于标识各种状态,一些位被用于标识当前处于什么工作模式。
有兴趣的同学可以看下面的资料
在这里插入图片描述

中断控制器

CPU运行过程中,如何知道各类外设发生了某些不可预期事件,比如串口接收到了新数据,USB接口中插入了新设备,按下了某个按键等,主要是一下两种方法

中断检测方式

  1. 查询方式:程序循环的检查各设备的状态并作出相应反应。(优点:实现简单,缺点:占CPU)
  2. 中断方式:当事件发生时,硬件会设置某个寄存器;CPU在每执行完一个指令时,通过硬件查看这个寄存器,如果发现了所关注的事件发生,则中止当前程序的运行,跳转到另一个固定地址来处理事件,最后返回继续执行被中断程序。(实现复杂,效率很高)

中断处理流程

  1. 中断控制器汇集各类外设发出的中断信号,然后告诉CPU
  2. CPU保存当前程序运行环境(保护现场),调用中断服务程序来处理这个中断
  3. 在中断服务程序中通过读取中断控制器(优先级等),外设的相关寄存器来判断是哪一种中断,并调用相应的中断函数进行处理
  4. 清楚中断:通过读写中断控制器和外设相关寄存器来实现。
  5. 最后恢复现场。

中断流程图

在这里插入图片描述

中断控制寄存器

  1. SUBSPCPND寄存器:用来标识中断,每一位对应一个中断
  2. INTSUBMSK寄存器:用来屏蔽SUBSRCPND寄存器所标识的中断
  3. SRCPND寄存器:用来表示中断是否已经发生
  4. INTMSK寄存器:用来屏蔽SRCPND寄存器所标识的中断,INTMSK只能屏蔽被设为IRQ的中断。
  5. INTMOD寄存器:对应的中断设置为FIQ(1为快中断,0为普通中断)
  6. PRIOTY寄存器:优先级寄存器
  7. INTPND寄存器:经过中断优先级仲裁器选出优先级最高的中断后,这个中断在INTPND寄存器中的相应为被置为1,随后,CPU进入中断模式进行处理。
  8. INTOFFSET寄存器:被用来表示上面寄存器中哪一个被置1了

中断控制器操作实例:外部中断

按键中断的思路

K1~K4四个按键所接的CPU引脚可以外设成外部中断功能。按下某个按键时,CPU调用其中的中断服务程序来点亮对应的LED

实验代码

同学们可以上www.100ask.com进行下载对应的源码。
其实很简单就是寄存器的移位操作,和中断服务的配置就好了

总结

希望对大家有用吧,至少清楚ARM的工作模式,寄存器的分布规则,中断处理流程,中断处理体系,中断寄存器的配置。

加油!这本书已经看完三分之二了!

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:06:15  更:2022-01-01 14:06:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 16:16:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码