news 2026/7/24 20:03:53

MCU基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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函数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/24 20:02:49

系统架构设计师考试:高效备考策略与资源推荐

639 | 系统架构设计师考试:高效备考策略与资源推荐 考系统架构设计师,就像参加一场马拉松。 不是比谁起跑快,而是比谁能坚持到最后。 一、考试概览 考试信息 ┌───────────────────────────────────────────────────…

作者头像 李华
网站建设 2026/7/24 20:02:22

如何快速选择最佳行情服务器:mootdx智能连接优化指南

如何快速选择最佳行情服务器:mootdx智能连接优化指南 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在金融数据分析和量化交易中,获取实时、准确的行情数据至关重要。moot…

作者头像 李华
网站建设 2026/7/24 19:59:15

深度解析TI ADS8353/7853 ADC评估套件:从硬件设计到性能测试实战

1. 项目概述与核心价值在精密数据采集系统的设计过程中,选型一颗合适的模数转换器(ADC)仅仅是第一步。更关键、也更具挑战性的是,如何将这颗ADC芯片的理论性能,在真实的电路板上完整地“复现”出来。芯片手册上那些令人…

作者头像 李华
网站建设 2026/7/24 19:56:28

在windows10里的apache2.4加php8.2的环境下上安装Laravel10框架

参考教材《Laravel框架开发实践》,该书版本是2021年9月第一版,来安装Laravel框架。书上是在apache2.4和php7.2的环境下安装Laravel5.8框架。按照书上的方法安装,遇到了一些问题,安装没有成功。电脑以前已经安装好了apache2.4和php…

作者头像 李华
网站建设 2026/7/24 19:56:19

5分钟掌握PPT悬浮计时器:告别演讲超时的智能解决方案

5分钟掌握PPT悬浮计时器:告别演讲超时的智能解决方案 【免费下载链接】ppttimer 一个简易的 PPT 计时器 项目地址: https://gitcode.com/gh_mirrors/pp/ppttimer 你是否曾在重要演讲中因超时被主持人打断?是否在汇报演示时为时间控制而分心&#…

作者头像 李华