当前位置: 首页 > news >正文

微处理器原理与应用篇---常见基础知识(7)

微程序处理器中指令的执行过程:

一、微程序处理器的核心概念

微程序处理器通过微程序控制单元(Microprogrammed Control Unit) 实现指令执行,其本质是将传统硬布线逻辑控制的电路操作转化为存储在控制存储器(Control Memory, CM) 中的微指令(Microinstruction)序列。每条机器指令(如 ADD、JMP)对应一段微程序(微指令集合),执行过程即按序读取并执行微指令的过程。

二、指令执行的完整流程(以加法指令为例)
1. 取机器指令阶段(Fetch)
  • PC 工作:程序计数器(PC)指向当前指令的内存地址,CPU 从内存读取机器指令(如ADD R1, R2),存入指令寄存器(IR)。
  • PC 更新:PC 自动递增,指向下一条机器指令的地址(顺序执行时)。
2. 指令译码与微程序寻址
  • 操作码解析:IR 中的机器指令操作码(如ADD的操作码)被送入微地址形成部件,该部件根据操作码查找微程序入口表,生成对应微程序的起始地址(如ADD指令对应的微程序入口地址为μPC0)。
  • 微程序计数器初始化:微程序计数器(μPC)被置为该起始地址,指向控制存储器中第一条微指令。
3. 微指令执行阶段(Microinstruction Execution)

微指令存储在控制存储器中,每条微指令包含两部分:

  • 微操作字段:指定具体硬件操作(如 “打开 ALU 加法器”“从 R2 读取数据”)。
  • 下址字段:指定下一条微指令的地址(顺序执行或跳转)。

ADD R1, R2为例,微指令执行流程如下:

  1. 取操作数微指令
    • 微操作:控制数据总线从寄存器 R2 读取数据,存入暂存器 T1。
    • 下址:指向 “取 R1 数据” 的微指令地址μPC1
  2. 执行加法微指令
    • 微操作:控制 ALU 对暂存器 T1 和寄存器 R1 的数据执行加法运算,结果存入暂存器 T2。
    • 下址:指向 “存储结果” 的微指令地址μPC2
  3. 存储结果微指令
    • 微操作:将 T2 中的结果写回寄存器 R1。
    • 下址:指向 “微程序结束” 的地址(如μPC_end)。
4. 微程序下址生成与循环控制
  • 顺序执行:若微指令下址字段为μPC+1,则 μPC 自动递增,指向下一条微指令(如上述μPC0→μPC1→μPC2)。
  • 条件跳转:若微指令涉及条件判断(如运算结果为 0 则跳转),微地址形成部件根据状态标志(如 ZF 零标志)修改 μPC 值。例如,加法结果为 0 时,微程序跳转到特定处理流程。
5. 微程序结束与下一条机器指令准备
  • 当微程序执行到最后一条微指令(如μPC_end),其下址字段通常指向 “取指微程序” 的入口地址,触发新一轮机器指令的取指流程。
  • 至此,一条机器指令(如ADD)的执行完成,CPU 回到取指阶段,继续处理下一条机器指令。
三、微程序处理器的关键组件协作
组件作用
控制存储器(CM)存储微程序(微指令序列),通常为 ROM,掉电不丢失。
微程序计数器(μPC)指向当前待执行的微指令地址,功能类似普通 PC,但控制微指令的执行顺序。
微指令寄存器(μIR)存储当前微指令,解析微操作字段和下址字段。
微地址形成部件根据机器指令操作码、状态标志等生成微指令地址,实现微程序的寻址和跳转。
微操作控制逻辑根据 μIR 中的微操作字段,生成具体的硬件控制信号(如寄存器读写、ALU 运算选择)。
四、微程序执行与机器指令的关系
  • 一对多映射:一条机器指令对应一段微程序(多条微指令),例如ADD指令可能需要 3~5 条微指令完成取数、运算、存结果。
  • 时间特性:微程序执行速度受限于控制存储器的访问速度(通常比主存快,但比硬布线逻辑慢),因此微程序处理器的性能取决于微指令的执行效率。
五、微程序处理器的优势与应用
  • 灵活性:通过修改微程序可轻松扩展指令集(如添加新指令),无需修改硬件电路,适用于复杂指令集架构(CISC),如 x86 处理器。
  • 调试与维护:微程序可像软件一样调试,便于处理器功能迭代,早期大型计算机(如 IBM 360)和部分嵌入式微控制器(如某些 DSP)采用该架构。

总结

微程序处理器中指令的执行本质是 “机器指令→微程序→微指令” 的映射过程:先通过 PC 取机器指令,再根据操作码找到对应微程序的入口,由 μPC 控制微指令按序执行,每条微指令驱动硬件完成具体操作,最终实现机器指令的功能。这种 “以软控硬” 的方式平衡了硬件复杂度和指令集灵活性,是计算机控制单元设计的重要思想。

STM32中断优先级的两个属性:

一、中断优先级的基本概念

STM32 微控制器通过嵌套向量中断控制器(NVIC) 管理中断,每个中断向量(如定时器中断、串口中断)有两个与优先级相关的属性:

  1. 抢占优先级(Preemption Priority)
  2. 子优先级(Subpriority,又称响应优先级或次优先级)

这两个属性共同决定了中断的响应顺序和嵌套规则,具体由优先级分组机制配置。

二、两个优先级属性的具体含义
1. 抢占优先级(Preemption Priority)
  • 核心作用
    决定中断是否可以嵌套。高抢占优先级的中断可以打断正在执行的低抢占优先级中断,形成中断嵌套。
  • 数值特性
    • 数值越小,优先级越高。例如,抢占优先级 0 > 抢占优先级 1。
  • 典型场景
    • 若中断 A(抢占优先级 0)正在执行,此时中断 B(抢占优先级 1)触发,B 不会打断 A;
    • 若中断 C(抢占优先级 0)触发,C 会立即打断 A 的执行,待 C 处理完成后,A 继续执行。
2. 子优先级(Subpriority)
  • 核心作用
    多个中断的抢占优先级相同时,子优先级决定它们的响应顺序。子优先级高的中断先执行,但不能嵌套其他中断。
  • 数值特性
    • 同样,数值越小,优先级越高。例如,子优先级 0 > 子优先级 1。
  • 典型场景
    • 若中断 D 和 E 的抢占优先级均为 2,但 D 的子优先级为 0,E 的子优先级为 1,则 D 先于 E 执行;
    • 若 D 正在执行,E 触发时需等待 D 处理完成,无法嵌套。
三、优先级分组机制

STM32 通过优先级分组(PRIGROUP) 动态分配抢占优先级和子优先级的位数,可通过 SCB->AIRCR 寄存器配置,支持 5 种分组方式:

分组方式抢占优先级位数子优先级位数抢占优先级范围子优先级范围
Group00 位4 位无(固定为 0)0~15
Group11 位3 位0~10~7
Group22 位2 位0~30~3
Group33 位1 位0~70~1
Group44 位0 位0~15无(固定为 0)

示例

  • 若配置为Group2(2 位抢占 + 2 位子优先级):
    • 抢占优先级可取 0~3,子优先级可取 0~3;
    • 中断 F(抢占 2,子优先级 1)和中断 G(抢占 1,子优先级 3)同时触发时,G 先执行(抢占 1 > 抢占 2);
    • 若中断 H(抢占 2,子优先级 0)和 F 同时触发,H 先执行(子优先级 0 > 子优先级 1)。
四、优先级配置步骤
  1. 设置优先级分组

    c

    运行

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  // 配置为Group2  
    
  2. 为每个中断设置优先级

    c

    运行

    NVIC_InitTypeDef NVIC_InitStructure;  
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  // 串口1中断  
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  // 抢占优先级1  
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;         // 子优先级2  
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    NVIC_Init(&NVIC_InitStructure);  
    
五、特殊情况处理
  1. 相同抢占和子优先级
    • 若多个中断的抢占和子优先级完全相同,它们的响应顺序由硬件固定编号(IRQn) 决定,编号越小优先级越高(如 USART1_IRQn < USART2_IRQn)。
  2. 系统异常优先级
    • 系统异常(如复位、NMI、HardFault)的优先级独立于用户配置,通常高于所有中断,且不可抢占。

总结

STM32 的中断优先级机制通过抢占优先级子优先级的组合,实现了灵活的中断嵌套和响应控制:

  • 抢占优先级决定中断嵌套能力,高抢占优先级可打断低抢占优先级;
  • 子优先级在抢占优先级相同时决定执行顺序,且不能嵌套;
  • 优先级分组则允许用户根据需求动态分配两者的位数,平衡灵活性与资源利用率。

合理配置这两个属性,可确保关键任务(如传感器数据采集、安全控制)优先处理,提升系统的实时性和可靠性。

http://www.lryc.cn/news/573623.html

相关文章:

  • 反无人机系统:技术利刃如何守护低空安全?
  • 啥是 SaaS
  • C# .NET多线程异步记录日声,队列LOG
  • docker镜像封装与发布微服务学习
  • NotePad++ 怎么没有找到插件管理?
  • Python打卡DAY34
  • 【科研绘图系列】R语言绘制论文组合图形(multiple plots)
  • Redis快的原因
  • 【单调栈】-----【小A的柱状图】
  • 大零售生态下开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新研究
  • 如何用AI开发完整的小程序<7>—让AI微调UI排版
  • Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)
  • opencv 之双目立体标定算法核心实现
  • C#控制Button单击事件指定时间间隔触发
  • 计算鱼眼相机的内参矩阵和畸变系数方法
  • 风险矩阵与灰色综合评价
  • AMAT P5000 CVDFDT CVDMAINT Precision 5000 Mark 操作 电气原理 PCB图 电路图等
  • git 如何忽略某个文件夹文件
  • NW896NW859美光固态闪存NW893NX764
  • 激活函数为何能增强神经网络的非线性表达能力?
  • 【node】Mac m1 安装nvm 和node
  • WEB3合约开发以太坊中货币单位科普
  • 【数据结构与算法】数据结构核心概念系统梳理
  • go excel解析库xuri/excelize中的SAX
  • 【人工智能基础】初识神经网络
  • 2.jupyter切换使用conda虚拟环境的最佳方法
  • Flink SQL Connector Kafka 核心参数全解析与实战指南
  • Windows防火墙指南大全:安全红线与科学替代方案
  • 通俗理解物联网中的APN
  • Vmware WorkStation 17.5 安装 Ubuntu 24.04-LTS Server 版本