ARM微控制器与嵌入式系统

时间:2021-10-28 20:07:08

个牛人在ARM实现嵌入式系统的过程

第一章  概览

1.1课程概览

  1. 认识ARM嵌入式系统(什么是ARM?什么是嵌入式系统?
  2. 备战智能车
  3. 在科技活动中玩起来
  4. 积累计算机、电路基础知识

1.2如何学好嵌入式系统

  1. 兴趣
  2. 热爱
  3. 玩起来

第二章  绪论

2.1计算机的基本概念、发展历史

  1. 改变世界:机械之美——机械时期的计算设备

  2. Turing machine    

  3. ABC
  4. 冯.诺依曼体系结构
  5. 进制转换ASCIItab
  6. 数字(digital  discrete如:指针走过变盘)与模拟(analog  continue如:数字时钟||时间上是间隔的,数值上是量化的)
  7. 计算机系统中0、1的表示  例如:用某一电压段来表示高电平和低电平(TTL 和 CMOS 标准

 2.2从晶体管到CPU

 

 

ARM微控制器与嵌入式系统

 

 抛开晶体管的诸多严谨的限制,只将其看做高电压导通或者低电压导通的开关ARM微控制器与嵌入式系统

 

 

ARM微控制器与嵌入式系统

与门=与非门+非门

 ARM微控制器与嵌入式系统

 

由控制电路为0为1来控制电路的通断,当其为0时out端处于高阻状态(电路视为断路)状态不确定(可以对应为turingmachine中纸带上的空白),当其为1时电路导通out对应in

ARM微控制器与嵌入式系统

 

把晶体管和开关抛开,更多从逻辑上来理解。更多的逻辑关系:

ARM微控制器与嵌入式系统

 

 ARM微控制器与嵌入式系统

 逻辑的组合 产生功能模块

半加器(不能进位)

 

ARM微控制器与嵌入式系统

 

全加器

ARM微控制器与嵌入式系统

 

将抽象出来的“方块”组合得到一个4位加法器

ARM微控制器与嵌入式系统

 

数据流向的控制电路也可以通过逻辑电路来实现

译码电路

ARM微控制器与嵌入式系统

分析可知只有当“A端”为“1 0 0 1”时“S端”可以输出“1”,结合之前的三态门可以实现取出特定编号(如:“1 0 0 1”)中数据的功能。

 

多路选择

ARM微控制器与嵌入式系统

由两个输入信号产生四个控制信号

 以上,我们大概可以将其称为组合逻辑电路(其输出值总是取决于当前的输入值,一有输入马上会看到输出)。下面进入时序逻辑电路(有反馈的出现,out值还取决于其上一值等。)

 

ARM微控制器与嵌入式系统

电路分析:

当c为0时d的输入会被锁死(即d的值对输出不起作用)例子:1、(c = 1;d = 0;)->(Q = 0;Q' = 1;) 2、(c = 0;d = 0;)->(Q = 0;Q' = 1;) 3、(c = 0;b = 1;)->(Q = 0;Q' = 1)        (当c为0时e,f必都为1;若上次Q = 0,Q' = 1或Q = 1,Q' = 0;由于反馈的存在Q和Q'的值不改变,也从而达到存储数据的功能)

 

ARM微控制器与嵌入式系统

电路分析:

通过不断交替给clk 0 1以实现移位操作(也可以看做乘除法)(在实际中此电路并不起作用,因为数值传递很快,当给clk  1 时电路中所有位都会刷新为0)

 

 ARM微控制器与嵌入式系统

 

ARM微控制器与嵌入式系统

 

 

 电路分析:

 

D触发器级联起来就可以实现以上功能而不会出错。

 

 一个概念CPU(大概几百几千个晶体管)

ARM微控制器与嵌入式系统

 

 

 

ARM微控制器与嵌入式系统

 

 功能模块---助记符---汇编---程序

 

2.3概念CPU、微控制器MCU和嵌入式系统

 通用CPU的发展之路

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

微控制器MCU不仅仅是一个简单的CPU

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

MCU  VS  CPU

 

                              ARM微控制器与嵌入式系统                                                  ARM微控制器与嵌入式系统

 

嵌入式系统

 ARM微控制器与嵌入式系统

 

 

 ARM微控制器与嵌入式系统

 

2.4八卦计算机历史

2.5不同领域 不同系列的嵌入式系统

2.6ARM历史与MKL25Z128 MCU

 

 

 

 

第二章到此结束,在通过本章学习后我们从计算机聚焦到了MCU上,不局限于课堂的几十分钟,习惯于阅读英文文档(最好是官方的)。

 

第三章    MCU基础

3.1CPU的基本结构和运行机制

ARM微控制器与嵌入式系统

上图是一个基本的MCU内部结构,在了解了MCU内部结构后,在本章中最重要的是在此基础上理解编程的内部运行机理。接下来我们首先学习MCU内部结构。

 

MCU的概览

ARM微控制器与嵌入式系统

 

 

 分析其中的CPU

 

ARM微控制器与嵌入式系统

红色(运算器,存储器,控制器)必要,灰色非必要

ARM微控制器与嵌入式系统

 将ALU拎出来

 

ARM微控制器与嵌入式系统

下面分析Quiz,以对四要素尤其是Status加深理解

  1. A + B = C      操作数:A  B    ; 运算 : +   ; 运算结果: C ; 标志位:若C的结果发生溢出,则flag会产生溢出记录;  
  2. A>B              操作数:A  B    ; 运算 :> (本质上是减法运算,产生一个最高位为1的补码,即负数)    ; 运算结果 : 1 or 0 ; 标志位 : 记录产生的结果是0 or 1;
  3. A>>=1(A等于A右移一位)操作数:A  ;运算: >>=;运算结果:一个数 ;标志位:当右移至0时产生一个标志;

运算逻辑单元所产生的结果及状态位需要保存下来,大部分CPU会有叫做register的东西来完成

ARM微控制器与嵌入式系统

 

ARM微控制器与嵌入式系统

 

 

 

那么操作数又是如何加载到CPU的呢?ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

既然数据可以存储在Memory中,那么如何存取就涉及到了地址与存储了:

ARM微控制器与嵌入式系统

这一切又是如何运行起来的:

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

在时序电路(“依次”)的驱动下CPU完成指令的获取:

 

ARM微控制器与嵌入式系统

当指令组成程序时:

 

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

被调函数完成执行后后会返回主调函数,这就要求PC = adress ,那么如何完成呢?早期CPU会增加一个返回地址寄存器,但是如果出现函数的嵌套调用,就会要求有多个返回地址寄存器,那么问题就出现了,寄存器不能无限制的加下去,这就出现了一种新机制-------------->堆栈

 3.2.1堆(heap)栈(stack)的概念

上面文章的中文翻译版

 

 堆栈多数时候指的只是

定义:

ARM微控制器与嵌入式系统

作用:

ARM微控制器与嵌入式系统

堆栈的运行机制:

ARM微控制器与嵌入式系统

堆和栈是有很大区别的,但在嵌入式系统中通常不使用堆。

ARM微控制器与嵌入式系统

堆栈溢出(难点)

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

sp指针寄存器,pc指针寄存器,数据寄存器,标志位寄存器。。。称为register file(寄存器组)or programmer‘s model(编程模型) 。

学习一种cpu时:

  1. 了解其可编程的寄存器组
  2. 了解其指令集

 

两种常见的mcu模型:

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

 3.2.2堆栈的概念  头脑体操

下面通过一个小程序来理解堆栈的运行机理

ARM微控制器与嵌入式系统

程序跑在一个如上图所示的12系列的mcu中

其寄存器组分别为:一个16位的D寄存器(可分为两个8位的数据寄存器A B),两个寻址寄存器X Y,一个栈指针寄存器,一个程序计数器,一个状态位寄存器。

 

ARM微控制器与嵌入式系统

 初始状态

 

ARM微控制器与嵌入式系统

完成堆栈初始化

 

ARM微控制器与嵌入式系统

a值入栈

 

ARM微控制器与嵌入式系统

b值入栈

 

ARM微控制器与嵌入式系统

调用子函数,pc发生跳转,在栈中保存子函数执行完后要执行的代码的地址,sp发生跳转

 

ARM微控制器与嵌入式系统

执行子函数

 

ARM微控制器与嵌入式系统

子函数执行返回语句,将栈中的0x30,0x0c的值赋给pc指针寄存器,sp指针寄存器返回到子函数执行前的位置,之前的0x30,0x0c依然在栈中只是不被栈所承认(注意并不是清空只是可以被心之所覆盖)。

 

ARM微控制器与嵌入式系统

 

ARM微控制器与嵌入式系统

 这个程序实现了a b值交换

3.3.1 ARM的体系结构

 进入ARM Cotex M的32位微处理器

常见的微处理器架构:powerpc       coldfire      arm

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

以下是对xPSR这个32位寄存器地详细分析:

xPSR的每一位都会有其对应的功能,我们通过其别名(APSR(应用程序状态寄存器)   IPSR (中断程序寄存器)  EPSR(程序运行状态寄存器))来访问其特定位;

ARM微控制器与嵌入式系统

APSR:访问最高四位,来判断是否有溢出,是否进位。。。

IPSR:访问低位,保存中断号

EPSR:访问中间的T,是否有中断发生


 

 

优先级屏蔽寄存器(PRIMASK  register)在这里开关总中断

ARM微控制器与嵌入式系统


 

cpu状态寄存器(用户态(辅堆栈)or特权态(主堆栈))

ARM微控制器与嵌入式系统

 


 

thread mode :(进程模式)简单理解为运行main和main调用

handler mode:(句柄模式)发生中断和响应中断

 

 

 

ARM微控制器与嵌入式系统

 


 

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 3.3.2ARM体系结构----头脑体操

ARM微控制器与嵌入式系统

 ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

 ARM微控制器与嵌入式系统

 

以上和16位cpu相似

 


 

 

函数调用有不同之处:

  • 函数调用指令结束后的指令的地址被记录在LR寄存器而不是压入堆栈(armcpu在发生一级调用时会这样做)
  • ARM体系结构向下兼容(thumb and arm )的特性:在将地址赋给LR寄存器时将最低位置1,在将地址值值赋给pc指针寄存器时将值再恢复为0;

ARM微控制器与嵌入式系统

 

 ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

 

ARM微控制器与嵌入式系统

总结:

  • 完成了两个内存中值的交换
  • 堆栈先入后出的性质    

 

3.4中断的概念和机制

1、走近中断

 ARM微控制器与嵌入式系统ARM微控制器与嵌入式系统

 2、定义中断

ARM微控制器与嵌入式系统

 3、中断的使用(只是中断发生时可让CPU响应的条件,具体使用方式在下节给出)

(1)打开/关闭总的控制中断的开关

 ARM微控制器与嵌入式系统

(2)设置某一中断发生的标志

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

(3)中断的工作流程

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

ARM微控制器与嵌入式系统

3.5中断子程的概念和编程

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

3.6 复位、时钟、存储器和总线

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统


ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

3.7 小结:MCU的总体结构和程序运行机制

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

第四章  ARM微控制器的开发

4.1 第一种外设:io

 

ARM微控制器与嵌入式系统ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

 ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

 ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

ARM微控制器与嵌入式系统

 

4.2 IO外设的编程实操-点亮LED