1.可编程器件的编程原理
(1)一个器件可以被编程就是通过他的寄存器来完成的。也就是说各种外设可以被软件控制的唯一接口就是寄存器。
(2)CPU的工作分三步
第一步:读取。从flash读取程序代码(二进制数)
第二步:解码。把二进制数解码成CPU认识的汇编指令。
第三步:执行。执行汇编指令。
这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(ARM公司)定义的,本质上是一串由1和0组成的数字。这就是CPU的汇编指令集。我们学习CPU就是学习它的汇编指令。
从我们写代码到CPU执行该代码到底发生了什么?
(1)写好的代码(如.c程序)被编译器解释成为.s的汇编源代码
(2).s的汇编源代码经过汇编器解释称Elf格式二进制可执行程序
(3)ELf格式二进制可执行程序经过Objcopy工具成为Bin格式烧录文件
(4)Bin格式烧录文件经过CPU和flash之间的总线读取到CPU中。
(5)CPU通过CPU内部指令流水线读取代码并解码
(6)CPU执行解码后的指令。
1)这只是其中最主要的几部分。大体上就是这样。Elf格式的文件是Linux下的可执行程序,类似于windows的.exe文件。在linux系统中,文件的后缀名是没有意义的,关键看文件格式。
2)从Elf格式到Bin格式,并没有发生什么特别大的变化,只是对代码进行整理方便烧录。
2.指令集对CPU的意义
一个CPU可以进行的加减乘除这些运算,分别对应一个汇编指令。我们写相应的指令,CPU就进行相应的动作。然而CPU只认识二进制数,也就是说,CPU本身是不认识汇编指令的,汇编是方便程序员理解,每一个汇编指令对应一个特定的二进制数,对应一个CPU的命令。学习一个CPU就是学习它的汇编指令(CPU的指令)。
3.RISC和CISC
CISC:cmplex instruction set computer 复杂的指令集CPU(intel使用的是CISC)
CISC设计理念是用最少的指令来完成任务,譬如计算乘法只需要一条指令完成任务。CISC的cpu设计复杂、工艺复杂,好处是编译器好设计。Intel至今使用CISC设计。
RISC:Readuced instruction-setComputer 精简指令集(ARM使用的RISC)
RISC的设计理念就是我们只设计最基本的指令,至于要完成更高级的功能或指令,则由软件来编写。
4.统一编址独立编址哈佛结构_冯诺依曼结构
4.1.什么是IO?什么是内存?
IO:inout、output:标准输入输出,是CPU和其他外部设备串口,LCD等之间通信的道路。一般的,IO就是指CPU的各种内部或外部设备。
内存就是一块可以存储数据的区域,CPU和内存之间通过三大总线相连接,进行数据交流。内存和CPU是直接连接方式。CPU和内存之间的总线限制了可访问内存的大小。这样一来,内存资源有限,可扩展性比较差。
IO的访问方式:
IO指的是CPU与各个外设的连接接口。
在ARM中CPU把寄存器当作内存地址一样来访问各个外设。
在intel中外设在CPU中没有物理地址,通过汇编指令操作该外设。比如串口。如果要添加外设就要条件对应的汇编指令。典型的CISC设计理念。
4.2.冯诺依曼结构与哈佛结构
冯诺依曼结构:代码和数据存储在一起
哈佛结构:代码和数据分开存放
5.软件编程控制硬件的关键-寄存器
(1)寄存器属于CPu外设的硬件组成部分
(2)cpu可以像访问内存一样去访问寄存器
(3)寄存器是cpu的制定者制定的,目的是可编程相关外设
(4)编程操作寄存器类似于操作内存
(5)寄存器中每个位的作用都不一样,按照位来使用。
(6)单个寄存器的位宽和cpu位宽一样,和cpu数据总线位数一样大。
寄存器分为2种:通用寄存器和特殊功能寄存器(SFR)
(1)通用寄存器:该寄存器没有特定的功能,谁都可以使用。
(2)SFR(special function register,特殊功能寄存器)(和外设绑定)不在cpu中而在外设中。特殊功能寄存器就是说,特殊功能是制定好的,有着特定的功能,为了完成一个外设的功能。
总结:arm是统一编址的,SoC中的各种外设通过各自的SFR编程访问,这些SFR的访问和访问普通内存一样,这叫IO与内存统一编址。