STM32Note初识单片机(2)

2020-02-13来源: eefocus关键字:STM32Note  单片机  运作方式

本期主要介绍单片机核心--CPU的架构、组成及运作方式。


架构之争

目前微型计算机系统的架构主要有X86、MIPS、ARM、PowerPC、SPARC这几种,但市场上最常见的还是X86和ARM架构的,我们接下来以这两种为例了解下微型计算机体系结构,至于剩下几种如果读者有兴趣就只能自行百度了(任天堂、索尼PS、摩托罗拉了解一下)。


在了解X86和ARM架构之前,我们先介绍下复杂指令集CISC(Complex InstucTIon Set Computer)和精简指令集RISC(Reduced InstrucTIon Set Computer)。上期我们说过CPU运行是通过取指令完成的,根据CPU可执行指令我们分成CISC和RISC两种。

  1. CISC: 机器指令复杂,这就使得硬件设计逻辑也极其复杂,晶体管数量庞大,为了进行高效运算,需要较长的流水线(下面会介绍)、复杂的分支预测机构、多级Cache、支持超线程虚拟化等。

  2. RISC: 指令集数量少,指令简单,硬件逻辑简单,功耗比较低,适合移动平台应用。

X86架构是CISC的代表,目前由Intel主导,比较有名的PenTIum、Core都是这种架构。而ARM则是RISC的代表,这种架构的知识产权掌握在ARM公司手中(他们只卖知识产权,具体芯片根据不同生产厂家会有所不同),目前比较常见的用于移动手机端像是苹果三星华为,还有嵌入系统,比较常见的有树莓派,STM32用的当然也是这种架构。


ARM市场

ARM家族中最经典的是ARM7、ARM9、ARM11,虽然现在市场上还有,但已经有要被取代的趋势,而接手市场的则是下面三个系列:

  1. Cortex-M系列:为单片机驱动系统提供的低成本优化方案,应用于传统的微控制器、智能传感器等,主流的有M0、M1、M3、M4。

  2. Cortex-A系列:针对开放式操作系统的高性能处理器(如Android、Linux等),主要用于智能手机、数字电视等。

  3. Cortex-R系列:针对实时系统,满足实时性需求,用于汽车的制动系统等。

CPU组成

CPU内部结构.png

CPU由两部分构成,EU(ExecuTIon Unit)和BIU(Bus Interface Unit),其中EU负责指令执行,而BIU主要是利用总线与存储器、I/O相连完成数据读写。CPU中主要包括上图中几个模块(不包括总线连接部分):

  1. 程序计数器PC:CPU读取指令时需要知道指令在存储器中的存放地址,PC就是用来存储指令地址的寄存器。通常情况下它是按1递增设计的,当CPU执行一条指令的时候,PC会自动加一指向下一条需要执行的指令(实际上不是加一,但是大多数情况程序是顺序执行的)。程序计数器PC决定了指令执行的顺序,所以这个寄存器的值是不可以外部随意修改的。

  2. 指令解码电路:由于存储器存放数据是按照二进制存放的,所以需要解码电路将机器码转化为运算电路可用的命令。

  3. 运算电路:运算电路被称为ALU(Arithmetic and Logic Unit),能完成加法乘法等算术运算,也能进行AND、OR等逻辑运算。

  4. 内部寄存器:内部寄存器是存储临时信息的场所。包括存储运算结果的通用寄存器,也有一些特殊的寄存器,比如说存储运算标志的标志寄存器等。事实上,运算电路在进行运算时并不是完全在内存中进行,而是将数据复制到通用寄存器中在进行的。

CPU结构.png

上面这张图是经典的X86架构(8086处理器)的CPU结构图(没有找到比较详细的ARM架构的结构图。。)。图中的IP其实就是程序计数器PC,在实际的CPU中并没有寄存器叫做PC,PC只是代表一种功能,程序计数器在X86中叫做IP,而在ARM则由寄存器R15实现此项功能。


CPU工作原理

我们来举个例子说明CPU工作流程:

LDR R1, 0x0001    ;LDR为读内存命令,将内存中地址0001的内容存到寄存器R1中

LDR R2, 0x0002    ;将内存0002的内容读到R2中

ADD R1, R1, R2    ;将R1与R2的值相加,结果存在R1中


下面是代码段和数据段存放的内容(数据段和代码段二者共用存储器,实际存放地址一般由段首地址与段内偏移地址共同确定,这里我们认为Code和Data分别表示代码段和数据段段首地址,表格中为偏移地址):

CPUExample.jpg

