微控制器一般是指:CPU + 片内内存 + 片外外设
微处理器一般指单充的CPU
对于目前的嵌入式设备而言,通常使用的都是微控制器,或这称为SoC(system on chip),低成本、地功耗。对于软件工程师而言,微控制器和微处理器没有任何区别
CPU在固定频率的时钟控制下节奏运行。
CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行。
这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(ARM公司等)定义的,本质上是一串由1和0组成的数字。这就是CPU的汇编指令集。
从源代码到CPU执行过程:
A.CPU寄存器
—CPU寄存器负责专有指令执行,数据运算,变量处理、参数传递
B.外设寄存器
—外设寄存器用于控制外设的行为和工作方式,配置值需要根据外设的芯片手册完成。
—外设寄存器是编程者控制硬件的关键,是留作外设被编程控制的“活动开关”,正如汇编指令集是CPU的编程接口API一样,寄存器是外设硬件的软件编程接口API。使用软件编程控制某一硬件,其实就是编程读写该硬件的寄存器。
对于CPU寄存器我们需要特别关注这两个寄存器
A.PC指针-程序计数器(指令指针IP)
之所以被称之为PC指针,是因为其指向的是即将执行的下一条指令(这里我们不考虑多级缓存的问题),类似于指针。每执行一条指令,PC的值就会发生相应的变化。
B.SP指针-栈指针
栈指针始终只想栈空间的顶部,实现LIFO特性
保存中断断点、函数调用的的返回值,保存CPU现场等
PC指针和SP指针的使用示例:最初PC指针指向mov 指令,进行下一次跳转(执行jmp)指令之前会进行现场保存,从SP指针所指的位置开始,将数据保存在栈空间,SP指针依次移动,这里还有一个BP指针(基址指针),用于保存上一次SP的值,则此时BP与SP之间保存的就是指令跳转前的现场,当函数返回,或者中断执行完毕后,就会从该段地址进行现场恢复,SP指针指向其原来的值。
处理器的IO操作:
A.处理器与外设之间的数据通过IO操作完成
B.内存映射IO空间(内存与IO统一编址)
外设通过精密的硬件连接映射到处理器的地址空间
通过地址访问的方式与外设进行通信
C.独立IO映射(内存与IO独立编址)
a)独立于地址空间,无法通过地址访问外设
b)使用专用指令于外设进行通信
D.操作IO其实就是配置控制寄存器,对寄存器进行读写操作。
通过具体的硬件设计,可以使得地址总线上的值在某个范围内,片选信号为真,即:使能连接设备从而读取相应地址中的数据。
片选信号由地址线产生。
地址映射示例:
如下面的地址0XFFFF1234,这是一个32位地址,如何映射到只有16位的地址空间??
通常的做法,使用高位地址通过&&运算产生一个片选信号,然后直接通过低位地址访问实际的内存空间。
处理器上电之后,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并启动操作系统
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。