西安邮电大学计算机学院嵌入式复习

第1章 嵌入式系统基础

1.什么是嵌入式系统?有什么特点?应用在哪些领域?

2.嵌入式系统组成?嵌入式处理器如何分类?典型的嵌入式处理器有哪些?

3.操作系统概念,什么是EOS?常用的EOS有哪些?

4.嵌入式系统开发主要步骤和流程

1.1.1嵌入式系统概念

   嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

(1)专用性:是专为目标对象设计定制的,与应用对象紧密结合,是面向用户 。

(2)嵌入性:是目标对象系统的组成部分,系统的软、硬件都嵌入到目标对象体系结构中,形成一个以计算技术、电子技术和特定的工程应用相结合的综合体。

(3)计算机系统: 是以计算机为基础,软、硬件可裁剪的专用计算机系统。

特点:1.技术密集,资金密集,高度分散,不断创新的知识集成系统

2.系统内核小

3.专用性强

4.系统精简

5.具有高实时性

在以下几个领域内应用:

1.工业控制

2.交通管理

3.信息家电

4.家庭智能管理系统

5.电子商务

6.环境工程与自然

7.机器人

8.机电产品

1.1.2嵌入式系统组成(层次划分)

嵌入式系统主要由嵌入式处理器,外围设备,嵌入式操作系统应用软件组成。

嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、软件层和功能层组成。

硬件层:嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)

中间层:在硬件层与软件层之间,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP)。

任务:相关底层硬件的初始化及配置,设备驱动程序 。

系统软件层:由嵌入式操作系统(EOS) 、文件系统、图形用户接口(GUI)、网络系统及通用组件模块等组成。

功能层:基于操作系统开发的应用程序组成,用来完成对被控对象的控制功能 。

嵌入式处理器分类:

1. 嵌入式微处理器(Micro Processor Unit,MPU)

2. 嵌入式微控制器(Microcontroller Unit, MCU)

3. 嵌入式 DSP 处理器(Embedded Digital Signal Processor, EDSP)

4. SoC(system on chip)片上系统

典型的嵌入式处理器

1. MCS51 单片机

2. ARM 处理器

3. MIPS 处理器

4. PowerPC 处理器

5. MC68000 处理器

6. X86 处理器

1.3  嵌入式操作系统

  操作系统是计算机中最基本的程序。 操作系统是对系统资源进行管理的软件。

主要管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理。

嵌入式操作系统(EOS, Embedded Operating System) 是一种支持嵌入式系统应用的操作系统软件。

几种典型的EOS:

1.Linux 

2.μC/OS-II

3.Windows CE

4.VxWorks

5.Android

6.PalmOS

7.QNX

1.4嵌入式系统开发

嵌入式系统的开发过程可以分为需求分析、体系结构设计、软硬件设计(软件设计、硬件设计)、系统集成系统优化与测试等阶段。

第2章ARM技术及体系结构

了解 ARM芯片及版本情况

1.ARM处理器技术,CISC&RISC及特点对比,哈佛结构&普林斯顿结构,三级流水线技术原理与实现,指令执行过程中PC指向位置?

2.ARM7的工作状态及模式,模式与37个寄存器如何对应?两种状态如何切换?两种指令集SP/LR/PC/CPSR,CPSR状态与控制位。

3.ARM体系的异常处理,异常如何进入与退出?需要做哪些工作?异常处理与流水线如何对应?异常向量表的概念。

4.ARM体系的存储方式,小端与大端模式存储

2.2.1    RISC技术

CISC:复杂指令集(Complex Instruction Set Computer) 具有大量的指令和寻址方式

8/2原则:80%的程序只使用20%的指令,大多数程序只使用少量的指令就能够运行。

RISC:精简指令集(Reduced Instruction Set Computer) 在通道中只包含最有用的指令

确保数据通道快速执行每一条指令 使CPU硬件结构设计变得更为简单

RISC的结构的特点如下:

简化指令集,只保留常用的基本指令;

设计大量的通用存储器,减少访存的次数;

采用装载/保存(load-store)结构,支持流水线技术,使每个周期时间相等;

采用简单的指令格式、规整的指令字长和简单的寻址方式。

单机器周期指令,即大多数的指令都可以在一个机器周期内完成。、

除以上特点之外, ARM增加:数据处理指令可同时包含ALU运算和移位处理功能;地址自增和自减功能;装载/保存指令中具有数据的批量传输;大多数指令提供条件执行 。

2.2.2流水线技术

CPU中的流水线技术是一种将指令分解为多步,并让不同指令的各步操作重叠执行,从而实现几条指令并行处理,以加速程序运行过程的技术。   

ARM7采用三级流水线、ARM9采用五级流水线,ARM10采用六级流水线、ARM11采用八级流水线。      

以ARM7三级流水线为例,由三个独立的部件分别执行:

取指,从存储器中装载一条指令到CPU中;

解码,识别并解释将要被执行的指令;

执行,将解码识别的指令进行计算处理并将结果写回寄存器。  

2.2.3哈佛结构&普林斯顿结构

