msp430基础知识

MSP430系列单片机是16位的单片机。具有集成度高、外围设备丰富、超低功耗。
MSP430的内核CPU结构是按照精简指令集和高透明的宗旨来设计的。采用冯 诺依曼结构,RAM和ROM在同一地址空间,使用同一地址数据总线。

MSP430单片机采用的是16位结构的CPU,它采用了精简、高透明、高效率的正交设计,包括一个16位结构的算术逻辑单元(ALU)、16个寄存器和一个指令控制单元。
16个寄存器中有4个特殊功能寄存器和通用寄存器。
4个特殊功能寄存器分别是:程序计数器、堆栈指针、状态寄存器、常数发生器。

状态寄存器用来设置某些比特位来控制CPU的行为或者通过某些位来反映CPU 的状态。用户需要设置适当的比特位或读取适当的比特位,从而控制CPU的运行行为。



存储器的范围位0000H——FFFFH,从低到高分别是特殊功能寄存器、外围模块寄存器、数据寄存器、程序寄存器、中断向量表。


MSP430系列单片机的共同点:
1:所有单片机的中断向量表具有相同的地址空间FFFE0H——FFFFH。
2:所有的单片机的8位外围模块使用的寄存器具有相同的地址空间,10H——FFH范围
3:所有的单片机的16位外围模块使用的寄存器具有的地址空间,100H——1FFH范围
4:所有的特殊功能寄存器具有相同的地址空间,都在00H ——0FH
5:所有的单片机数据存储器具有相同的起始地址200H开始。


A:数据存储器
MSP430系列单片机的数据存储器位于起始地址为200H的存储器地址空间。数据存储器既作为数据的保存,也作为堆栈,同时也是数学运算的场所。
数据存储器可以按字节操作也可以按照字操作。
FLASH型的单片机里还有信息存储区,也可以作为数据RAM使用,并且因为是FLASH的,断电后不会丢失数据。所以可以用这部分存储器来保存重要的参数,如单片机系统里的配置参数。


B:程序存储器
程序空间可以存放指令和数据。程序存储器有三种:中断向量表、用户代码区、系统BOOT区。其中BOOT区不是所有单片机都有的,一般FLASH型的单片机有。
用户代码区用来存放用户的程序,中断向量表是中断服务程序的首地址。

C:外围模块寄存器
10H ——1FFH地址范围为外围模块寄存器的空间,有8位的外围模块寄存器,16位的外围模块寄存器。通过这些寄存器的设置可以控制单片机某一模块的工作。

中断使能1寄存器(IE1):该寄存器主要用来使能某些模块的中断功能,设置相应的比特位可以使得相应的模块具有中断功能。如果不设置,则相应的模块就不具有中断功能。


时钟模


时钟模块可以使单片机不同的低功耗应用。
时钟模块主要由高速晶体、低速晶体、数字控制振荡器(DCO)等构成。
三个不同的时钟提供不同的模块使用,产生的时钟为:辅助时钟(ACLK)、主系统时钟(MCLK)、子系统时钟(SMCLK)。
由于时钟模块产生三个不同的时钟信号,这样可以采用不同的时钟从而达到低功耗的目的。一般说来,系统的功耗与系统的工作频率成正比。
1:低速晶体振荡器
低速晶体振荡器支持超低功耗,它在低频模式下使用32768HZ的晶体。32768HZ的晶体连接到XIN 和XOUT管脚,不需要任何电容,低频的模式下内部提供了集成的电容。低速晶体振荡器在高频模式下也支持高速晶体,但必须XIN 和XOUT管脚外接电容。

高速晶体振荡器需要的功耗更大。高速晶体振荡器需要外接高速晶体在XIN 2和XOUT2两个管脚,并且需要外接电容。

DOC是内部集成的RC类型的振荡器。DOC的频率会随温度和电压的变化而变化。并且不同的芯片DOC的频率也不一样。
当系统复位(POWER UP CLEAR)后,DCO被选择为系统的MCLK和SMCLK的时钟源,RC选择为内部电阻产生振荡。RSELx=3,DCOx=4,DCO工作频率处于中间。(720KHZ左右)
当系统复位(POWER UP CLEAR)后,DCOCTL初始值为60H ,BCSCTL1为84H,BCSCTL2复位。

MSP430有一种活动模式和五种低功耗模式。可以在6us内由低功耗模式迅速进入到活动模式,它的工作模式主要通过状态寄存器中的CPUOFF、OSCFF、SCG0 、SCG1等比特来设置。

XT2CLK :高频时钟源。需要外接两个振荡电容。可以外接频率450KHZ —— 8MHZ的标准晶振。常用的是8MHZ的。

微处理器复位后,MCLK和SMCLK配置为DCO时钟(默认的值为800KHZ),ACLK配置为LFXT1时钟模块,并且为低频模式。修改DCOCTL和BCSCTL1和BCSCTL2寄存器的值,可以对系统和各个模块的时钟进行设置。


LFXT1CLK:低频时钟源
XT2CLK:高频时钟源
DCOCLK:数字控制RC振荡器


时钟发生器的原理说明
问题的提出:
1: 高频,以便对系统硬件请求和事件作出快速的响应。
2:低频 以便将电流消耗降至最小
3:稳定的频率 以便满足定时器的应用
4:低Q值振荡器 以保证开始和停止操作没有延时



看门狗定时器
正常操作期间,一次WDT定时时间到,将产生一次器件的复位。如果通过编程使WDT定时时间稍大于程序执行一遍所用的时间,并且程序执行过程中有对看门狗定时器清零的指令,使计数器重新计数,则程序正常运行时,就会在WDT定时时间到达之前对WDT清零,不会有WDT溢出,如果

由于干扰使程序跑飞,则不会在WDT定时时间到达之前执行WDT清零指令,WDT就会溢出,从而产生系统复位,CPU需要重新运行用户程序,这样程序就可以又恢复正常运行的状态。

WDTCTL=WDTPW+WDTHOLD //停止看门狗 WDTPW看门狗口令(0x5A00) WDTHOLD(0X0080)=1;时钟禁止计数



#pragma vector=TIMERA1_VECTOR //中断服务子程序
__interrupt void Timer_A(void)
{
;
}

基本定时器
MSP430具有基本定时器(Basic Timer1),Basic Timer1经常用在低功耗应用中,它的工作目的就是支持软件和外围模块工作在低频率、低功耗条件下。Basic Timer1通过对SMCLK 和ACLK进行分频,向其他外围模块提供低频率控制信号。Basic Timer1非常适合于周期性地产生中断
。(F14系列没有该定时器)

Timer_A 的特性
1:输入时钟可以有多种选择,可以是慢始终、快时钟以及外部时钟。
2:没有自动重装时间常数功能,但产生的定时脉冲或PWM(脉宽调制)信号没有软件带来的误差。
3:不仅能捕获外部事件发生的时间还可以锁定其发生时的高低电平。
4:可以实现串行通信
5:完善的中断服务功能。
6:4种计数功能的选择
7:8种输出计数功能的选择。
8:支持多种时序控制
9:DMA使能


TAR 16位计数器
1:修改Timer _A:当计数时钟不是MLCK时,写入应该计数器在计数器停止计数时,因为它与CPU不同步,可能引起时间的竞争。

2:Timer _A控制位的改变:如果用TACNTL控制寄存器中的控制位来改变定时器工作,修改时定时器应该停止,尤其是修改输入选择位、输入分频器和定时器清零。
推荐的指令顺序如下:
修改控制寄存器和停止定时器
启动定时器
Timer_A的工作模式
1:停止模式
停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式后都可用。当定时器暂停后重新计数时,计数器将从暂停的值开始一暂停前的计数方向计数。
2:增计数模式
捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器。因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等(或定时器值大于CCR0的值)时,定时器复位并从0开始重新计数。
中断标志位的设置:当计数器的值等于CCR0的值时,设置标志位CCIFG0(捕获比较中断标志)为1,而定时器从CCR0计数到0时,设置标志位TAIFG(定时器溢出标志)为1.
计数过程中可以通过改变CCR0的值来重新设置计数周期。
当新周期大于旧周期时,定时器会直接增计数周期。
当新周期小于旧周期时 ,改变CCR0的值
1:时钟为高频率改变CCR0的值,则定时

器会在下一个时钟上升沿返回到0
2:时钟为低频率改变CCR0的值,则定时器接受新周期并在返回到0之前,继续增加一个时钟周期。

3:连续计数模式
在需要65536个时钟周期的定时场合常用连续计数模式。定时器从当前值计数到0FFFFH后,又从0开始重新计数。

4:增/减计数模式
需要生成对称波形的情况可以使用增/减计数模式。定时器先增计数CCR0的值,然后反向减计数到0.
定时器TAR的值从CCR0—1增计数到CCR0时,中断标志CCIFG0置位,定时器从1到0时,中断标志TAIFG置位。
在增计数模式过程中,也可以通过改变CCR0的值来重置计数周期。在增计数阶段与增计数模式完全相同,在减计数阶段要在减计数完成(计数到0)后才可以有效。

(2)捕获/比较模块
Timer_A有多个相同的捕获/比较模块,为实时处理提供灵活的手段,每个模块都可以用于捕获事件发生的时间或产生定时时间间隔。当发生捕获事件发生或定时时间到达时将引起中断。可在满足捕获条件时,将TAR的值写入捕获寄存器;可在TAR的值与比较器值相等时,设置标志位。
通过CCTLx中的CAPx选择模式,既可以用于捕获,也可以用于比较。
CAPx=1时,工作于捕获模式,如果在选定的引脚有脉冲的触发,则TAR的值将写入到CCRx中。
CAPx=0时,工作于比较模式。
比较模式时设置EQUx信号有差别:当TAR的值大于或等于CCR0中的值时,EQU0=1;当TAR的值等于CCR1或CCR2中的值时,EQU1=1或EQU2=1。


在增计数模式下,当TAR增加到CCRx或CCR0计数到0时,OUTx信号按选择的输出模式发生变化。

(3)Timer_A实现PWM
PWM信号是一种具有固定周期和不同占空比的数字信号。
Timer_A定时器的计数器工作在增计数方式,输出采用模式7(复位和置位),则可以利用寄存器CCR0控制PWM的周期。用某个寄存器CCRx控制占空比。




Timer_ A模块使用两个中断向量,一个单独分配给捕获/比较寄存器CCR0,另外作为共用中断向量用于定时器和其它的捕获/比较寄存器。
捕获/比较寄存器CCR0中断向量具有最高的优先级,因为CCR0能用于定义增计数和/增减计数模式的周期,因此它需要最快的服务CCIFG0在被中断服务时能够自动复位。
CCR1~CCRx和定时器共用另外一个中断向量,属于多源中断,对应的中断标志CCIFG1~CCIFGx和TAIFG1在读中断向量字TAIV后,自动复位。 TAIFG1在读中断向量字TAIV后自动复位。如果不访问TAIV寄存器,则不能自动复位,需软件清除。

如果只有一个TAIV中断发生,那么进入中断服务程序后,向量寄存器TAIV的值就是该中断的特征值;如果多于一个TAIV中断发生,那么具有最高优先级的那个中断

源的特征值将赋给向量寄存器TAIV中。对于向量寄存器TAIV的读写访问,会将引起中断的中断源中具有最高优先级的中断标志复位。

TAIFG标志位在计数器的值从TACCR0设定值变为0时置位;RACCIFG0标志位在计数器的计数值达到TACCR0设定值时置位,两者刚好相差一个定时器输入时钟周期。



MSP430的C语言关键字扩展
1:interrupt
该关键字用于中断函数
语法:interrupt void 函数名()或者
interrupt[中断向量] void 函数名()
参数:中断函数没有参数
中断函数可能需要指定中断向量
返回:中断一般位void ,没有返回
2:no_init
该变量为非易失变量的类型修正符
语法:no_init变量声明
说明:在默认的情况下,MSP430的C语言编译器将变量存放于RAM中,并在启动时对其进行初始化。no_init类型修正符使编译器把变量放在非易失RAM 区中(EEPROM 或FLASH等)。
3:sfrb
该关键字用于声明单字节I/O数据类型对象
语法:sfrb 标识符=常量表达式
说明:sfrb表示一个I/O寄存器。
* 它等于无符号字符
*只能直接寻址
*地址范围0x00~0xff
例子:sfrb P1OUT =0x0021
定义了P1端口的输出寄存器
4:sfrw
该关键字用于声明双字节I/O数据类型对象
语法:sfrw 标识符=常量表达式
说明:sfrw表示一个I/O寄存器。
* 它等于无符号字符
*只能直接寻址
*地址范围0x100~0x1ff
例子:sfrw WDTCTL =0x0021
定义了看门狗的输寄存器



MSP430本征函数
1:_args$
该本征函数返回参数数组
2:_argt$
返回参数类型
3:_BIC_SR
状态寄存器屏蔽复位
说明该函数用来屏蔽状态寄存器的某个位
4:_BIS_SR
状态寄存器屏蔽置位
5:_DINT
禁止中断
语法:_DINT()
说明:该函数禁止中断
6:_ENIT
打开中断
语法:_EINT()
说明:该函数打开中断
例子:_DINT(); //关闭中断
_EINT(); //开中断
7:_NOP
执行空操作。
语法:_NOP();
说明:该函数执行空操作
例子:延迟一点时间
for(int n=0;n<10;n++)_NOP();
8:_OPC
执行DW常数说明伪指令


I/O口时复位时的状态

1:功能寄存器PxSEL
复位时值全为0.默认为I/O口功能
2:方向控制器PxDIR
复位时全为0.
3:输出控制寄存器PxOUT
复位时值不确定
4:输入状态寄存器PxIN
复位时值不确定
5:中断允许寄存器PxIE
复位是为0,不允许中断
6:中断触发选择寄存器PxIES
复位为0,默认为上升沿触发
7:中断标志寄存器PxIFG

复位为0,必须通过软件复位。
当P1SEL P2SEL寄存器的位设置为1,则I/O口中断功能失效。
在P1 P2口进行中断功能允许时,在进入中断程序时必须用软件对中断标志位清零,中断标志不可以自动清零。


POR(上电复位Power On Reset)信号产生之后,系统的初始状态为:
1、RST/NMI引脚被设置为复位模式;
2、I/O引脚被转换为输入模式;
3、状态寄存器复位;
4、看门狗定时器进入到看门狗模式;
5、程序计数器PC指向复位向量的地址(0FFFEH)。



在计算机体系中,使用瓦特/百万指令每秒(W/MIPS)来衡量处理机的功耗与性能关系的。

MSP430在活动模式下250uA/MIPS。而传统的51单片机是10~20mA/MIPS.

MSP430的漏电流最大50nA,而51一般是1~10uA
























相关文档
最新文档