当前位置:网站首页>微机原理第五章笔记整理
微机原理第五章笔记整理
2022-06-23 17:37:00 【巴川笑笑生】
ARM特点
- 定长操作码,简化译码,便于流水线设计
- 多个通用寄存器,指令不局限于某个特定寄存器
- 操作数地址由寄存器或指令指定,地址自动增减
- 每条数据指令可对算数逻辑单元和位移器控制
- 多寄存器加载存储指令
- 所有指令都可条件执行
- 支持Thumb指令集
ARM7
具备MPU,将内存空间划分为不同域,实现特权等级访问控制
具备MMU,支持虚拟内存
Cortex-A
面向移动计算等的高性能处理器
Cortex-R
面向高性能实时应用
Cortex-M
关注低成本,低功耗应用
Corte-M3/M4
带SysTick,可为OS提供定时中断
具备两个堆栈指针
OS与异常使用主栈指针MSP
用户进程使用进程栈指针PSP
支持独立特权/非特权访问等级
CPU
32位RISC,三级(取址,译码,执行)流水线,哈佛结构
NVIC
6个优先等级
FPU
总线交换矩阵
面向各种存储器,片上片外不同类型设备及调试组件提供多条总线,可让数据和指令在不同总线并行传输。
带写缓冲
可配MPU
调试组件
调试指通过调试接口读取/修改处理器内部寄存器/存储器内容,发布调试命令
跟踪指运行期间在不停止处理器正常运行的情况下搜集信息
存储器管理
- 4GB线性地址空间
- 确定的存储器映射关系
- 支持大小端
- 位带操作
- 带写缓存
- 可选MPU
- 非对准传送
存储器映射
- 代码访问区
- 数据存储区
- 外设端口区
- 处理器内部控制调试部件区域
总线系统
I-Code总线
AHB-Lite32位总线,访问CODE区,取址以字为单位,对16位Thumb指令,一次取址取出两条
D-Code总线
AHB-Lite32位总线,访问区域同上,取数据
两总线物理独立,彼此之间有仲裁器,D-Code优先,为避免冲突可将将代码数据分开存储。代码存在flash中,数据存在SRAM中
System总线
32位APB总线,有时成AHB总线
APB/PPB总线
32位APB总线,负责外部私有外设
NVIC
包括240个外部中断,一个不可屏蔽中断NMI多个系统异常其中0~15分配给系统异常(实际用了11个,包括NMI)
其中
- 除复位&NMI,都可屏蔽
- 除复位,NMI,硬件错误,都可单独禁止/使能
- 除复位,NMI,硬件错误,固定高优先级外,中断有256级优先级,最多128可抢占优先级
- 响应时自动给出处理程序入口
- 中断和多种异常可由软件触发
- 自动保存/恢复现场
- 可选配唤醒中断控制器
SysTick
内核设备,包含24位,周期性触发中断,
中断向量表
为服务程序入口,每个入口4字节
默认位于存储空间最开始的位置
中断向量表可改变位置,称为重定位
Cortex-M3/M4编程模型
支持16位32位并存的Thumb-2技术,没有ARM和Thunmb之分
操作状态
Thumb
调试
调试状态下调试器可读写寄存器
两种状态下调试器可访问系统存储器
进入调试状态有两种方式
- 调试器发起暂停请求
- 处理器中调试部件产生调试状态
操作模式
处理模式
执行中断服务程序
线程模式
访问等级
处理模式
处于特权级,可访问所有资源
线程模式
- 特权线程
- 非特权线程
特权线程模式下可写CONTROL寄存器切到非特权模式,非特权模式不行,只能借助异常
特权/非特权差异
- 几条指令只能由特权模式执行否则异常
- 非特权不能访问大部分内核
- 非特权无法访问部分MPU区域
线程模式可选PSP/MSP,处理模式只能使用MSP,这使得应用栈和系统栈分离,更可靠。
系统复位后处于特权线程模式
常规寄存器
共16个,13个为32位通用,其余为堆栈指针MSP/PSP,链接寄存器LR和程序计数器PC
R0-R12为通用,R0-R7称低位,其余高位
许多16位Thumb只能访问低位寄存器,高位寄存器用于32位指令和少数16位指令
其中R0R3用于参数传递,R4R11用于局部变量,R12为子程序调用中间寄存器
R13栈指针
双堆栈只有一个可见,MSP是默认的
复位后PSP未定义,MSP在存储空间第一个字中
MSP和PSP后两位必为00,无法写
R14链接寄存器
用于函数返回地址
返回地址末尾必为0,可写为1标识处于Thumb状态
R15程序计数器
可读可写,读指令返回当前值加4
最低位为0,写入时最低位为1,否则被视为试图转入ARM,高级编程语言自动置1
特殊寄存器
用于标识处理器状态,处理器操作状态及设置中断屏蔽
高级语言不需要
程序状态寄存器
CPSR
当前程序状态
SPSR
用于异常处理时保存CPSR状态
中断嵌套时用堆栈保存
后用PSR代替CPSR,取消SPSR,异常时用LR保存PSR
PSR含有
APSR
应用程序状态寄存器
EPSR
执行程序状态寄存器
IPSR
中断程序状态寄存器
基于优先级的中断屏蔽
PRIMASK
只有一位起作用
若为1,屏蔽除复位,NMI,硬件错误外中断
结束后需清0
FAULMASK
同一位起作用
若为1,硬件错误也屏蔽,用于处理硬件错误,处理完自动清0
BASEPRI
可按数值屏蔽中断
8位可伸缩,取决于制造商
屏蔽中断号大于寄存器值的
CONTROL
nPRIV
设置线程模式下特权访问级
0为特权,1为非特权
SPSEL
用于切换栈指针类型
为0只有MSP,1为PSP
处理模式复位默认为0
FPCA
处理FPU
SCB系统控制块
多寄存器数据结构
堆栈结构
用于
- 中断响应时保存下一指令地址,状态寄存器内容
- 保存现场,使用的寄存器
- 用于主程序和子程序参数传递
- 局部变量
分为递增/减栈,递增栈指向高地址生长
满/空堆栈,满堆栈栈顶指针指向栈顶元素,空堆栈指向下一个
Cortex-M满递减
Cortex-M存储系统
存储器映射
共4G
| 区域 | 用途 |
|---|---|
| 00000000~1FFFFFFF | 512M,Icode指令,Dcode数据,放程序代码,中断向量表,数据 |
| 20000000~3FFFFFFF | 512M,片上SRAM,数据或代码,第1M支持位段操作 |
| 40000000~5FFFFFFF | 512M,片上外设,系统总线,第1M位段 |
| 60000000~9FFFFFFF | 两个512M,片外存储 |
| A0000000~DFFFFFFF | 片外外设/其他存储 |
| E0000000~FFFFFFFF | 系统。内部私有外设总线E0000000E003FFFF,用于NVIC,SysTick,MPU,多数在特权级。外部私有外设总线E0040000E00FFFFF,其他调试,特权。自定义E0100000~FFFFFFFF |
程序一般放在代码区,否则需要额外周期,程序不允许在外设区和系统存储区执行
连接存储器与外设
主要使用AHB Lite,适用于单主控设备,需要总线矩阵仲裁
私有外设使用APB
位段操作
或位带
一次存储器操作访问一个位,位段区域中每一个字被映射为一个位段别名区域,一个位段别名区域对应位段区域某字的某位
位段区域可普通访问,也可通过位段别名访问
可保证操作原子性
存储器访问权限
属性
- 可缓冲
- 可缓存
- 可执行
- 可共享
总线接口可写缓冲
多处理器需要共享属性确保在各缓存单元是一致的
排他访问
使用信号量
bootloader
Cortex-M异常处理
异常状态
非激活状态
挂起状态
发出服务请求正等待处理
激活状态
正接受处理
激活并挂起状态
正接受处理相同异常源又产生
优先级寄存器
3~8位,优先使用高位
中断优先级分组
可设置SCB划分优先级分组
异常流程
接受请求
如果满足
- 处理器运行
- 异常使能
- 异常优先级高于当前
- 异常未被屏蔽
进入异常
- 多个寄存器和返回地址压栈
- 取异常向量
- 取异常处理程序指令
- 更新NVIC寄存器和内核寄存器(PSR,LR,PC)
执行异常处理
异常返回
设置中断挂起和清楚中断挂起
需要两个寄存器
边栏推荐
- Leetcode question brushing: hash table 01 (valid Letter ectopic words)
- CSDN salary increase secret script: Jenkins integrated allure test report complete tutorial
- 【剑指Offer】45. 把数组排成最小的数
- [Huazhong University of science and technology] information sharing for the first and second examinations of postgraduate entrance examination
- 微信小程序报错[ app.json 文件内容错误] app.json: app.json 未找到
- 1、 Array -- sliding window problem -- subarray with the smallest length -- fruit basket problem
- The draganddrop framework, a new member of jetpack, greatly simplifies the development of drag and drop gestures!
- 反直觉的三门问题,80%的人都会错?
- 实现领域驱动设计 - 使用ABP框架 - 通用准则
- [binary tree] flip the binary tree to match the preorder traversal
猜你喜欢
![微信小程序报错[ app.json 文件内容错误] app.json: app.json 未找到](/img/ab/5c27e1bb80ad662d1a220d29c328e0.png)
微信小程序报错[ app.json 文件内容错误] app.json: app.json 未找到

