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组成。

MCU基础_第1张图片

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

MCU基础_第2张图片

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.堆栈的概念

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

MCU基础_第3张图片

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

MCU基础_第4张图片

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

MCU基础_第5张图片

学习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。

MCU基础_第6张图片

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

MCU基础_第7张图片

MCU基础_第8张图片

4.中断

4.1 中断的概念和机制

MCU基础_第9张图片

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

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

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

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

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

MCU基础_第10张图片

MCU基础_第11张图片

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

MCU基础_第12张图片

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

函数调用:返回地址

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

MCU基础_第13张图片

MCU基础_第14张图片

4.4 中断向量表

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

MCU基础_第15张图片

4.5 中断优先级和中断嵌套

MCU基础_第16张图片

MCU基础_第17张图片

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

5.1 复位

MCU基础_第18张图片

5.2 时钟

MCU基础_第19张图片

5.3 存储器

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

MCU基础_第20张图片

MCU基础_第21张图片

MCU基础_第22张图片

5.4 总线、外设

MCU基础_第23张图片

6.小结

MCU基础_第24张图片

MCU基础_第25张图片

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

 

你可能感兴趣的:(EDA原理及应用,arm,mcu,cpu)