哈佛结构是一种将程序中指令和数据分开存储的存储器结构。它是一种并行存储体系结构,程序存储器和数据存储器采用不同的总线,从而提供了较大的存储器带宽 。

冯·诺伊曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置。

ARM7采用了普林斯顿结构,在随后的ARM9、ARM10、ARM11、ARM Cortex等处理器采用了哈佛结构 。

冯·诺伊曼结构

哈佛体系结构

2.4 ARM7的工作状态及模式

ARM7TDMI处理器内核包含2套指令系统,分别为ARM指令集和Thumb指令,并且各自对应1种处理器的状态:

ARM状态:32位,处理器执行字方式的ARM指令,处理器默认为此状态;

Thumb状态:16位,处理器执行半字方式的Thumb指令。

注意:两个状态之间的切换并不影响处理器模式或寄存器内容。

ARM状态和Thumb状态切换时,使用带状态的转移指令BX,BX为寄存器寻址方式,。

处理机或进入到异常模式时,其工作状态默认为ARM状态,通过BX指令可以切换回Thumb状态。

ARM7微处理器共有37个32位寄存器,其中31个为通用寄存器(R0-R15,R8_fiq,R9_fiq,R10_fiq,R11_fiq,R12_fiq,R13_svc,R13_irq,R13_fiq,R13_abt,R13_und,R14_svc,R14_irq,R14_fiq,R14_abt,R14_und),6个为状态寄存器(CPSR,SPSR_svc,SPSR_irq,SPSR_fiq,SPSR_abt,SPSR_und)。

其中每个状态寄存器的32位只是用了12位。

2.5.3  程序状态寄存器

31-24标志域  23-16状态域  15-8扩展域  7-0控制域 

模式控制位M[4:0]:

M[4:0]=0b10000:用户模式USR

M[4:0]=0b10001:快速中断模式FIQ

M[4:0]=0b10010:中断模式IRQ

M[4:0]=0b10011:管理模式SVC

M[4:0]=0b10111:中止模式abt

M[4:0]=0b11011:未定义模式und

M[4:0]=0b11111:系统模式sys

在每一种处理器模式中有一组相应的寄存器。在任意一种处理器模式下,可见的寄存器包括 15 个通用寄存器(R0~R14)、一个或者二个状态寄存器以及程序计数器(PC)。

在所有的寄存器中,有些是各模式共用同一个物理寄存器,有些寄存器是各个模式自己拥有独立的物理寄存器

r0~r3 主要用于子程序间传递参数

r4~r11 主要用于保存局部变量,但在 Thumb 程序中,通常只能使用 r4~r7 来保存局部变量

r12 用作子程序间scratch 寄存器,即 ip 寄存器

r13 通常用做栈指针,即 sp

r14 寄存器又被称为连接寄存器(lr),用于保存子程序以及中断的返回地址

r15 用作程序计数器(pc),由于 ARM 采用了流水线机制,当正确读取了 PC 的值后,该值为当前指令地址加 8 个字节,即 PC 指向当前指令的下两条指令地址。

CPSR和SPSR都是程序状态寄存器,其中SPSR是用来保存中断前的CPSR中的值,以便在中断返回之后恢复处理器程序状态。

2.6  ARM体系的异常处理

异常的进入

当一个异常导致模式切换时,内核自动的做如下处理:

将异常处理程序的返回地址(加固定的偏移量)保存到相应异常模式下的LR;

将CPSR的当前值保存到相应异常模式下的SPSR;

设置CPSR为相应的异常模式;

设置PC为相应异常处理程序的中断入口向量地址,跳转到相应的异常中断处理程序执行;

异常的退出

返回到发生异常中断的指令的下一条指令处执行,即就是说将LR中的值减去偏移量后移入PC;

将SPSR的值复制回CPSR;

清除在进入中断时置位的中断禁止标志

异常向量表:用于存放处理器遇到异常时所需要执行的代码。

2.7ARM体系的存储方式

在ARM中,存储地址为A的数据存储规则如下:

1.位于地址A的字包含的字节位于地址A、A+1、A+2 和A+3;
2.位于地址A的半字包含的字节位于地址A和A+1;
3.位于地址A+2的半字包含的字节位于地址A+2和 A+3;

4.位于地址A的字包含的半字位于地址A和A+2。
但是这样并不能完全定义字、半字和字节之间的映射,存储器系统使用下列两种映射机制中的一种。

小端存储格式

  在小端存储格式中,对于地址为A的字单元,其中字节的低位字节到高位字节地址顺序为A.A+1、A+2、A+3;对于地址为A的半字单元,其中字节的低位字节到高位字节地址顺序为A、A+1。也就是说,按照数据的高字节存放在高地址中的顺序进行存储

大端存储格式

  在大端存储格式中,对于地址为A的字单元,其中字节的低位字节到高位字节地址
址统一编址(即顺序为A+3,A+2,A+1,A);对于地址为A的半字单元,其中字节的低位字节到高位字
节地址顺序为A+1,A。也就是说,按照数据的低字节存放在高地址中的顺序进行存储。

举个栗子:

第三章 ARM指令集介绍

