专题1—深入浅出处理器

1.处理器基本概念

1.1处理器于微控制器的区别:

微控制器一般是指:CPU + 片内内存 + 片外外设 微处理器一般指单充的CPU 对于目前的嵌入式设备而言,通常使用的都是微控制器,或这称为SoC(system on chip),低成本、地功耗。对于软件工程师而言,微控制器和微处理器没有任何区别

1.2什么是CPU?

CPU在固定频率的时钟控制下节奏运行。 CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行。 这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(ARM公司等)定义的,本质上是一串由1和0组成的数字。这就是CPU的汇编指令集。 从源代码到CPU执行过程:

1.3寄存器的分类;

A.CPU寄存器 —CPU寄存器负责专有指令执行,数据运算,变量处理、参数传递 B.外设寄存器 —外设寄存器用于控制外设的行为和工作方式,配置值需要根据外设的芯片手册完成。 —外设寄存器是编程者控制硬件的关键,是留作外设被编程控制的“活动开关”,正如汇编指令集是CPU的编程接口API一样,寄存器是外设硬件的软件编程接口API。使用软件编程控制某一硬件,其实就是编程读写该硬件的寄存器。

1.4两个关键寄存器

对于CPU寄存器我们需要特别关注这两个寄存器 A.PC指针-程序计数器(指令指针IP) 之所以被称之为PC指针,是因为其指向的是即将执行的下一条指令(这里我们不考虑多级缓存的问题),类似于指针。每执行一条指令,PC的值就会发生相应的变化。 B.SP指针-栈指针 栈指针始终只想栈空间的顶部,实现LIFO特性 保存中断断点、函数调用的的返回值,保存CPU现场等 PC指针和SP指针的使用示例:最初PC指针指向mov 指令,进行下一次跳转(执行jmp)指令之前会进行现场保存,从SP指针所指的位置开始,将数据保存在栈空间,SP指针依次移动,这里还有一个BP指针(基址指针),用于保存上一次SP的值,则此时BP与SP之间保存的就是指令跳转前的现场,当函数返回,或者中断执行完毕后,就会从该段地址进行现场恢复,SP指针指向其原来的值。

1.5 IO操作

处理器的IO操作: A.处理器与外设之间的数据通过IO操作完成 B.内存映射IO空间(内存与IO统一编址) 外设通过精密的硬件连接映射到处理器的地址空间 通过地址访问的方式与外设进行通信 C.独立IO映射(内存与IO独立编址) a)独立于地址空间,无法通过地址访问外设 b)使用专用指令于外设进行通信 D.操作IO其实就是配置控制寄存器,对寄存器进行读写操作。

1.6地址映射

通过具体的硬件设计,可以使得地址总线上的值在某个范围内,片选信号为真,即:使能连接设备从而读取相应地址中的数据。 片选信号由地址线产生。 地址映射示例: 如下面的地址0XFFFF1234,这是一个32位地址,如何映射到只有16位的地址空间?? 通常的做法,使用高位地址通过&&运算产生一个片选信号,然后直接通过低位地址访问实际的内存空间。

1.7处理器启动过程

处理器上电之后,PC指针固话了一个默认值(通常是0),PC指针的默认值用于决定第一条执行的指令。然后接着执行后续的指令,整个过程如下图所示。 启动程序(BootLoader): BootLoader是系统上电后运行的第一个程序,通常用于启动操作系统。根据运行阶段,体积和功能的不同分为三个部分(通常的做法): BL0-固话于硬件之中,用于初始化最基本的硬件,并加载BL1; BL1-存储于外部存储设备中,用于初始化主存,加载并运行BL2; BL2-存储于外部设备中,用于引导和启动操作系统。 实例分析: 对于S3C6410,这款芯片,其启动过程的设计和我们上面所讲的完全相符 第一阶段:首先系统上电后会运行固化在IROM内部的BL0,这部分程序的工程完成最基本的初始化工作(关看门狗、初始化指令cache、初始化栈、堆,加载BL1到内部IRAM,跳转到BL1去执行)。 第二阶段:然后IRAM中的代码负责初始化内存(SDRAM)然后加载BL2到SRM中,并跳转到SRAM. 第三阶段:BL2在SDRAM中运行,然后加载OS到SDRAM并启动操作系统