zoukankan      html  css  js  c++  java
  • ARM微控制器与嵌入式系统

    个牛人在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

     抛开晶体管的诸多严谨的限制,只将其看做高电压导通或者低电压导通的开关

    与门=与非门+非门

     

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

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

     

     逻辑的组合 产生功能模块

    半加器(不能进位)

    全加器

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

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

    译码电路

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

    多路选择

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

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

    电路分析:

    当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'的值不改变,也从而达到存储数据的功能)

    电路分析:

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

     

     电路分析:

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

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

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

     

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

     通用CPU的发展之路

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

    MCU  VS  CPU

                                                                                    

    嵌入式系统

     

     

    2.4八卦计算机历史

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

    2.6ARM历史与MKL25Z128 MCU

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

    第三章    MCU基础

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

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

    MCU的概览

     分析其中的CPU

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

     将ALU拎出来

    下面分析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的东西来完成

    那么操作数又是如何加载到CPU的呢?

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

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

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

    当指令组成程序时:

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

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

    上面文章的中文翻译版

     堆栈多数时候指的只是

    定义:

    作用:

    堆栈的运行机制:

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

    堆栈溢出(难点)

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

    学习一种cpu时:

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

    两种常见的mcu模型:

     3.2.2堆栈的概念  头脑体操

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

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

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

     初始状态

    完成堆栈初始化

    a值入栈

    b值入栈

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

    执行子函数

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

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

    3.3.1 ARM的体系结构

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

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

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

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

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

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

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


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


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


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

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


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

     

     

    以上和16位cpu相似


    函数调用有不同之处:

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

     

    总结:

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

    3.4中断的概念和机制

    1、走近中断

     

     2、定义中断

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

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

     

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

    (3)中断的工作流程

    3.5中断子程的概念和编程

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


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

    第四章  ARM微控制器的开发

    4.1 第一种外设:io

     

     

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

  • 相关阅读:
    【串线篇】Mybatis缓存原理
    【串线篇】Mybatis之动态sql
    【串线篇】Mybatis之模糊查询
    【串线篇】sql映射文件-分布查询(上)association 1-1
    【串线篇】SQL映射文件-联合查询(完结association+cellection)
    【串线篇】加谈数据库之连接join
    【串线篇】数据库设计之加谈n-n
    【串线篇】SQL映射文件-resultMap自定义封装
    【串线篇】sql注入问题
    【串线篇】SQL映射文件select简单查询标签
  • 原文地址:https://www.cnblogs.com/yueruifeng/p/6838506.html
Copyright © 2011-2022 走看看