嵌入式系统的发展历史:SCM→MCU→SoC
基于ARM处理器的嵌入式Linux系统
ARM架构支持32位的ARM
指令和16位的Thumb
指令
ARM处理器系列
- T:表示支持Thumb指令集
- D:表示支持片上调试(Debug)
- M:表示内嵌硬件乘法器(Multipler)
- I:支持片上断点和调试点
- E:支持增强型DSP功能
- J:支持Jazelle技术,即Java加速器
- S:表示支持全合成(full synthesizable)
常用ARM汇编指令及ATPCS规则:
相对跳转指令:b,bl
bl
的功能除了跳转之外,还将返回地址到lr
寄存器中
ldr指令从内存读取数据到寄存器,str指令把寄存器的值存储到内存中,操作数据都是32位
GPIO接口
GPIO(General Purpose I/O Ports):
通用输入输出接口
控制存储器
SDRAM:Synchronous Dynamic Random Access Memory
,同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。
SDRAM原理讲解
RAM(Random Access Memory)和ROM(Read Only Memory)
这里有详细的讲解:SDRAM原理(强烈推荐)
SDRAM的内部是一个存储阵列,阵列如同表格一样,将数据“填进去”。先指定一个行(Row),再指定一个列(Column),就可以准确地找到所需要的单元格,这就是SDRAM寻址的基本原理。
汇编指令:
-
B
,BL
:引起处理器转移到“子程序名”处开始执行 -
ldr
:地址读取伪指令,条件:第二个参数前有=
时。否则为内存访问指令,表示从内存中读取数据到内存器。 -
str
指令把寄存器的值存储到内存中。 -
ldm
和stm
属于批量内存访问指令,只用一条指令就可以读写多个数据。
状态寄存器的访问指令
msr cpsr, r0/*复制r0到cpsr中*/
mrs r0, cpsr/*复制cpsr到r0中*/
伪指令
.extern
定义一个外部符号
.text
表示下面的语句属于代码段
.global
将文本中的某个程序标号定义为全局的
内存管理单元MMU
内存管理单元(Memory Management Unit)简称MMU,它负责虚拟地址到物理地址的映射
,并提供硬件机制的内存访问权限检查
。现代的多用户多进程操作系统通过MMU使得各个用户进程都有自己独立的地址空间:地址映射
功能使得个进程拥有“看起来”一样的地址空间,而访问权限的检查可以保护每个进程所用的内存不会被其他进程破坏。
内存的访问权限检查是MMU的主要功能之一
主要有以下两点:
- “域”决定是否对某块内存进行权限检查
- “AP”决定如何对某块内存进行权限检查
TLB
Translation Lookaside Buffers
:转译查找缓存
当CPU发出一个虚拟地址时,MMU
首先访问TLB
。如果TLB
中含有这个虚拟地址的描述符
,则直接利用此描述符进行地址转换和权限检查;否则MMU访问页找到描述符后再进行地址转换
和权限检查
,并将这个描述符填入TLB中(如果TLB已满,则利用round-robin
算法找到一个条目,然后覆盖它),下次再使用这个虚拟地址时就可以直接使用TLB中的描述符了。
Cache
基于程序访问的局限性,在CPU通用寄存器和主存之间设置一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入到这个存储器,供CPU在一段时间内使用。
MMU实例程序流程:开始→关闭WATCHDOG→设置栈指针→初始化SDRAM→复制第二部分代码到SDRAM中→设置页表→启动MMU→重设栈指针→调到0xB004000→循环点LED
NAND Flash控制器
NAND Flash
在嵌入式系统中的地位与PC上的硬盘类似,用于保存系统运行所必须的操作系统、应用程序、与用户数据、运行过程中产生的各类数据。
Flash
存储器件的可靠性需要考虑:位反转、坏块、可擦除次数
操作NAND Flash
时,先传输命令,然后传输地址,最后读/写数据,期间要检查Flash
状态。
NAND Flash读操作流程
选择芯片→发出读命令→发出地址→等待数据就绪→读取数据→结束后,取消片选信号
中断体系结构
ARM体系CPU的7种工作模式:
用户模式(usr)
快速中断模式(fiq)
中断模式(irq)
管理模式(svc)
数据访问终止模式(abt)
系统模式(sys)
未定义指令中止模式(und)