1.ARM指令的寻址方式,总结与具体判断

2.ARM指令格式及分类,汇编指令与C语言对比,  数据处理指令、分支指令、加载/存储指令、交换指令、程序状态寄存器(PSR)处理指令、协处理指令和SWI异常产生指令七大类,了解机器码,指令的机器码格式与汇编指令的分析。

3.指令的难点:存储器访问指令的理解与应用,多寄存器访问指令含义与解析。

4.伪指令含义与应用,MOV,LDR 加载与LDR伪指令有何不同?例题与作业题

ARM指令的寻址方式

3.3.2ARM指令格式及分类

1.数据处理指令

例子:ADD指令

ADD R1, R2, R3   ;这条指令将寄存器R2和R3中的值相加,然后将结果存储在寄存器R1中。

2.分支指令

例子:B指令(无条件跳转)

B label   ;这条指令会导致处理器无条件跳转到标签label所指示的地址处继续执行代码。

BL DELAY  ;LR<=PC-4,跳转到DELAY标号处。

BX label3  ;处理器跳转到标签label3所指示的地址处,并根据目标地址的属性(ARM模式或Thumb模式)来设置当前执行模式。这允许在ARM和Thumb模式之间进行切换。

例子:PC指令

MOV PC,LR  ;跳转到LR寄存器置顶的位置

3.加载/存储指令

例子:LDR指令(从内存加载到寄存器)

LDR R1, [R2]  ;这条指令将内存地址R2处的值加载到寄存器R1中。

例子:STR指令(从寄存器存储到内存)

STR R1, [R2]  ;这条指令将寄存器R1中的值存储到内存地址R2处。

4.交换指令

例子:SWP指令(交换寄存器值)

SWP R1, R2, [R3]  ;这条指令将寄存器R1中的值与内存地址R3处的值交换,同时还将寄存器R2中的值与内存地址R3+4处的值交换。注意这里涉及到两个值的交换,是一个原子操作。

5.程序状态寄存器(PSR)处理指令

例子:MSR指令(修改程序状态寄存器)

MSR CPSR, R0  ;这条指令将寄存器R0中的值复制到当前程序状态寄存器CPSR中。CPSR包含了处理器的状态信息,如条件标志位等。

6.协处理指令

例子:CDP指令(协处理器数据处理)

CDP p, opcode_1, CRd, CRn, CRm, opcode_2  ;这条指令用于向协处理器发送数据处理请求。其中p指定协处理器的编号,opcode_1和opcode_2指定操作码,CRd、CRn和CRm指定协处理器的寄存器。

7.SWI异常产生指令

例子:SWI指令(软件中断)

SWI 0x123456  ;这条指令会产生一个软件中断,中断号由立即数0x123456指定。处理器在执行这条指令时会跳转到预设的中断处理程序去处理该中断。中断处理程序通常用于提供系统调用或实现操作系统的功能。在ARM体系结构中,SWI指令通常用于用户模式程序请求内核服务。

ARM指令的机器码格式包括以下部分:

  1. 操作码(opcode):指示指令的基本操作。
  2. 寄存器地址(register list):指定操作数的寄存器地址。
  3. 立即数(immediate):用于提供常数值或位移量。
  4. 条件码(condition code):用于指定指令的执行条件。

汇编语言与C语言在语法和语义上有很大的差异。以下是一些的对比点:

  1. 语法:汇编语言的语法比较简单,通常由操作码和操作数组成,而C语言则具有更复杂的语法结构,包括变量声明、控制结构、函数等。
  2. 语义:汇编语言直接对应于机器码,语义比较明确,而C语言则需要进行编译和链接才能转换为机器码,语义在编译过程中可能会发生变化。
  3. 执行效率:汇编语言编写的程序通常比C语言编写的程序执行效率更高,因为汇编语言直接对应于机器码,没有编译和链接等中间过程。
  4. 可读性和可维护性:C语言编写的程序通常比汇编语言编写的程序更容易阅读和维护,因为C语言具有更高级的抽象和编程接口。
  5. 系统依赖性:汇编语言与具体的处理器架构密切相关,因此不同的处理器架构需要使用不同的汇编语言。而C语言是一种跨平台的编程语言,可以在不同的操作系统和处理器架构上运行。

3.3.3存储器访问指令的理解与应用

1.存储器访问指令的理解与应用:

  存储器访问指令用于读取或写入内存中的数据。这些指令通常涉及地址计算、数据传输和内存访问权限等。理解这些指令需要深入了解内存结构和寻址模式。在实际应用中,需要注意数据对齐、内存访问权限和异常处理等问题。
2. 多寄存器访问指令含义与解析:

  多寄存器访问指令允许同时对多个寄存器进行操作。这些指令通常用于数据打包、解包、移位等操作。理解这些指令需要对寄存器操作数和操作方式有清晰的认识。解析这些指令时,需要注意操作数的来源和去向,以及指令对寄存器的影响。

3.3.4伪指令

  伪指令是汇编语言中的一种特殊指令,用于提供汇编器的指导或设置。它们不是真正的机器指令,但在汇编过程中会被处理。伪指令通常用于设置符号、定义数据或控制汇编过程。例如,在ARM汇编中,常见的伪指令包括MOVLDR等。