QT implements a rule-based machinetranslation system course paper + assignment + project source code

Landing of global organizational structure control

Five star certification! Know that Chuangyu has passed the evaluation of the content audit service system of China Academy of Communications

leetcode刷题:哈希表04 (两数之和)

Remote connection raspberry pie in VNC Viewer Mode

What does the science and technology interactive sand table gain popularity by virtue of

Rancher2.6全新Monitoring快速入门

云原生行业应用崛起,从“可用”到“好用”有多远?

基于QT实现的图形学绘制系统 文档+项目源码及可执行EXE文件+系统使用说明书
随机推荐
Wiley- Open Science Joint Symposium of the documentation and information center of the Chinese Academy of Sciences, lecture 2: open access journal selection and paper submission
org. apache. ibatis. binding. BindingException: Invalid bound statement (not found):...
Leetcode question brushing: hash table 01 (valid Letter ectopic words)
[WebSocket] 开发在线客服系统知识点-websocket返回状态码的含义
Shell脚本编写
QT implements a rule-based machinetranslation system course paper + assignment + project source code
渗透测试基础,初识渗透测试
计算机学院改考后,网络空间安全学院也改考了!南京理工大学计算机考研
Implementing Domain Driven Design - using ABP framework - repository
【Wwise】Wwise嵌入Unity后打包出现没有声音问题
Leetcode 1218. 最长定差子序列(提供一种思路)
Latex compiled successfully but could not be output to PDF
Pause update Bulletin - walking Pikachu
leetcode刷题:哈希表02 (两个数组的交集)
Will programmers become very professional in the future?
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):...
The draganddrop framework, a new member of jetpack, greatly simplifies the development of drag and drop gestures!
csdn涨薪秘籍之Jenkins集成allure测试报告全套教程
Reading papers (51):integration of a holonic organizational control architecture and multiobjective
Strong cache and negotiation cache in http