首先,先说明一下CPU位数代表的是什么意思,从市面上看8位,16位,32位甚至64位的MCU内核都已出现,位数指的是什么呢:
严谨说法:指CPU一次能处理的数据宽度,也就是参与运算的寄存器的数据长度。
MSP430 是16位的MCU
我们平时对MCU的C语言编程,都会经过编译器编译成机器码,也就是二进制,最后通过CPU内部寄存器(一般有20-100个)来实现运算数据,因此我们写的所有程序,实现的所有功能,最终都要由CPU内部寄存器的读写来完成。
CPU寄存器一般分为专用寄存器和通用寄存器,对于MSP430来说,总共有16个寄存器:R0 - R15, 其中四个(R0 – R3)为专用寄存器,其余的为通用寄存器,下面详细讲解一下CPU的内部结构和寄存器的功能。
1. CPU和CPUX
多看MSP430的User Guide你会发现,对于CPU介绍的章节,有些是CPU,有些则是CPUX,那么这两个有什么区别呢? 为什么要出现CPUX呢:
我们来计算一下:
首先,16位的寄存器,也就是说我们由于需要寻址去执行相应的程序,即我们最多只有16跟地址总线,那么寻址范围呢:216=64K,每个地址可以存储1B的数据,因此CPU的最大寻址空间为64KB,这也就是CPU内核的MCU内部最大的Flash或FRAM空间了,但是如果用户程序很复杂呢,算法量很多呢,或者需要在内部Flash或FRAM中存储大量数据呢,必定会造成一个问题,内存不够,这就很尴尬,基于此,TI才开发了CPU的升级版CPUX内核,地址总线为20为,那么最大可以支持1MB的存储,这就可以解决这个问题了。 什么?1MB还不够?程序占有量没那么大的,1MB的内存基本满足90%以上的要求了,这是MCU,MCU,不是高端CPU!
2.CPU/CPUX的结构图:
左侧是CPU的内部结构,右侧为CPUX的结构图,从图上看,唯一的区别就是寄存器位数和地址总线了,因此,这两个CPU内核是一致的,仅仅区别在地址总线上而已。
PS: 不论是ARM内核,还是AVR内核,MSP430内核等,基本原理都大同小异,包含的CPU寄存器也很相似,不需要一致迷恋ARM内核好等,理性来说,适合自己项目的最好,ARM内核性能高,但内部也比较复杂,MSP430内核则比较简单,操作起来更便利,因此在很多场合下,MSP430内核更好理解和上手。
好啦,内核结构基本就这样,什么?What’s the fuck? 看不懂? 没事呀,作为硬件工程师甚至是嵌入式软件工程师,不需要理解,就知道它就这样子,内部就是一堆寄存器和运算器就OK了,我们也很少会接触到它。
3.CPU/CPUX内部寄存器:
首先介绍一下MSP430 CPU/CPUX的主要特征:
- 丰富的寄存器资源
- 单周期操作寄存器
- 16位数据总线 16位/20位地址总线
- 常数发生器
- 直接存储器到存储器的访问
- 位,字节和字的操作方式。
寄存器列表:
寄存器 |
描述 |
R0 |
程序计数器PC,指示下一条程序将要执行的指令地址。 |
R1 |
堆栈指针SP,指向堆栈栈顶 |
R2 |