MOVLDR加载和LDR伪指令在功能和用途上有明显的区别。

  1. MOV指令:这是一个真正的机器指令,用于将一个值从一个地方复制到另一个地方,可以是寄存器到寄存器、寄存器到内存或内存到寄存器。它用于执行基本的移动操作,而不是加载数据。
  2. LDR加载指令:这是一个真正的机器指令,用于从内存加载数据到寄存器中。它通常用于读取数据块从特定的内存地址到寄存器中。与MOV指令相比,LDR指令主要用于从内存加载数据,而不是简单的值复制。
  3. LDR伪指令:伪指令不是真正的机器指令,而是汇编器的指导或设置。LDR伪指令通常用于指示汇编器执行一个加载操作,其功能与LDR加载指令类似。它提供了一种更高级的抽象,允许使用更灵活的地址计算方式,例如变址加载或基址加变址的加载。与机器指令相比,伪指令提供了更大的灵活性,并允许编译器进行优化和代码生成。

总结MOV是一个真正的机器指令,用于值复制;LDR加载是另一个真正的机器指令,用于从内存加载数据;而LDR伪指令是一个汇编控制指令,用于指示汇编器执行一个加载操作,它提供了更大的灵活性和抽象级别。

第4章 基于ARM7系列的汇编语言程序设计

1.计算机语言,机器语言、汇编语言与高级语言各自特点。 

2.ARM7汇编语言程序中的符号,符号命名,变量、常亮如何定义及应用。数据如何定义?

3.ARM汇编语言程序的设计步骤,如何编辑、编译、连接与调试程序,具体内容?

4ARM7汇编语言程序设计,顺序、分支与循环程序结构与编程,子程序概念等。

5.程序的分析与设计、流程图设计,功能总结等。

6.常见数据搬家(复制)、求和、寻找最大数最小数、排序等等,书上例题,上机分析。

4.1ARM汇编语言程序结构格式

1.机器语言:计算机能够直接理解和执行的二进制代码,它由一系列的0和1组成。

优点:执行速度快,因为计算机不需要进行任何转换,直接执行机器码,占用内存少、

缺点:不直观,不易理解和记忆

2.汇编语言:汇编语言是一种低级的计算机编程语言,使用助记符来表示各个机器指令,使程序员能够更容易地编写和理解代码。汇编器将汇编代码转换为机器码供计算机执行。

优点:相对于机器语言,汇编语言更容易编写和理解。它提供了对硬件的直接控制,适用于系统级编程、设备驱动程序开发等底层任务。

缺点:虽然比机器语言更容易编写,但仍然需要熟悉特定的计算机架构和指令集。代码的可读性和可维护性仍然较差,且可移植性有限。

3.高级语言:高级语言是更接近人类自然语言的一种编程语言,提供了更高级别的抽象和编程结构,如变量、函数、对象、类等。编译器或解释器将高级语言代码转换为机器码或中间代码供计算机执行。

优点:易于编写、阅读和维护。提供了丰富的库和框架,支持模块化编程和代码重用。具有更好的可移植性,因为高级语言通常不依赖于特定的计算机架构。

缺点:执行速度相对较慢,因为编译器或解释器需要执行额外的转换步骤。对硬件的直接控制能力较弱,不适合用于底层系统开发。

4.2ARM7汇编语言程序中的符号

符号(Symbol)

符号用于标识程序中的地址或数据,例如标签(Label)和变量名。在汇编语言中,符号通常用于指示指令的地址或数据的位置。

符号命名

符号的命名规则通常是基于编程语言的命名约定,例如使用驼峰命名法或下划线命名法。在ARM汇编中,符号名通常以字母或下划线开头,后面可以跟字母、数字或下划线。

符号应用

符号在程序中用于标识特定地址或数据。它们可以用作指令的操作数,也可以作为程序的标签或变量的名称。在链接和定位程序时,符号的作用非常关键。

变量(Variable)

变量用于存储程序中的动态数据,它们的值可以在程序执行期间更改。

变量定义

在ARM汇编语言中,变量通常通过分配内存空间来定义。例如,可以使用DCD指令来定义一个双字(32位)变量,使用DW指令来定义一个字(16位)变量。

变量应用

变量在程序中用于存储数据,以便在后续的指令中使用。它们可以用于存储计算结果、传递参数或保存状态信息等。

常量(Constant)

常量是程序中固定的值,它们在程序执行期间不会改变。

常量定义

常量可以通过直接赋值或使用预定义的宏来定义。在ARM汇编语言中,可以使用EQNE等条件编译指令来定义常量。

常量应用

常量在程序中用于表示固定的值或阈值,例如跳转表中的偏移量、设备寄存器的地址等。它们通常用于指令操作数或程序逻辑中。

数据定义(Data Definition)

在ARM汇编语言中,数据定义用于声明变量的类型和大小。常见的数据定义指令包括DCD(双字)、DW(字)、DB(字节)等。这些指令用于分配内存空间并初始化变量的值。

