ARM微控制器与嵌入式系统
个牛人在ARM实现嵌入式系统的过程
第一章 概览
1.1课程概览
- 认识ARM嵌入式系统(什么是ARM?什么是嵌入式系统?)
- 备战智能车
- 在科技活动中玩起来
- 积累计算机、电路基础知识
1.2如何学好嵌入式系统
- 兴趣
- 热爱
- 玩起来
第二章 绪论
2.1计算机的基本概念、发展历史
- ABC
- 冯.诺依曼体系结构
- 进制转换ASCIItab
- 数字(digital discrete如:指针走过变盘)与模拟(analog continue如:数字时钟||时间上是间隔的,数值上是量化的)
- 计算机系统中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加深理解
- A + B = C 操作数:A B ; 运算 : + ; 运算结果: C ; 标志位:若C的结果发生溢出,则flag会产生溢出记录;
- A>B 操作数:A B ; 运算 :> (本质上是减法运算,产生一个最高位为1的补码,即负数) ; 运算结果 : 1 or 0 ; 标志位 : 记录产生的结果是0 or 1;
- 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时:
- 了解其可编程的寄存器组
- 了解其指令集
两种常见的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
ARM微控制器与嵌入式系统的更多相关文章
- 微控制器(MCU)架构介绍
微控制器(MicroController)又可简称MCU或μC,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM.RAM.CPU.I/O集合在同一个芯片中, ...
- 痞子衡嵌入式:ARM Cortex-M内核那些事(2)- 第一款微控制器
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是第一款Cortex-M微控制器. 1.天生荣耀:ARM Cortex-M处理器由来 ARM公司自2004年推出ARMv7内核架构时,摒弃 ...
- 痞子衡嵌入式:微控制器CPU性能测试基准(EEMBC-CoreMark)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是微控制器CPU性能测试基准CoreMark. 在嵌入式系统行业用于评价CPU性能指标的标准主要有三种:Dhrystone.MIPS.Co ...
- 开发平台支持Arm Cortex-M的微控制器上人工智能训练
开发平台支持Arm Cortex-M的微控制器上人工智能训练 Development platform enables AI training on Arm Cortex-M-based microc ...
- 《如何学习基于ARM嵌入式系统》笔记整理
author:Peong time:20190603 如何学习基于ARM嵌入式系统 一.嵌入式系统的概念 从硬件上讲,将外围器件,与CPU集成在一起. 从操作系统上讲,定制符合要求的系统内核 从应用上 ...
- 痞子衡嵌入式:恩智浦半导体全系无线(BLE, Zigbee, Thread, 2.4G, Sub-1G)微控制器芯片一览
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦半导体全系列无线微控制器芯片. IoT物联网是未来的趋势,半导体厂商作为IoT产业的上游,主要提供核心的无线芯片,作为半导体知名厂 ...
- 嵌入式Linux驱动学习之路(一)嵌入式系统的软硬件架构
硬件资料: 操作系统:(非虚拟机) zws@z-pc:~$ lsb_release -aNo LSB modules are available.Distributor ID: Ubuntu Desc ...
- 嵌入式系统 Boot Loader 技术内幕
转载:http://www.ibm.com/developerworks/cn/linux/l-btloader/index.html 1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统 ...
- 新唐Cortex-M0微控制器的省电管理
新唐科技的NUC1xx包含NUC101.NUC100.NUC120.NUC130和NUC140,是以ARM Cortex-M0为核心的32位微控制器(MCU),经由不同时钟的设定,最高可以达到 50M ...
随机推荐
- 单硬盘根分区扩容(非LVM)
单用户模式(内核参数末尾加single)救援模式(用光盘启动,选第三个,rescue installed system) 救援模式有什么作用: 1可以更改root密码:2恢复硬盘.文件系统操作:3系统 ...
- TweenJS----前端常用的js动画库,缓动画和复制动画的制作,效果非常好。
TweenJS类库主要用来调整和动画HTML5和Javascript属性,提供了简单并且强大的tweening接口. http://www.createjs.cc/tweenjs/ http://ww ...
- 详解VMware 虚拟机中添加新硬盘的方法
一.VMware新增磁盘的设置步骤 (建议:在设置虚拟的时候,不要运行虚拟机的系统,不然添加了新的虚拟磁盘则要重启虚拟机) 1.选择“VM”----“设置”并打开,将光标定位在“硬盘(SCSI)”这一 ...
- oracle数据库死锁原因及分析
定义: 当两个用户希望持有对方的资源时就会发生死锁. 即两个用户互相等待对方释放资源时,oracle认定为产生了死锁,在这种情况下,将以牺牲一个用户作为代价,另一个用户继续执行,牺牲的用户的事务将回滚 ...
- 【设计】PC Web端框架组件
https://uedart.com/demo/templatesWebKit/index.html#g=1&p=%E4%BD%9C%E5%93%81%E9%A6%96%E9%A1%B5 移动 ...
- (八)UML之状态图
一.概念 状态图(Statechart Diagram)主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列,引起状态转移的事件(Event),以及因状态转移而伴随的动作(Act ...
- Mac下载工具软件提示损坏
今天装Navicat的时候一直报错文件损坏,最后请教别人才知道,这里记录下: 原因: Mac默认不允许任何来源的软件安装,安全问题,需要我们设置下即可: 解决方法: 方法一: 方法二: 终端输入命令: ...
- antd ——按钮
<ButtonGroup> <Button type="primary" htmlType="submit" onClick={this.ha ...
- Linux - 对比net-tools与iproute2
简介 net-tools包含ifconfig.route.arp和netstat等命令行工具,用于管理和排查各种网络配置. 起源于BSD TCP/IP工具箱,旨在配置老式Linux内核的网络功能. 自 ...
- office word 設置默認的縮放為100%, office word set default Zoom to 100% permanently
如題,今天剛好遇到一個老師不知道什麽原因造成Microsoft office word 每次打開都會縮放到70% ,所以google 了一下,還真有解決方法. 只要將默認的 使用者範本檔 Normal ...