1.1 MSP430单片机的架构
单片机是一个综合的模拟和数字系统,根据其丰富的片上资源,再添加一些外围电路,通过软件编程后就可以完成检测、控制等任务,形成一个实用的电子装置或设备。MSP430是美国德州仪器公司(TI,Texas Instruments)推出的系列单片机,因其超低功耗和丰富的片上资源而受到业界的广泛推崇和应用。MSP430单片机是一个混合信号处理器(MSP的英文意思是Mixed Signal Processor),它的内部有一个16位的RISC(精简指令集,Reduced Instruction Set Computer)CPU、许多外围模块、和一个灵活的时钟系统,通过一个共用的冯·诺依曼存储地址总线(MAB)和一个存储数据总线(MDB)相互连接。
1.1.1 MSP430单片机的特点和框图
MSP430单片机的特点 (以MSP430G2x53系列为例)
·低供电电压范围:1.8V至3.6V
·超低功耗
活跃模式(Active Mode):在1MHz和2.2V供电下,230uA
备用模式(Standby Mode):0.5uA
关闭模式(Off Mode):0.1uA
·五个节能模式
·从备用状态超快速唤醒,唤醒时间少于1uS
·16位精简指令结构,指令周期时间62.5nS
·基础时钟模块设置
-内部频率可达16MHz,并有4个校准的频率
-内部非常低耗低频(LF)振荡器
-32 kHz 晶振
-外部数字时钟源
·两个16位定时器,每个定时器有3个捕获/比较寄存器
·可达24个电容触摸使能的I/O管脚
·通用串行通信接口(USCI)
-增强的UART,支持自动波特率检测(LIN)
-IrDA编码器和解码器
-同步SPI
-I2C
·片上比较器,用于模拟信号比较功能或者斜坡(Slope)模数转换
·10位200-ksps(每秒20万采样率)的模数转换器,有内部参考电压,采样和保持以及自动扫描(Autoscan)
·欠压检测器(Brownout Detector)
·串行板上(Onboard)编程,无需外部编程电压,通过安全熔丝可编程的代码保护
·有Spy-Bi-Wire接口的片上仿真逻辑
·封装选择
-TSSOP:20脚,28脚
-PDIP:20脚
-QFN:32脚
MSP430G2x53系列的方框图如图1.1所示,对于不同的封装其内部的模块有所变化。
图1.1 MSP430G2x53系列的方框图
图1.1中,左上角为时钟系统,可以产生ACLK、SMCLK、MCLK三个时钟,其中ACLK、SMCLK可用于外围模块,MCLK用于CPU和系统。然后自左向右为Flash和RAM存储区、十位ADC、端口P1、P2和P3,其中P1和P2具有中断能力。另外,P1、P2和P3这三个端口都有内置的上/下拉电阻。最左侧中间为16位的CPU,最高频率为16MHz,CPU内部包含16个寄存器。左下角为仿真及JTAG接口等。图1.1的下方自左向右又依次为欠压保护、比较器A+、看门狗WDT+、定时器0_A3、定时器1_A3和USCI A0 及USCI B0。CPU和各个外围模块间通过存储器地址总线(MAB)和存储器数据总线(MDB)进行连接。
1.1.2 CPU简介
由图1.2可见,CPU的主要部件是一个16位的算术逻辑单元(16-bit ALU,ALU—Arithmetic Logic Unit),这个ALU就完成了所有的数学运算和逻辑运算,类似于我们的大脑,能进行运算和对事物的判断等。注意图中ALU的运算结果会产生一些零(Z)、进借位(C)、溢出(V)、负(N)的标志位,这些信息是程序中需要判断并以此决定程序进程的一些条件,特别是用汇编语言时,经常要跟这些标志位打交道。
CPU中除了ALU,自上而下是16个寄存器R0~R15。这些寄存器中,R4~R15是一般的寄存器(General Purpose),R0~R3是比较特殊的。其中R0称为PC(Program Counter),即程序计数器,这个部件很关键,它就是一个指挥棒,引导着CPU的运行,而且CPU每执行完一条指令,PC就自动加2(或加4、加6),并指向下一条指令(地址),CPU再执行完这条指令,PC又自动增加,再指向下一条指令,使整个程序被逐条的执行下去。
图1.2 CPU的方框图
R1称为SP(Stack Pointer),即堆栈指针。什么是堆栈呢?看一下仓库或车站、码头里的货物,都是一层一层叠放的,那就是堆栈。计算机(单片机)处理数据时需要把数据临时存放在一些存储区域中,就像叠放货物一样,一个一个地放进去,再一个一个地取出来,叫做压栈和出栈。这个堆栈指针就指向栈顶,并随着栈顶的改变而自动变化,它永远指向栈顶。这样,程序中就可以通过堆栈指针来找到需要操作和处理的数据。这一般是汇编语言编程的事情了,我们用C语言时是不用管这些事情的,CCS或IAR这些开发环境已经在后台为我们处理好这些事情了,这也是C语言编程的好处之一(你不用管太多的事情,专注于你的程序就行了)。
R2称为SR(Status Register),即状态寄存器。状态寄存器随时记录着程序运行过程中所产生的各种信息,比如前面提到的计算结果为0(Z)、进借位(C)、负(N)、溢出(V)等,还有CPU及晶振的状态等。汇编语言中需要通过SR来获取这些信息,并进行相应的判断和处理。
R2和R3还联合在一起产生一些常用的常数。称为常数发生器CG1,CG2,(CG即Constant Generator),这些常数配合其它指令可以产生一些高效的模拟指令。
R4~R15是通用寄存器,如果你用汇编的话,这十二个寄存器就是你天天要打交道的对象了,数据的传递和获取经常要在这些寄存器中进行。
1.1.3 存储器地址空间
MSP430采用冯-诺依曼的存储器结构(另一种叫哈佛结构),其寄存器、代码和数据存储的地址都统一安排在同一个大的存储空间,如图1.3中的0h~1FFFFh,总存储空间为128KB。其中,代码的存取总是在偶数地址,数据的存取可为字节或字。前面提到的R0~R15又叫特殊功能寄存器(SFR,Special Function Registers),分布在0h~0Fh地址,它们的家就在那儿。再往上是8位的外围模块区,在010h~0FFh地址;16位的外围模块区,在0100h~01FFh地址。然后是RAM区,从0200h地址开始,其结束的地址取决于RAM区的大小,不同的器件其结束地址不同。RAM可用于存储代码或数据。Flash/ROM区的起始地址取决于Flash/ROM区的大小,不同的器件其起始地址不同,对于Flash/ROM区小于60KB的器件,其Flash/ROM区的结束地址为0FFFFh。Flash可用于存储代码和数据,字或字节表可存储于并用于Flash/ROM中,在使用前无需复制表到RAM中。中断向量表(Interrupt Vector Table,即各中断的入口地址)被安排在Flash/ROM地址空间的高端16个字中,最高优先级的中断向量在Flash/ROM的最高字地址0FFFEh。每个字占用2个字节,最高优先级的中断向量占用0FFFEh和0FFFFh两个字节,因此,其起始地址为0FFFEh。另一片Flash/ROM区分布在10000h~1FFFFh。
图1.3 存储器图
1.1.4 存储器组织
如图1.4所示,字节位于奇数或偶数地址,字只能位于偶数地址。一个字节由八位二进制数构成,就像八个格子,每个格子里的数要么是1,要么是0,只有这两种状态。字是由两个字节组成的,分别称为低字节和高字节。一个字的低字节永远是一个偶数地址,其高字节为下一个奇数地址。例如,如果一个数据字位于xxx4h地址,则这个数据的低字节位于xxx4h,其高字节位于xxx5h。位(Bit)、字节(Byte)、字(Word)之间的关系请看图1.4所示。
图1.4 用字节组织的存储器中的位、字节和字
1.2 MSP430G2 LaunchPad简介
为便于初学者应用和开发MSP430单片机,TI公司推出了许多单片机的开发板,MSP430G2 LaunchPad即为其中的一款针对G2系列的开发实验板。图1.5为该开发板的实物图,图中虚线的上方为仿真器部分,通过USB接口可直接与电脑相连,调试好的程序可以通过该仿真器直接下载到开发板的单片机中运行。虚线下方为单片机实验板,单片机的20个管脚都通过插排对外引出,并带有一个复位键。P1.3管脚外接了一个按键,P1.0和P1.6通过跳线分别连接了一个红色和绿色的LED。
图1.5 MSP430G2 LaunchPad实物图
图1.6为该开发板的原理图(不包括仿真器部分)。
图1.6 MSP430G2 LaunchPad原理图
MSP430G2开发板虽小,但我们可以外接按键、传感器、无线模块、驱动模块、LCD等,形成一个完整的检测或控制系统。图1.7为对开发板各个部分的说明。
图1.7 MSP430G2 LaunchPad各部分说明
上述对MSP430单片机的介绍及对LaunchPad开发板的说明,简单了解即可。我们在后续的讨论中会逐步展开、掌握和应用的。