DCD my_variable ; 定义一个双字变量my_variable并初始化为某个值  
DW value1, value2 ; 定义两个字变量value1和value2并分别初始化为value1和value2的值  
DB 'Hello' ; 定义一个字节数组并初始化为字符串"Hello"的ASCII码值

4.3ARM汇编语言程序的设计步骤

编辑,汇编,链接,调试

4.4汇编语言程序设计

顺序结构程序设计

顺序结构程序设计是最基本的程序设计方法,它按照指令在内存中顺序执行。在ARM7汇编语言中,顺序结构程序设计意味着按照指令的顺序从上到下、从左到右执行。每个指令按照其地址顺序依次执行,直到程序结束。

分支结构程序设计

分支结构程序设计允许程序根据不同的条件选择不同的执行路径。在ARM7汇编语言中,分支指令允许程序跳转到指定的地址执行。常见的分支指令包括B(无条件跳转)、BL(带链接的跳转)和BX(带交换的跳转)。这些指令可以根据条件跳转到程序的不同部分,实现程序的流程控制。

循环结构程序设计

循环结构程序设计允许程序重复执行一段代码,直到满足特定的条件为止。在ARM7汇编语言中,循环指令允许程序重复执行一段代码,直到满足特定的条件。常见的循环指令包括B(无条件跳转)和BL(带链接的跳转),可以通过与条件判断指令结合使用,实现循环结构程序设计。

子程序概念

子程序是一种将程序中重复或相对独立的代码块封装为一个单独的函数或过程的方法。在ARM7汇编语言中,子程序是通过使用子程序调用指令来实现的。子程序可以单独编译和链接,并在需要时被其他程序调用。子程序的调用通常通过将返回地址压入堆栈并跳转到子程序的起始地址来实现,子程序执行完毕后,从堆栈中弹出返回地址并返回到调用程序。

第5章 LPC2000系列微处理器组成与中断技术

1.LPC2100、LPC2200等系列及特点

2.芯片内部结构,局部总线、AHB总线、VPB总线与内外连接关系。

3.存储器结构,映射含义,重映射引入、对象、解决问题?

4.系统控制部分,时钟系统结构

5.中断概念、过程、中断优先级判断与处理,中断控制部件VIC结构、作用与实际编程应用。向量中断如何处理,程序如何跳转?

5.1LPC2000系列简介

LPC2100LPC22005.2芯片内部结构

支持仿真的ARM7TDMI-S CPU

与片内存储器控制器接口的ARM7局部总线,局部总线连接内部RAM控制器和内部FLASH控制器

与中断控制器接口的AMB A高性能总线(AHB, Advanced High-performance Bus ),AHB总线连接向量中断控制器(VIC,Vector Interrupt Controller)、外部存储器控制器(EMC,External Memory Controller )以及AHB至VPB的转换桥;

连接片内外设功能的VLSI外设总线(VPB, VLSI. Peripheral Bus ),VPB总线连接片内外设功能的VLSI外设总线,具体包括:外部中断、两路定时器、A/D转换器、通用I/O、PWM、实时时钟、I2C、SPI、UART、看门狗定时器以及系统控制部分

5.3存储器结构

  嵌入式系统中存储器部分按其位置分为片内和片外存储器,其存储器主要分为RAM、ROM和Flash MemoryFlash memory(闪速存储器)是嵌入式系统中重要的组成部分,用来存储程序和数据。Flash Memory是一种非易失性存储器NVM(Non-Volatile Memory),掉电后数据不会丢失,但在使用Flash Memory时,必须根据其自身特性,对存储系统进行特殊设计,以保证系统的性能达到最优。

存储器映射:给物理存储器分配逻辑地址的过程。通过这些逻辑地址就可以访问到相应存储器的物理存储单元。

ARM7TDMI的存储器映射空间 0X00000000~0XFFFFFFFF

起始地址依次为: FLASH——0X00000000, SRAM——0X40000000, BOOTBLOCK,

外部存储器 0X80000000,

VPB(低速外设地址)——0XE0000000,

AHB(高速外设:向量中断控制器,外部存储器控制器) ——从0XFFFFFFFF回头。

AHB(先进的高性能总线)和VPB(VLSI外设总线)外设区域都为2M字节,可各分配128个外设。每个外设空间的规格都为16K字节,这样就简化了每个外设的地址译码。

注意:外设寄存器的地址都是字对齐。AHB 和VPB外设区域中不管是字还是半字,都是一次性访问。例如不可能对一个字寄存器的最高字节执行单独的读或写操作。

存储器重映射:将已经过映射的存储器再次映射的过程。它使同一物理存储单元出现多个不同的逻辑地址。

注意:存储器重映射并不是对映射单元的内容进行了复制,而只是将多个地址指向了同一个存储单元,这种效果是通过芯片内部的“存储器管理部件”实现的。

重映射的对象是存储器地址,通过重映射可以实现不同存储器之间的地址映射关系,使得程序可以在不同的存储器之间正确地访问数据。

