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函数。

 

  • 7
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾日叁問

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值