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

MCU基础

目录

1.CPU的基本结构和运行机制

1.1 ALU

1.2 Register Files

1.3 Control Unit

2.堆栈的概念

3.ARM体系结构

3.1 ARM的发展过程

3.2 ARM Cortex M Register Files(Programmer's Model)

4.中断

4.1 中断的概念和机制

4.2 中断的允许和禁止、现场保护

4.3 中断子程序和函数调用的区别

4.4 中断向量表

4.5 中断优先级和中断嵌套

5.复位、时钟、存储器、总线

5.1 复位

5.2 时钟

5.3 存储器

5.4 总线、外设

6.小结


1.CPU的基本结构和运行机制

一个基本的MCU的结构图如下所示。主要由处理器CPU,存储器Memory,总线Bus和外设Peripheral组成。

CPU主要包含逻辑运算单元ALU,寄存器组register files,控制单元control unit;有些CPU还有浮点运算单元,MMU,Cache Management。一个典型的CPU如下图所示。

1.1 ALU

ALU由四个要素组成:操作数、运算、运算结果和标志位。运算结果和标志位往哪里存呢?寄存器。存放标志位的寄存器有个特殊的名字叫程序状态寄存器(Program Status Register,PSR;有的叫条件码寄存器Condition Code Register,CCR)。PSR的每一位称为状态位,且代表的含义不同,比如溢出标志位等。每执行一条指令,相应的状态位都会进行更新。每条指令影响的状态位都是不一样的,需要查芯片手册。

1.2 Register Files

寄存器用于临时保存和获取操作数;任何CPU都包含若干个通用/专用寄存器;寄存器的数目和宽度是衡量CPU的重要指标。ALU的操作数和运算结果可以来自寄存器或者数据存储器(对个人PC而言是内存或者硬盘,对MCU而言,是CPU以外的存储部分

1.3 Control Unit

那是什么让上面的一切自动的运行呢?-Control Unit。控制单元的主要作用:1、指令解析:分析该指令需要执行何种操作;2、数据流向:确定该指令用到的操作数来源和产生结果的去向。简言之就是,控制单元将一条指令解析为对ALU,Register,Memory的控制,来明确做什么运算,数据从哪来,到哪去。

那又一个问题来了,控制单元上的指令是从哪里来的?程序是指令的有序集合,指令和数据一样,也是保存在存储器当中,这些指令序列“依次”进入CPU执行。下一条待执行的指令地址保存在PC寄存器(Program Counter,程序计数器)中。如果发生函数调用或者中断,返回的地址从何而来呢?这就要引出另一个概念:堆栈。

2.堆栈的概念

如何保存返回地址呢?一开始想到的办法就是设计返回地址寄存器,但是如果发生嵌套调用的话,会出现寄存器不够用。于是设计了一种机制:栈(能够保持数据的顺序,后入先出,覆盖并不是销毁)。那栈都有哪些用途呢?

堆栈指针寄存器(Stack Point,SP)

堆栈溢出。有时候,电脑出现的蓝屏可能是堆栈溢出或者是越界访问,PC指向了存储器一段莫名其妙的空间,并试图取出值来运行,程序跑飞了。对操作系统而言,可能认为是越界访问,嵌入式系统可能认为是非法指令,无法解释,程序就复位了。

学习C语言感觉不到堆栈,因为C语言的函数调用,参数传递等都是编译器帮你隐性地使用了堆栈。用会骗语言做中断编程时会接触到这个概念。

写道这里,再回头看看CPU的结构,自己在脑子里过一遍,基本上就能知道一段程序是怎么被CPU执行的了!

CPU一直在发展,从8位到16位、32位(ARM Cortex M,PowerPC,ColdFire)、64位;时钟的频率也越来越高,从Hz到MHz、GHz,频率越高,执行每条指令的时间就越短。学习CPU重点关注两点:1、CPU由哪些寄存器是编程的对象;2、ALU对应的指令集,即有哪些指令,代表的含义是什么

3.ARM体系结构

3.1 ARM的发展过程

ARM公司只做CPU设计,采用出售IP的方式运营,半导体制造商无需自己设计CPU。

3.2 ARM Cortex M Register Files(Programmer's Model)

4.中断

4.1 中断的概念和机制

1、主程序中设置号中断发生的条件(Gobal IE,IF)

2、按下键,电路以信号的形式通知CPU,中断发生了

3、CPU自动调用该中断服务子程序。

需要说明的是,中断总开关打开后,它可能在任意一个时间点上调用。

4.2 中断的允许和禁止、现场保护

现场保护:考虑到效率,压有限个寄存器入栈,如果编程人员用到更多,可以自己手动压栈。

4.3 中断子程序和函数调用的区别

函数调用:返回地址

中断子程序:返回地址和之前压入栈的寄存器的值。

4.4 中断向量表

当一个中断发生时,CPU如何找到中断服务子程序并执行呢?--中断向量表。

4.5 中断优先级和中断嵌套

5.复位、时钟、存储器、总线

5.1 复位

5.2 时钟

5.3 存储器

1G(B) = 1024M(B);1M = 1024KB;1KB=1024B;1Byte = 8bit;

5.4 总线、外设

6.小结

MCU上电过程:给SP指针赋值,将开发工具生成的入口函数代码第一条指令的地址给PC,最后一条指令Jump to main函数。

http://www.cnnetsun.cn/news/3626408.html

相关文章:

  • 系统架构设计师考试:高效备考策略与资源推荐
  • 如何快速选择最佳行情服务器:mootdx智能连接优化指南
  • 深度解析TI ADS8353/7853 ADC评估套件:从硬件设计到性能测试实战
  • 在windows10里的apache2.4加php8.2的环境下上安装Laravel10框架
  • 5分钟掌握PPT悬浮计时器:告别演讲超时的智能解决方案
  • 如何实现毫秒级歌词同步:Listen1跨平台音乐播放器的完整技术解析
  • CTF流量分析神器:5分钟掌握CTF-NetA终极指南
  • 抖音视频下载终极指南:douyin-downloader批量去水印工具完全教程
  • ELF文件与库的原理
  • 【20年ML系统老兵手记】:为什么你训出的模型一部署就崩?训练/推理数据流、内存模型、精度路径的3维撕裂分析
  • (99页PPT)全量系统业务战略架构图模板(附下载方式)
  • ADS8353/ADS7853评估套件实战:从硬件配置到软件分析的高精度ADC性能验证
  • 从状态码、请求头到 TLS 指纹的合规排查方法 TLSFOWARD抓包工具
  • 为什么你的vLLM部署比别人慢3.7倍?——2024主流推理框架(vLLM、TGI、Ollama、LightLLM)吞吐量与首token延迟全对比
  • 【信号去噪】基于小波阈值实现心电信号去噪附matlab代码
  • AMD Ryzen SDT调试工具:30分钟从新手到性能调优专家的终极指南
  • 2026外出客户拜访整理录音,怎么选合适的手机录音转文字助手
  • 高性能抖音批量下载系统:基于双重策略的自动化内容采集框架
  • MSP430F22x2/F22x4超低功耗MCU实战:从架构解析到传感器系统设计
  • GetQzonehistory:三步永久保存你的QQ空间数字记忆
  • 题解:Edge Reverse
  • 2026年主流YOLO模型横评与工程实践指南
  • 如何实现一站式音乐聚合播放:Listen1跨平台音乐播放器技术揭秘 [特殊字符]
  • Kimi LeetCode 3677. 统计二进制回文数字的数目 Rust实现
  • 《绝区零》3.0版本卡池流水分析:多平台数据对比与运营策略
  • 中兴光猫解锁终极指南:3步免费开启高级权限
  • 2026年AI Agent平台OpenClaw架构解析与实战测评
  • 终极AMD Ryzen性能调试指南:免费开源SMU调试工具完全解析
  • 计算机毕业设计之网上选课系统
  • 3分钟解锁音乐自由:ncmdump解密转换实战指南