重映射可以解决以下几个问题:

  1. 地址冲突问题:在嵌入式系统中,多个外设或存储器可能使用相同的物理地址,而程序需要通过不同的地址访问这些外设或存储器。通过重映射,可以将不同的物理地址映射到程序中不同的地址空间,从而避免地址冲突。
  2. 存储器扩展问题:在一些嵌入式系统中,程序需要访问的存储器空间超过了物理存储器的容量。通过重映射,可以将程序中的地址映射到物理存储器之外的扩展存储器空间,从而实现大容量数据的存储和访问。
  3. 兼容性问题:在嵌入式系统开发中,不同的处理器或芯片可能具有不同的存储器地址空间布局。为了使程序在不同的处理器或芯片上都能够正确地运行,需要进行存储器地址的重映射,以适应不同的地址空间布局。

5.4系统控制模块

一个ARM芯片中通常有很多功能部件,有一些部件是全局性的,它们状态的改变可能引起整个系统运行状态的改变,这些部件我们统一称之为系统控制模块

5.4.1时钟系统

时钟是计算机系统的脉搏,处理器核在一拍接一拍的时钟驱动下完成指令执行、状态变换等动作。

LPC2000系列微控制器的时钟系统包括四个部分:晶体振荡器、唤醒定时器、锁相环(PLL)和VPB分频器。

5.5中断技术

中断:计算机在执行正常程序过程中,当出现某种异常事件或某种外部请求时,处理器就暂停执行当前的程序,而转去执行对异常事件或某种外部请求的处理操作。当处理完毕后,CPU再返回到被暂停执行的程序,继续执行。

中断优先级的确定:

1.软件查询法

2.硬件排队电路法

3.专用中断控制电路法

中断处理过程一般包括以下五个步骤:: 中断请求、中断响应、断点保护、中断处理和中断返回。

5.6向量中断控制器

ARM7TDMI内核具有两个中断输入,分别为IRQ中断和FIQ中断。

向量中断控制器(VIC, Vectored Interrupt Controller )负责管理芯片的中断源,最多可以管理32个中断输入请求,16个向量IRQ中断和1个非向量中断。

常见的中断源有:WDT(看门狗)、Timer(定时计数器)、PWM(脉宽调制器)、UART(通用异步收发器)、I2C(I2C接口)、SPI(SPI接口)、RTC(实时时钟)、A/D(模数转换器)、EINT(外中断)等。

第6章 LPC2000系列微处理器片上外设接口

1.1为什么引入引脚连接模块?解决什么问题?如何解决?硬件电路分析与软件编程关系?

2.设置管脚的两种方式,简单直接设置与“读-修改-写”方式 设置有何不同?针对有多个引脚功能设置,在应用中如何选择?为什么?

3.GPIO的综合应用,通过管脚选择、方向、输出与输入控制。GPIO应用中控制LED闪烁通过延时方式与定时中断的区别。

4.外部中断概念、数量、种类与应用,结合VIC原理。对比GPIO输入与外部中断输入方式,各有何特点? 处理器与外设交互数据主要方式、特点及应用场景

5.定时器内部构成与应用,查询方式与中断方式程序分析与编程应用

6.GPIO操作,通过软件延时与定时器控制编程方面有何不同,结合GPIO综合应用分析与编程。

7.GPIO+定时器+外中断综合编程。

8.串行通信,同步/异步概念,RS232接口规范、电平转换,UART接口组成及收发过程分析,FIFO作用?查询与中断方式,分析代码及应用。PC机与ARM7进行串口通信,为什么要进行电平转换?

9.SPI与I2C总线方式采用主从方式时,硬件连接有何不同?

6.1引脚连接模块

为什么需要I/O接口(电路)?

嵌入式系统中外部设备多种多样工作原理、驱动方式、信息格式、以及工作速度方面彼此差别很大。它们不能与CPU直接相连,必须经过中间电路再与系统相连,这部分电路被称为I/O接口电路

其引入主要是为了解决硬件电路之间信号传输和连接的问题。通过使用引脚连接模块,可以快速、简便地将电路板、芯片、传感器等硬件组件连接在一起,实现信号的传输和控制。

作用主要有以下几个方面:

  1. 简化电路设计:通过使用引脚连接模块,可以将复杂的电路设计简化,减少设计难度和成本。
  2. 提高电路可靠性:引脚连接模块经过严格的质量控制和测试,可以保证其稳定性和可靠性,从而提高整个电路的可靠性。
  3. 方便维修和更换:当电路出现问题时,通过使用引脚连接模块可以快速找到问题所在并进行维修或更换,提高维修效率。

  硬件电路分析与软件编程是相互关联的。在电子设备的设计和开发中,硬件电路的分析和设计对于软件编程来说至关重要。硬件电路的性能和参数会直接影响到软件程序的运行效果和稳定性。因此,在设计和开发电子设备时,需要充分考虑硬件电路与软件编程之间的关系,确保软硬件之间的协调和配合。同时,通过软件编程也可以对硬件电路进行控制和调试,从而提高整个系统的性能和稳定性。

 设置管脚的方式主要有简单直接设置与“读-修改-写”方式两种。简单直接设置方式是指直接将管脚的状态设置为所需的模式,而“读-修改-写”方式则首先读取管脚的状态,对其进行修改,然后再将其写回管脚。

在处理多个引脚功能的设置时,具体选择哪种方式取决于应用的需求。如果对管脚状态的更改不需要考虑其当前状态,或者可以容忍因直接更改状态而可能引发的任何不确定性,那么简单直接设置方式可能是一个更简单的选择,因为它简化了编程步骤。

然而,如果需要精确控制每个管脚的状态,且必须基于其当前状态来进行设置,那么“读-修改-写”方式可能更加合适。这种方式可以避免因直接更改状态而可能导致的潜在错误或问题。

针对具有多个引脚功能的应用,如果需要节省硬件资源、提高设计的灵活性和适应性、降低设计的复杂性等,引脚复用和重定义功能是一个很好的选择。这种方式允许多个功能共享相同的物理引脚,通过重新配置引脚功能,可以实现不同的连接和交互方式,提高了系统的适应性和灵活性,简化了电路板布局和设计。

6.2 GPIO原理及应用

GPIO(General Purpose Input/Output ports---通用输入/输出端口)是ARM系列芯片中的基本资源,用于二进制数据(数字电路的‘0/1’)的输入和输出。 

管脚选择:在微控制器或处理器上,每个管脚都有特定的功能或用途。因此,在使用GPIO之前,需要确定哪个管脚与所需的外设或设备连接。

方向:GPIO可以有输入或输出两种模式。在输入模式下,可以从管脚读取信号;在输出模式下,可以向管脚写入信号。根据应用需求,选择适当的模式。

输出控制:当GPIO配置为输出模式时,可以控制外部设备的状态。例如,可以通过改变GPIO的状态来控制LED的亮灭。

输入控制:当GPIO配置为输入模式时,可以从外部设备读取信号。例如,通过读取GPIO的状态可以检测按钮是否被按下。

在GPIO应用中控制LED闪烁可以通过两种方式实现:延时方式和定时中断。

  1. 延时方式:使用延时函数在程序中等待一段时间,然后切换GPIO的状态以改变LED的状态。这种方式适用于不需要精确控制闪烁频率的应用。但是,由于延时函数的精确性不高,因此可能会导致闪烁频率不稳定。
  2. 定时中断:使用定时器生成定时中断,并在中断服务程序中切换GPIO的状态。这种方式可以实现精确控制LED的闪烁频率。通过配置定时器,可以获得所需的延时时间,并在每次中断发生时切换LED的状态。
    #define  K1   1 << 0        // K1按键连接与P0.0管脚, K1按下时P0.0为低电平
    #define  K2   1<< 1        // K2按键连接与P0.1管脚, K2按下时P0.1为低电平
    #define  BEEP 	 1 << 7	  // P0.7控制蜂鸣器,高电平蜂鸣
    #define  LED 	 1 << 8	  // P0.8控制发光二级管,高电平点亮
    /*************************************************************
    ** 函数名称 :DelayNS()
    ** 函数功能 :可变参数软件延时
    ** 入口参数 :dly	延时参数,值越大,延时越久
    ** 出口参数 :无
    *************************************************************/
    void DelayNS (uint32 dly)
    {
    	uint32 i;
    	for ( ; dly>0; dly--)
    		for (i=0; i<50000; i++);
    }
    /*************************************************************
    ** 函数名称 :main()
    ** 函数功能 :有K1键按下,则LED点亮,K2键按下则Beep鸣响,反之熄灭、静音。
    *************************************************************/
    int main (void)
    {
         PINSEL0  =  0x00000000;         // P0[15:0]管脚用做GPIO功能
         IO0DIR  =  IO0DIR &( ~K1); 	 // 设置K1控制口为输入
         IO0DIR  =  IO0DIR &( ~K2);      // 设置K2控制口为输入
         IO0DIR  =  IO0DIR | BEEP;       // 设置BEEP控制口为输出
         IO0DIR  =  IO0DIR | LED;	     // 设置LED控制口为输出
         IO0CLR = IO0CLR | BEEP | LED;    // BEEP、LED 输出低电平
    while (1)
       {
          if ((IO0PIN & K1) = = 0)
    	  IO0SET = LED;	                 // 如果K1按下,LED点亮
          else	IO0CLR = LED;	         // 松开则熄灭
          if ((IO0PIN & K2) = = 0)
    	  IO0SET = BEEP;	             // 如果K2按下,蜂鸣器鸣叫
          else	IO0CLR = BEEP;	         // 松开则静音
    	DelayNS(50);		                 // 延时 50 个时间单位
        }
        return 0;
    }
    

    6.3 外部中断输入

常见的外部中断源包括:按键、传感器、串行通信等。

对比GPIO输入与外部中断输入方式:

  1. GPIO输入:通过读取GPIO的状态可以检测外部设备的状态。这种方式适用于简单的输入检测,如按钮或开关的状态检测。但是,如果需要处理多个输入事件或实时事件,GPIO输入方式可能无法满足需求。
  2. 外部中断输入:当外部事件发生时,外部中断系统将迫使CPU暂停正在执行的程序,转而去处理中断事件。这种方式适用于处理实时事件或紧急情况,如按键按下、传感器触发等。与GPIO输入相比,外部中断输入方式具有更高的实时性和可靠性。