程序执行过程:

  • 第一步:CPU读取当前PC指向地址即代码段0001的指令内容,经过解码电路解码,CPU从数据段0001地址读出内容3存入R1,PC自动加一变成0002。

    结果:R1-->3,PC-->0002

  • 第二步:CPU读取代码段0002的指令内容,解码后,CPU读取数据段0002的内容4存入寄存器R2,PC加一变成0003。

    结果:R2-->4,PC-->0003

  • 第三步:CPU读取0003的指令,将R1的内容与R2相加,结果存入R1。

    结果:R1-->7,PC-->0004

CPU工作原理大致就是这样。

CPU指令执行模式

CPU指令执行有两种模式,流水线执行模式和乱序执行模式。这两种模式同时存在于CPU中,以流水线为主,但是为了提高CPU中电路的工作效率,引入乱序执行模式。目前X86架构在乱序执行方面领先于ARM架构。

流水线.jpg

一般情况下,在EU执行上一个周期BIU取的指令的同时,BIU取下一条指令存放于指令队列中。如果EU需要总线完成如读取存储器数据的任务时,则给出命令,使得BIU在下个周期不取指令,通过总线获取数据给EU完成上个指令,之后恢复正常流水线。乱序执行在这里就不具体介绍了,主要是将不需要当前运算电路的命令同时执行,以提高效率,具体实现方式只能由读者自行百度了。


本期内容就到这里了,下一期会介绍存储器以及读写内存时CPU与存储器的时序配合。

关键字:STM32Note  单片机  运作方式 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488067.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32之FSMC驱动LCD屏应用
下一篇:带你一步步了解STM32启动代码

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于52单片机控制编码器显示程序
#include "reg52.h"    #define uchar unsigned char#define uint unsigned int#define LCD1602_DATAPINS P0sbit LCD1602_E=P2^7;sbit LCD1602_RW=P2^5;sbit LCD1602_RS=P2^6;sbit DIR=P1^0;sbit STEP=P1^1;sbit K1=P3^1;sbit K2=P3^0;typedef unsigned int u16;   //对数据类型进行声明定义typedef unsigned char
发表于 2020-02-08
单片机步进电机转速控制程序(速度LED显示)
单片机源程序如下://数码管位 高位-----低位//四个按键控制步进电机:正转,反转,加1,减1//上电时电机启动,数码管上显示速度最小档1,加减档位均能通过数码管显示出来,电机采用单双八拍方式//电机转速一共10档,通过按键调节转速 //电机正转时最高位数码管显示0,反转时显示1  #include<reg51.h>#define uchar unsigned char#define uint unsigned int#define led P0//数码管段选#define haha P2sbit s1 = P1^0;sbit s2 = P1^1;sbit s3 = P3^0;sbit
发表于 2020-02-08
单片机步进电机转速控制程序(速度LED显示)
STC单片机+DM134实现LED多段控制
 单片机源程序如下://============================================================================//================翼芯科技 LED流星灯8段16段==软件生成生成数据=================//============================================================================   //  此源码版权属 翼芯科技 全权享有,如欲引用,敬请署名并告知//         
发表于 2020-02-08
STC单片机+DM134实现LED多段控制
基于51单片机的数字电容测量仪设计
本设计详细介绍了一种基于单片机的数字式电容测量仪设计方案及实现方法。设计的主要方法是采用555芯片构成单稳态触发器,将电容容量转换为脉冲宽度。通过单片机的计时器测量脉宽, 根据已知的R值,通过单片机的运算功能,计算出电容容量,最后,再通过单片机的普通I/O口控制液晶屏显示出电容容量的计算结果。系统的测量范围为10pF~ 500uF, 具有多个量程,可根据用户需要由用户选择,与用户的交互是通过键盘实现,不同量程的实现是通过单片机的I/O口控制继电器的吸合与断开来选择不同的R值,从而实现不同的量程。同时,本设计注重设计方法及流程,首先根据原理设计电路,再通过protues仿真,利用keil编程,进而借助altium designer
发表于 2020-02-08
基于51单片机的数字电容测量仪设计
基于51单片机的pwm直流电机调速
仿真原理图如下单片机源程序如下:#include <reg52.h>/********************************************** 定时器初值*********************************************/#define T0HIGH        0xec#define T0LOWW        0x8a
发表于 2020-02-08
基于51单片机的pwm直流电机调速
手把手教你单片机串口通信-基础篇
1的个数之和应为偶数。接收字符时,对1的个数进行校验,若字符不一致,则说明传输数据过程中出现错误。代码和校验发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据时,同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,一致则无差。循环冗余校验通过某种数学预算实现有效信息与校验位之间的循环校验,常用语对磁盘信息的传输、存储区的完整性校验。串口的基本结构SBUF:51单片机中的特殊寄存器,串行数据缓冲器(一个接收一个发送),两个其实是共用的一个地址99H,但是两个在物理上面是分开的。当发送使用时,就采用SBUF=XXX;  
发表于 2020-02-08
手把手教你单片机串口通信-基础篇
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved