MSP430G2553学习笔记数据手册.docx
《MSP430G2553学习笔记数据手册.docx》由会员分享,可在线阅读,更多相关《MSP430G2553学习笔记数据手册.docx(58页珍藏版)》请在冰点文库上搜索。
MSP430G2553学习笔记数据手册
MSP430G2553学习笔记(数据手册)
MSP430G2553性能参数(DIP—20)
工作电压范围:
1.8~3。
6V。
5种低功耗模式。
16位的RISC结构,62。
5ns指令周期.
超低功耗:
运行模式—230µA;
待机模式—0.5µA;
关闭模式—0.1µA;
可以在不到1µs的时间里超快速地从待机模式唤醒.
基本时钟模块配置:
具有四种校准频率并高达16MHz的内部频率;
内部超低功耗LF振荡器;
32。
768KHz晶体;
外部数字时钟源。
两个16位Timer_A,分别具有三个捕获/比较寄存器。
用于模拟信号比较功能或者斜率模数(A/D)转换的片载比较器。
带内部基准、采样与保持以及自动扫描功能的10位200—ksps模数(A/D)转换器。
16KB闪存,512B的RAM。
16个I/O口。
注意:
MSP430G2553无P3口!
MSP430G2553的时钟
基本时钟系统的寄存器
DCOCTL—DCO控制寄存器
DCOx
DCO频率选择控制1
MODx
DCO频率校正选择,通常令MODx=0
注意:
在MSP430G2553上电复位后,默认RSEL=7,DCO=3,通过数据手册查得DCO频率大概在0.8~1。
5MHz之间。
BCSCTL1—基本时钟控制寄存器1
XT2OFF
不用管,因为MSP430G2553内部没有XT2提供的HF时钟
XTS
不用管,默认复位后的0值即可
DIVAx
设置ACLK的分频数
00/1
01/2
10/4
11/8
RSELx
DCO频率选择控制2
BCSCTL2-基本时钟控制寄存器2
SELMx
MCLK的选择控制位
00DCOCLK
01DCOCLK
10LFXT1CLK或者VLOCLK
11LFXT1CLK或者VLOCLK
DIVMx
设置MCLK的分频数
00/1
01/2
10/4
11/8
SELS
SMCLK的选择控制位
0DCOCLK
1LFXT1CLK或者VLOCLK
DIVSx
设置SMCLK的分频数
00/1
01/2
10/4
11/8
DCOR
DCO直流发生电阻选择,此位一般设0
0内部电阻
1外部电阻
BCSCTL3—基本时钟控制寄存器3
XT2Sx
不用管
LFXT1Sx
00LFXT1选为32。
768KHz晶振
01保留
10VLOCLK
11外部数字时钟源
XCAPx
LFXT1晶振谐振电容选择
001pF
016pF
1010pF
1112。
5pF
msp430g2553.h中基本时钟系统的内容
/************************************************************
*BasicClockModule
************************************************************/
#define__MSP430_HAS_BC2__/*DefinitiontoshowthatModuleisavailable*/
SFR_8BIT(DCOCTL);/*DCOClockFrequencyControl*/
SFR_8BIT(BCSCTL1);/*BasicClockSystemControl1*/
SFR_8BIT(BCSCTL2);/*BasicClockSystemControl2*/
SFR_8BIT(BCSCTL3);/*BasicClockSystemControl3*/
#defineMOD0(0x01)/*ModulationBit0*/
#defineMOD1(0x02)/*ModulationBit1*/
#defineMOD2(0x04)/*ModulationBit2*/
#defineMOD3(0x08)/*ModulationBit3*/
#defineMOD4(0x10)/*ModulationBit4*/
#defineDCO0(0x20)/*DCOSelectBit0*/
#defineDCO1(0x40)/*DCOSelectBit1*/
#defineDCO2(0x80)/*DCOSelectBit2*/
#defineRSEL0(0x01)/*RangeSelectBit0*/
#defineRSEL1(0x02)/*RangeSelectBit1*/
#defineRSEL2(0x04)/*RangeSelectBit2*/
#defineRSEL3(0x08)/*RangeSelectBit3*/
#defineDIVA0(0x10)/*ACLKDivider0*/
#defineDIVA1(0x20)/*ACLKDivider1*/
#defineXTS(0x40)/*LFXTCLK0:
LowFreq。
/1:
HighFreq。
*/
#defineXT2OFF(0x80)/*EnableXT2CLK*/
#defineDIVA_0(0x00)/*ACLKDivider0:
/1*/
#defineDIVA_1(0x10)/*ACLKDivider1:
/2*/
#defineDIVA_2(0x20)/*ACLKDivider2:
/4*/
#defineDIVA_3(0x30)/*ACLKDivider3:
/8*/
#defineDIVS0(0x02)/*SMCLKDivider0*/
#defineDIVS1(0x04)/*SMCLKDivider1*/
#defineSELS(0x08)/*SMCLKSourceSelect0:
DCOCLK/1:
XT2CLK/LFXTCLK*/
#defineDIVM0(0x10)/*MCLKDivider0*/
#defineDIVM1(0x20)/*MCLKDivider1*/
#defineSELM0(0x40)/*MCLKSourceSelect0*/
#defineSELM1(0x80)/*MCLKSourceSelect1*/
#defineDIVS_0(0x00)/*SMCLKDivider0:
/1*/
#defineDIVS_1(0x02)/*SMCLKDivider1:
/2*/
#defineDIVS_2(0x04)/*SMCLKDivider2:
/4*/
#defineDIVS_3(0x06)/*SMCLKDivider3:
/8*/
#defineDIVM_0(0x00)/*MCLKDivider0:
/1*/
#defineDIVM_1(0x10)/*MCLKDivider1:
/2*/
#defineDIVM_2(0x20)/*MCLKDivider2:
/4*/
#defineDIVM_3(0x30)/*MCLKDivider3:
/8*/
#defineSELM_0(0x00)/*MCLKSourceSelect0:
DCOCLK*/
#defineSELM_1(0x40)/*MCLKSourceSelect1:
DCOCLK*/
#defineSELM_2(0x80)/*MCLKSourceSelect2:
XT2CLK/LFXTCLK*/
#defineSELM_3(0xC0)/*MCLKSourceSelect3:
LFXTCLK*/
#defineLFXT1OF(0x01)/*Low/highFrequencyOscillatorFaultFlag*/
#defineXT2OF(0x02)/*Highfrequencyoscillator2faultflag*/
#defineXCAP0(0x04)/*XIN/XOUTCap0*/
#defineXCAP1(0x08)/*XIN/XOUTCap1*/
#defineLFXT1S0(0x10)/*Mode0forLFXT1(XTS=0)*/
#defineLFXT1S1(0x20)/*Mode1forLFXT1(XTS=0)*/
#defineXT2S0(0x40)/*Mode0forXT2*/
#defineXT2S1(0x80)/*Mode1forXT2*/
#defineXCAP_0(0x00)/*XIN/XOUTCap:
0pF*/
#defineXCAP_1(0x04)/*XIN/XOUTCap:
6pF*/
#defineXCAP_2(0x08)/*XIN/XOUTCap:
10pF*/
#defineXCAP_3(0x0C)/*XIN/XOUTCap:
12。
5pF*/
#defineLFXT1S_0(0x00)/*Mode0forLFXT1:
Normaloperation*/
#defineLFXT1S_1(0x10)/*Mode1forLFXT1:
Reserved*/
#defineLFXT1S_2(0x20)/*Mode2forLFXT1:
VLO*/
#defineLFXT1S_3(0x30)/*Mode3forLFXT1:
Digitalinputsignal*/
#defineXT2S_0(0x00)/*Mode0forXT2:
0。
4-1MHz*/
#defineXT2S_1(0x40)/*Mode1forXT2:
1-4MHz*/
#defineXT2S_2(0x80)/*Mode2forXT2:
2-16MHz*/
#defineXT2S_3(0xC0)/*Mode3forXT2:
Digitalinputsignal*/
基本时钟系统例程(DCO)
MSP430G2553在上电之后默认CPU执行程序的时钟MCLK来自于DCO时钟。
TI提供的LaunchPad上,P1。
0和P1.6分别接了红色和绿色的LED灯,下面写一个程序让它们交替闪烁;之后我们来改变DCO的频率,进而使软延时时间变化,可以看到LED闪烁间隔有变化.
#include"msp430g2553.h"
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR|=BIT0+BIT6;
while
(1)
{
P1OUT^=BIT0+BIT6;
__delay_cycles(100000);
}
}
这段程序采用430上电后默认的DCO频率,假设是1MHz的话,则延时100000个DCO提供的MCLK大概是0.1s左右。
下面一段程序,将DCOx设置为1,RSELx设置为1,通过数据手册查得DCO频率大概在0.06~0。
14MHz之间,所以明显MCLK要慢得多了,因此LED闪烁时间延长。
#include"msp430g2553.h"
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;
DCOCTL|=DCO0;
DCOCTL&=~(DCO1+DCO2);
BCSCTL1|=RSEL0;
BCSCTL1&=~(RSEL1+RSEL2+RSEL3);
P1DIR|=BIT0+BIT6;
while
(1)
{
P1OUT^=BIT0+BIT6;
__delay_cycles(100000);
}
}
MSP430G2553的I/O口
MSP430G2553共有2组数字I/O口:
P1和P2,每组各有8个引脚,每个引脚都能够响应中断,接受外部输入的上升沿或者下降中断请求。
所有I/O口均与单片机内部外设的特殊功能引脚复用,当我们选用I/O功能时,要作为通用I/O口来使用,这需要相应的寄存器来进行控制。
I/O头文件内容
/************************************************************
*DIGITALI/OPort1/2Pullup/PulldownResistors
************************************************************/
#define__MSP430_HAS_PORT1_R__/*DefinitiontoshowthatModuleisavailable*/
#define__MSP430_HAS_PORT2_R__/*DefinitiontoshowthatModuleisavailable*/
SFR_8BIT(P1IN);/*Port1Input*/
SFR_8BIT(P1OUT);/*Port1Output*/
SFR_8BIT(P1DIR);/*Port1Direction*/
SFR_8BIT(P1IFG);/*Port1InterruptFlag*/
SFR_8BIT(P1IES);/*Port1InterruptEdgeSelect*/
SFR_8BIT(P1IE);/*Port1InterruptEnable*/
SFR_8BIT(P1SEL);/*Port1Selection*/
SFR_8BIT(P1SEL2);/*Port1Selection2*/
SFR_8BIT(P1REN);/*Port1ResistorEnable*/
SFR_8BIT(P2IN);/*Port2Input*/
SFR_8BIT(P2OUT);/*Port2Output*/
SFR_8BIT(P2DIR);/*Port2Direction*/
SFR_8BIT(P2IFG);/*Port2InterruptFlag*/
SFR_8BIT(P2IES);/*Port2InterruptEdgeSelect*/
SFR_8BIT(P2IE);/*Port2InterruptEnable*/
SFR_8BIT(P2SEL);/*Port2Selection*/
SFR_8BIT(P2SEL2);/*Port2Selection2*/
SFR_8BIT(P2REN);/*Port2ResistorEnable*/
P1口
P1。
0、P1。
1、P1。
2
P1.3
P1。
4
P1.5、P1。
6、P1。
7
P2.0、P2。
1、P2.2、P2.3、P2。
4、P2.5
P2。
6
P2.7
P1DIR用来选择I/O口是输入还是输出,0为输入,1为输出。
P1IN为输入寄存器,外部的电平输入状态可从此寄存器相应的位读取。
P1OUT为输出寄存器,向外输出的电平状态可从此寄存器送出.
P1SEL和P1SEL2为引脚功能选择.
MSP430G2553的Timer_A
Timer_A的工作原理
MSP430G2553内部有两个Timer_A模块,分别是Timer0_A3和Timer1_A3。
“3”表示每个Timer_A模块有3组“捕获/比较”寄存器。
Timer_A的主要特性包括:
(1)具有16位定时/计数功能,3种计数模式可选
(2)16位定时计数器时钟源可选
(3)可在CPU不介入的情况下,产生PWM波
(4)计数器溢出可产生中断
Timer_A又两部分组成:
主计数器和比较捕获模块.其中主计数器如下图。
TAR为16主计数器的当前计数值,可对TAR赋初值。
主计数器计数时钟有4种来源,通过TASSELx来进行选择。
IDx可对输入时钟进行分频,TACLR为主计数器的清零控制位,MCx用来选择主计数器的4种计数模式,TAIFG为主计数器中断标志位。
■TASSELx:
00=外部管脚时钟输入
01=ACLK
10=SMCLK
11=TACLK取反
■IDx:
00=不分频
01=2分频
10=4分频
11=8分频
■TACLR:
0=不清零1=清零
Timer_A一共有三种计数模式,分别是:
增计数、连续增计数和增减计数。
增计数模式下,每个时钟周期计数值TAR加1,当TAR值超过TACCR0时,TAR自动清零,并且置位TAIFG标志位。
而后TAR从0值重新开始加1。
改变TACCR0的值即可改变定时周期。
连续增计数模式下,TAR从零加1,加到溢出值0xFFFF为止,之后自动归零重新开始。
通常我们利用该计数模式进行信号的捕捉,利用TACCRx寄存器存储捕获发生的时刻。
增减计数模式下,TAR的值从零加到TACRR0,而后再减到零,如此循环。
通常我们利用该计数模式产生对称、可加死区延时的PWM波。
Timer_A的另一重要组成部分,是捕获/比较模块,每个Timer_A均有3个捕获/比较模块,它的作用主要有两方面.一是在比较模式下,每个捕获/比较模块都拿自身捕获/比较寄存器TACCRx的值与主计数器TAR的值比较,一旦相等,就自动的改变某个引脚的输出电平,一共有8种电平变化规律可选,这样可以在无CPU干预的情况下产生PWM波;二是在捕获模式下,从某个指定引脚的输入电平跳变可以触发捕获电路,并将此时主计数器的数值自动保存到相应的捕获值寄存器TACCRx中,这个过程纯硬件实现,无CPU干预,可以用来测量频率、占空比等。
捕获/比较模块结构图如下:
CAP用来切换选择捕获/比较工作模式;CCISx选择捕获输入源;CMx选择捕获触发沿状态,COV为捕获溢出标志位,如果前一次的捕获值未被读取而新的捕获已经产生,则溢出标志位会置位;捕获引脚的电平状态可以实时的通过CCI读出;由于捕获信号可能与时钟信号不同步,从而产生数字电路竞争,我们可以置位SCS进行同步捕获,假设实际信号的发生时刻值为N,那么同步捕捉到的值将为N+1,建议均采用同步捕捉.
在比较模式下,我们可以通过程序填写TACCRx的值,硬件会自动的将该值与TAR的值进行比较,一旦相等,即产生EQU信号,则通过输出引脚产生电平变化,其中OUTMODEx可以选择电平变化的8种方式,这样就可以产生不同种类的PWM波.OUT可以控制引脚的输出电平(高、低的选择)。
已Timer0_A3为例,其捕获/比较引脚均与I/O口复用,具体复用引脚参加数据手册.
在比较输出模式0下,输出引脚的状态由OUT位控制。
其余7种模式下,引脚电平的变化如下图:
增计数模式下
连续增计数模式下
增减计数模式下
Timer_A头文件内容
/************************************************************
*Timer0_A3
************************************************************/
#define__MSP430_HAS_TA3__/*DefinitiontoshowthatModuleisavailable*/
SFR_16BIT(TA0IV);/*Timer0_A3InterruptVectorWord*/
SFR_16BIT(TA0CTL);/*Timer0_A3Control*/
SFR_16BIT(TA0CCTL0);/*Timer0_A3Capture/CompareControl0*/
SFR_16BIT(TA0CCTL1);/*Timer0_A3Capture/CompareControl1*/
SFR_16BIT(TA0CCTL2);/*Timer0_A3Capture/CompareControl2*/
SFR_16BIT(TA0R);/*Timer0_A3*/
SFR_16BIT(TA0CCR0);/*Timer0_A3Capture/Compare0*/
SFR_16BIT(TA0CCR1);/*Timer0_A3Capture/Compare1*/
SFR_16BIT(TA0CCR2);/*Timer0_A3Capture/Compare2*/
/*Alternateregisternames*/
#defineTAIVTA0IV/*TimerAInterruptVectorWord*/
#defineTACTLTA0CTL/*TimerAControl*/
#defineTACCTL0TA0CCTL0/*TimerACapture/CompareControl0*/
#defineTACCTL1TA0CCTL1/*TimerACapture/CompareControl1*/
#defineTACCTL2TA0CCTL2/*TimerACapture/CompareControl2*/
#defineTARTA0R/*TimerA*/
#defineTACCR0TA0CCR0/*TimerACapture/Compare0*/
#defineTACCR1TA0CCR1/*TimerACapture/Compare1*/
#defineTACCR2TA0CCR2/*TimerACapture/Compare2*/
#defineTAIV_TA0IV_/*TimerAInterruptVectorWord*/
#defineTACTL_TA0CTL_/*TimerAControl*/
#defineTACCTL0_TA0CCTL0_/*TimerACapture/CompareCon