处理器与外设交互数据的主要方式有以下几种:

  1. 无条件传送:这种方式假设外设始终处于准备就绪状态,可以直接进行数据传输。它不需要在数据传输前检查外设的状态,因此操作简单,所需硬件和软件较少。然而,这种方式只适用于无需应答联络的场合。
  2. 查询传送:在数据传输之前,处理器会先查询外设的状态。如果外设未准备好,处理器会反复查询状态,直到外设准备就绪。这种方式适用于外设准备时间相对较短的情况,但会导致处理器利用率较低。
  3. 中断传送:当外设准备好数据时,它会主动向处理器提出中断请求,处理器响应中断后再与外设交换数据。这种方式可以避免查询等待时间,提高处理器的利用率。
  4. DMA(直接存储器存取)传送:DMA方式是一种由专门的硬件电路执行I/O的数据传送方式,可以让外设接口直接与内存进行高速的数据传送,而不必经过处理器。这种方式适用于快速且成块的数据传输。
  5. IOP(输入输出处理机)方式:IOP可以与处理器并行工作,提供高速的DMA处理能力,实现数据的高速传送。然而,这种方式成本较高,适合要求I/O速度很高的场合,如3D图形显示等。

6.4 定时计数电路

LPC2200系列器件中含有两个定时器/计数器,Timer0和Timer1。

主要构成:预分频器、匹配部分和捕获部分

6.5 UART串行接口

串行通信是一种数据传输方式,其中数据在单个数据线上逐位传输。与并行通信相比,串行通信所需的线缆数量较少,因此在长距离通信中更为常用。

同步和异步是串行通信中的两种传输模式:

  1. 同步串行通信:在这种模式下,数据的传输以一个共享时钟信号为基础。发送器和接收器使用同一个时钟信号来同步数据的发送和接收。
  2. 异步串行通信:在这种模式下,数据的传输不依赖于共享的时钟信号。每个字符都以一个起始位开始,以一个停止位结束。起始位和停止位提供了字符的同步

RS232接口规范是一种常见的串行通信接口标准,它定义了数据线的布局、电平范围和其他相关参数。RS232使用负逻辑,−3~ −25 V的电平表示逻辑“1”。 +3~ +25 V的电平表示逻辑“0”。PC机与ARM7进行串口通信时,进行电平转换的原因是PC机通常使用RS232标准,而ARM7微控制器可能使用TTL电平。为了实现可靠的通信,需要将一种电平标准转换为另一种,以确保数据能够正确地发送和接收。FIFO(First In First Out)在UART中用于存储待发送或待接收的数据。它确保数据按照发送的顺序被接收和处理。

6.6SPI

首先,SPI总线使用4线或3线连接方式,其中包括一个时钟线(SCK)、一个主设备输出线(SDO)、一个主设备输入线(SDI),以及一个可选的主设备选择线(SS)。这种连接方式允许多个从设备与主设备连接,但在选择特定从设备进行读写操作时,主设备还需要通过额外的硬件逻辑来选择相应的从设备。

相对地,I2C总线则使用两根线进行连接:一根是串行时钟线(SCL),另一根是串行数据线(SDA)。这种连接方式简化了硬件接口,并使得在多个从设备之间进行通信变得更加容易。由于I2C总线支持多个主设备和多个从设备,因此,不需要额外的硬件逻辑来选择特定的通信设备。

此外,在通信速率方面,SPI总线通常可以达到较高的传输速度,通常在MHz范围内运行。相比之下,I2C总线的传输速度通常较低,通常在几十至几百kHz之间。

第7章 ARM7系列芯片的外围电路设计

1、嵌入式系统最小系统构成

2、存储器电路的分类及作用

3、输入/输出模块,通信模块作用

7.1.1最小系统结构

 所谓最小系统结构,是指在嵌入式微控制器外部增加尽可能少的电路模块,达到一个可以让嵌入式微控制器独立工作的状态 。

7.2.1 嵌入式系统中存储器的分类

存储器电路根据其工作原理和用途可以分为以下几类:

  • ROM(只读存储器):存储的数据在制造时就已经写入,之后无法更改。用于存储固定不变的程序和数据。
  • RAM(随机存取存储器):可以随时读写数据,但在断电后数据会丢失。用于存储运行时需要的数据和变量。
  • Flash存储器:是一种非易失性存储器,可以在断电后保留数据。常用于存储固件程序、配置参数等。
  • EEPROM(电可擦除可编程只读存储器):是一种可编程的非易失性存储器,可以通过电子方式擦除和编程。常用于需要频繁修改数据的场合。

7.3输入模块

主要通过软件方法产生键码值,键盘本身只是按键开关组成的行列矩阵,而相应的按键的识别、键码的确定、去抖动等功能均由程序完成,非编码键盘结构简单,成本低廉。

按结构形式可分为: 非编码键盘 编码键盘

7.4显示输出模块

7.5通信模块作用

  • 17
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值