最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

MSP430G2553学习笔记(数据手册)

IT圈 admin 30浏览 0评论

2024年5月24日发(作者:犁兴安)

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

01

10

11

RSELx

DCO频率选择控制2

/1

/2

/4

/8

BCSCTL2-基本时钟控制寄存器2

SELMx

MCLK的选择控制位

00

01

10

11

DIVMx

设置MCLK的分频数

00

01

10

11

SELS

SMCLK的选择控制位

0

1

DIVSx

设置SMCLK的分频数

00

01

10

11

DCOR

DCO直流发生电阻选择,此位一般设0

0

1

内部电阻

外部电阻

/1

/2

/4

/8

DCOCLK

LFXT1CLK或者VLOCLK

/1

/2

/4

/8

DCOCLK

DCOCLK

LFXT1CLK或者VLOCLK

LFXT1CLK或者VLOCLK

BCSCTL3-基本时钟控制寄存器3

XT2Sx

不用管

LFXT1Sx

00

01

10

11

XCAPx

LFXT1晶振谐振电容选择

00

01

10

11

1pF

6pF

10pF

12.5pF

LFXT1选为32.768KHz晶振

保留

VLOCLK

外部数字时钟源

msp430g2553.h中基本时钟系统的内容

/************************************************************

* Basic Clock Module

************************************************************/

#define __MSP430_HAS_BC2__ /* Definition to show that Module is

available */

SFR_8BIT(DCOCTL); /* DCO Clock Frequency Control */

SFR_8BIT(BCSCTL1); /* Basic Clock System Control 1 */

SFR_8BIT(BCSCTL2); /* Basic Clock System Control 2 */

SFR_8BIT(BCSCTL3); /* Basic Clock System Control 3 */

#define MOD0 (0x01) /* Modulation Bit 0 */

#define MOD1 (0x02) /* Modulation Bit 1 */

#define MOD2 (0x04) /* Modulation Bit 2 */

#define MOD3 (0x08) /* Modulation Bit 3 */

#define MOD4 (0x10) /* Modulation Bit 4 */

#define DCO0 (0x20) /* DCO Select Bit 0 */

#define DCO1 (0x40) /* DCO Select Bit 1 */

#define DCO2 (0x80) /* DCO Select Bit 2 */

#define RSEL0 (0x01) /* Range Select Bit 0 */

#define RSEL1 (0x02) /* Range Select Bit 1 */

#define RSEL2 (0x04) /* Range Select Bit 2 */

#define RSEL3 (0x08) /* Range Select Bit 3 */

#define DIVA0 (0x10) /* ACLK Divider 0 */

#define DIVA1 (0x20) /* ACLK Divider 1 */

#define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */

#define XT2OFF (0x80) /* Enable XT2CLK */

#define DIVA_0 (0x00) /* ACLK Divider 0: /1 */

#define DIVA_1 (0x10) /* ACLK Divider 1: /2 */

#define DIVA_2 (0x20) /* ACLK Divider 2: /4 */

#define DIVA_3 (0x30) /* ACLK Divider 3: /8 */

#define DIVS0 (0x02) /* SMCLK Divider 0 */

#define DIVS1 (0x04)

#define SELS (0x08)

1:XT2CLK/LFXTCLK */

#define DIVM0 (0x10)

#define DIVM1 (0x20)

#define SELM0 (0x40)

#define SELM1 (0x80)

#define DIVS_0 (0x00)

#define DIVS_1 (0x02)

#define DIVS_2 (0x04)

#define DIVS_3 (0x06)

#define DIVM_0 (0x00)

#define DIVM_1 (0x10)

#define DIVM_2 (0x20)

#define DIVM_3 (0x30)

#define SELM_0 (0x00)

#define SELM_1 (0x40)

#define SELM_2 (0x80)

*/

#define SELM_3 (0xC0)

#define LFXT1OF (0x01)

Flag */

#define XT2OF (0x02)

*/

#define XCAP0 (0x04)

#define XCAP1 (0x08)

#define LFXT1S0 (0x10)

#define LFXT1S1 (0x20)

#define XT2S0 (0x40)

#define XT2S1 (0x80)

#define XCAP_0 (0x00)

/* SMCLK Divider 1 */

/* SMCLK Source Select 0:DCOCLK /

/* MCLK Divider 0 */

/* MCLK Divider 1 */

/* MCLK Source Select 0 */

/* MCLK Source Select 1 */

/* SMCLK Divider 0: /1 */

/* SMCLK Divider 1: /2 */

/* SMCLK Divider 2: /4 */

/* SMCLK Divider 3: /8 */

/* MCLK Divider 0: /1 */

/* MCLK Divider 1: /2 */

/* MCLK Divider 2: /4 */

/* MCLK Divider 3: /8 */

/* MCLK Source Select 0: DCOCLK */

/* MCLK Source Select 1: DCOCLK */

/* MCLK Source Select 2: XT2CLK/LFXTCLK

/* MCLK Source Select 3: LFXTCLK */

/* Low/high Frequency Oscillator Fault

/* High frequency oscillator 2 fault flag

/* XIN/XOUT Cap 0 */

/* XIN/XOUT Cap 1 */

/* Mode 0 for LFXT1 (XTS = 0) */

/* Mode 1 for LFXT1 (XTS = 0) */

/* Mode 0 for XT2 */

/* Mode 1 for XT2 */

/* XIN/XOUT Cap : 0 pF */

#define XCAP_1 (0x04) /* XIN/XOUT Cap : 6 pF */

#define XCAP_2 (0x08) /* XIN/XOUT Cap : 10 pF */

#define XCAP_3 (0x0C) /* XIN/XOUT Cap : 12.5 pF */

#define LFXT1S_0 (0x00) /* Mode 0 for LFXT1 : Normal operation */

#define LFXT1S_1 (0x10) /* Mode 1 for LFXT1 : Reserved */

#define LFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */

#define LFXT1S_3 (0x30) /* Mode 3 for LFXT1 : Digital input signal

*/

#define XT2S_0 (0x00) /* Mode 0 for XT2 : 0.4 - 1 MHz */

#define XT2S_1 (0x40) /* Mode 1 for XT2 : 1 - 4 MHz */

#define XT2S_2 (0x80) /* Mode 2 for XT2 : 2 - 16 MHz */

#define XT2S_3 (0xC0) /* Mode 3 for XT2 : Digital input signal

*/

基本时钟系统例程(DCO)

MSP430G2553在上电之后默认CPU执行程序的时钟MCLK来自于DCO时钟。TI提供的Launch Pad

上,P1.0和P1.6分别接了红色和绿色的LED灯,下面写一个程序让它们交替闪烁;之后我们来改变DCO

的频率,进而使软延时时间变化,可以看到LED闪烁间隔有变化。

#include "msp430g2553.h"

void main(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"

void main(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头文件内容

/************************************************************

* DIGITAL I/O Port1/2 Pull up / Pull down Resistors

************************************************************/

#define __MSP430_HAS_PORT1_R__ /* Definition to show that Module is

available */

#define __MSP430_HAS_PORT2_R__ /* Definition to show that Module is

available */

SFR_8BIT(P1IN); /* Port 1 Input */

SFR_8BIT(P1OUT); /* Port 1 Output */

SFR_8BIT(P1DIR); /* Port 1 Direction */

SFR_8BIT(P1IFG); /* Port 1 Interrupt Flag */

SFR_8BIT(P1IES); /* Port 1 Interrupt Edge Select */

SFR_8BIT(P1IE); /* Port 1 Interrupt Enable */

SFR_8BIT(P1SEL); /* Port 1 Selection */

SFR_8BIT(P1SEL2); /* Port 1 Selection 2 */

SFR_8BIT(P1REN); /* Port 1 Resistor Enable */

SFR_8BIT(P2IN); /* Port 2 Input */

SFR_8BIT(P2OUT); /* Port 2 Output */

SFR_8BIT(P2DIR); /* Port 2 Direction */

SFR_8BIT(P2IFG); /* Port 2 Interrupt Flag */

SFR_8BIT(P2IES); /* Port 2 Interrupt Edge Select */

SFR_8BIT(P2IE); /* Port 2 Interrupt Enable */

SFR_8BIT(P2SEL); /* Port 2 Selection */

SFR_8BIT(P2SEL2); /* Port 2 Selection 2 */

SFR_8BIT(P2REN); /* Port 2 Resistor Enable */

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__ /* Definition to show that Module is

available */

SFR_16BIT(TA0IV); /* Timer0_A3 Interrupt Vector Word */

SFR_16BIT(TA0CTL); /* Timer0_A3 Control */

SFR_16BIT(TA0CCTL0); /* Timer0_A3 Capture/Compare Control 0 */

SFR_16BIT(TA0CCTL1); /* Timer0_A3 Capture/Compare Control 1 */

SFR_16BIT(TA0CCTL2); /* Timer0_A3 Capture/Compare Control 2 */

SFR_16BIT(TA0R); /* Timer0_A3 */

SFR_16BIT(TA0CCR0); /* Timer0_A3 Capture/Compare 0 */

SFR_16BIT(TA0CCR1); /* Timer0_A3 Capture/Compare 1 */

SFR_16BIT(TA0CCR2); /* Timer0_A3 Capture/Compare 2 */

/* Alternate register names */

#define TAIV TA0IV /* Timer A Interrupt Vector Word */

#define TACTL TA0CTL /* Timer A Control */

#define TACCTL0 TA0CCTL0 /* Timer A Capture/Compare Control 0 */

#define TACCTL1 TA0CCTL1 /* Timer A Capture/Compare Control 1 */

#define TACCTL2 TA0CCTL2

#define TAR TA0R

#define TACCR0 TA0CCR0

#define TACCR1 TA0CCR1

#define TACCR2 TA0CCR2

#define TAIV_ TA0IV_

#define TACTL_ TA0CTL_

#define TACCTL0_ TA0CCTL0_

#define TACCTL1_ TA0CCTL1_

#define TACCTL2_ TA0CCTL2_

#define TAR_ TA0R_

#define TACCR0_ TA0CCR0_

#define TACCR1_ TA0CCR1_

#define TACCR2_ TA0CCR2_

/* Alternate register names 2 */

#define CCTL0 TACCTL0

#define CCTL1 TACCTL1

#define CCTL2 TACCTL2

#define CCR0 TACCR0

#define CCR1 TACCR1

#define CCR2 TACCR2

#define CCTL0_ TACCTL0_

#define CCTL1_ TACCTL1_

#define CCTL2_ TACCTL2_

#define CCR0_ TACCR0_

#define CCR1_ TACCR1_

#define CCR2_ TACCR2_

#define TASSEL1 (0x0200)

#define TASSEL0 (0x0100)

#define ID1 (0x0080)

#define ID0 (0x0040)

#define MC1 (0x0020)

#define MC0 (0x0010)

#define TACLR (0x0004)

/* Timer A Capture/Compare Control 2 */

/* Timer A */

/* Timer A Capture/Compare 0 */

/* Timer A Capture/Compare 1 */

/* Timer A Capture/Compare 2 */

/* Timer A Interrupt Vector Word */

/* Timer A Control */

/* Timer A Capture/Compare Control 0 */

/* Timer A Capture/Compare Control 1 */

/* Timer A Capture/Compare Control 2 */

/* Timer A */

/* Timer A Capture/Compare 0 */

/* Timer A Capture/Compare 1 */

/* Timer A Capture/Compare 2 */

/* Timer A Capture/Compare Control 0 */

/* Timer A Capture/Compare Control 1 */

/* Timer A Capture/Compare Control 2 */

/* Timer A Capture/Compare 0 */

/* Timer A Capture/Compare 1 */

/* Timer A Capture/Compare 2 */

/* Timer A Capture/Compare Control 0 */

/* Timer A Capture/Compare Control 1 */

/* Timer A Capture/Compare Control 2 */

/* Timer A Capture/Compare 0 */

/* Timer A Capture/Compare 1 */

/* Timer A Capture/Compare 2 */

/* Timer A clock source select 1 */

/* Timer A clock source select 0 */

/* Timer A clock input divider 1 */

/* Timer A clock input divider 0 */

/* Timer A mode control 1 */

/* Timer A mode control 0 */

/* Timer A counter clear */

#define TAIE (0x0002) /* Timer A counter interrupt enable */

#define TAIFG (0x0001) /* Timer A counter interrupt flag */

#define MC_0 (0*0x10u) /* Timer A mode control: 0 - Stop */

#define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to CCR0

*/

#define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continous up

*/

#define MC_3 (3*0x10u) /* Timer A mode control: 3 - Up/Down */

#define ID_0 (0*0x40u) /* Timer A input divider: 0 - /1 */

#define ID_1 (1*0x40u)

#define ID_2 (2*0x40u)

#define ID_3 (3*0x40u)

#define TASSEL_0 (0*0x100u)

*/

#define TASSEL_1 (1*0x100u)

*/

#define TASSEL_2 (2*0x100u)

*/

#define TASSEL_3 (3*0x100u)

*/

#define CM1 (0x8000)

#define CM0 (0x4000)

#define CCIS1 (0x2000)

#define CCIS0 (0x1000)

#define SCS (0x0800)

#define SCCI (0x0400)

#define CAP (0x0100)

#define OUTMOD2 (0x0080)

#define OUTMOD1 (0x0040)

#define OUTMOD0 (0x0020)

#define CCIE (0x0010)

#define CCI (0x0008)

#define OUT (0x0004)

#define COV (0x0002)

#define CCIFG (0x0001)

#define OUTMOD_0 (0*0x20u)

#define OUTMOD_1 (1*0x20u)

#define OUTMOD_2 (2*0x20u)

*/

#define OUTMOD_3 (3*0x20u)

#define OUTMOD_4 (4*0x20u)

#define OUTMOD_5 (5*0x20u)

#define OUTMOD_6 (6*0x20u)

/* Timer A input divider: 1 - /2 */

/* Timer A input divider: 2 - /4 */

/* Timer A input divider: 3 - /8 */

/* Timer A clock source select: 0 - TACLK

/* Timer A clock source select: 1 - ACLK

/* Timer A clock source select: 2 - SMCLK

/* Timer A clock source select: 3 - INCLK

/* Capture mode 1 */

/* Capture mode 0 */

/* Capture input select 1 */

/* Capture input select 0 */

/* Capture sychronize */

/* Latched capture signal (read) */

/* Capture mode: 1 /Compare mode : 0 */

/* Output mode 2 */

/* Output mode 1 */

/* Output mode 0 */

/* Capture/compare interrupt enable */

/* Capture input signal (read) */

/* PWM Output signal if output mode 0 */

/* Capture/compare overflow flag */

/* Capture/compare interrupt flag */

/* PWM output mode: 0 - output only */

/* PWM output mode: 1 - set */

/* PWM output mode: 2 - PWM toggle/reset

/* PWM output mode: 3 - PWM set/reset */

/* PWM output mode: 4 - toggle */

/* PWM output mode: 5 - Reset */

/* PWM output mode: 6 - PWM toggle/set

*/

#define OUTMOD_7 (7*0x20u) /* PWM output mode: 7 - PWM reset/set */

#define CCIS_0 (0*0x1000u) /* Capture input select: 0 - CCIxA */

#define CCIS_1 (1*0x1000u) /* Capture input select: 1 - CCIxB */

#define CCIS_2 (2*0x1000u) /* Capture input select: 2 - GND */

#define CCIS_3 (3*0x1000u) /* Capture input select: 3 - Vcc */

#define CM_0 (0*0x4000u) /* Capture mode: 0 - disabled */

#define CM_1 (1*0x4000u) /* Capture mode: 1 - pos. edge */

#define CM_2 (2*0x4000u) /* Capture mode: 1 - neg. edge */

#define CM_3 (3*0x4000u) /* Capture mode: 1 - both edges */

/* T0_A3IV Definitions */

#define TA0IV_NONE (0x0000) /* No Interrupt pending */

#define TA0IV_TACCR1 (0x0002) /* TA0CCR1_CCIFG */

#define TA0IV_TACCR2 (0x0004) /* TA0CCR2_CCIFG */

#define TA0IV_6 (0x0006) /* Reserved */

#define TA0IV_8 (0x0008) /* Reserved */

#define TA0IV_TAIFG (0x000A) /* TA0IFG */

/************************************************************

* Timer1_A3

************************************************************/

#define __MSP430_HAS_T1A3__ /* Definition to show that Module is

available */

SFR_16BIT(TA1IV); /* Timer1_A3 Interrupt Vector Word */

SFR_16BIT(TA1CTL); /* Timer1_A3 Control */

SFR_16BIT(TA1CCTL0); /* Timer1_A3 Capture/Compare Control 0 */

SFR_16BIT(TA1CCTL1); /* Timer1_A3 Capture/Compare Control 1 */

SFR_16BIT(TA1CCTL2); /* Timer1_A3 Capture/Compare Control 2 */

SFR_16BIT(TA1R); /* Timer1_A3 */

SFR_16BIT(TA1CCR0); /* Timer1_A3 Capture/Compare 0 */

SFR_16BIT(TA1CCR1); /* Timer1_A3 Capture/Compare 1 */

SFR_16BIT(TA1CCR2); /* Timer1_A3 Capture/Compare 2 */

/* Bits are already defined within the Timer0_Ax */

/* T1_A3IV Definitions */

#define TA1IV_NONE (0x0000) /* No Interrupt pending */

#define TA1IV_TACCR1 (0x0002) /* TA1CCR1_CCIFG */

#define TA1IV_TACCR2 (0x0004) /* TA1CCR2_CCIFG */

#define TA1IV_TAIFG (0x000A) /* TA1IFG */

Timer0_A寄存器

TA0CTL-Timer0_A控制寄存器

TASSELx

主计数器时钟源选择

01 ACLK

IDx

时钟输入的分频控制

00 /1

01 /2

10 /4

11 /8

MCx

计数模式选择

00 停止模式

01 Up

10 Continuous

11 Up/Down

TACLR

清零控制

TAIE

TAIFG中断使能控制

0 禁止

1 使能

TAIFG

TAIFG中断标志

TASSEL_1

ID_0

ID_1

ID_2

ID_3

MC_0

MC_1

MC_2

MC_3

TACLR

TAIE

TAIFG

TA0R-主计数器计数寄存器

TA0CCRx-捕获/比较寄存器

TA0CCTLx-捕获/比较控制寄存器

CMx

捕获模式控制

00

01

10

11

CCISx

不进行捕获操作

捕获上升沿

捕获下降沿

MC_0

MC_1

MC_2

MC_3

上升沿和下降沿同时捕获

捕获引脚选择

00

01

10

11

SCS

CCIxA

CCIxB

GND

VCC

CCIS_0

CCIS_1

CCIS_2

CCIS_3

SCS

同步/异步捕获选择控制

0

1

异步捕获

同步捕获(建议)

CAP CAP

捕获/比较模式选择

0

1

比较模式

捕获模式

OUMODx

比较输出模式选择

000

001

010

电平输出模式:TAx引脚的输出由OUT控制位的值决定

OUTMOD_0

OUTMOD_1 置位模式:当主计数器计数至TACCRx值时,TAx引脚置1

取反/清零模式:当主计数器计数至TACCRx值时,TAx引脚取反,当主计数器计数至TACCR0

OUTMOD_2 值时,TAx引脚置0

011 置位清零模式:当主计数器计数至TACCRx值时,TAx引脚置1,当主计数器计数至TACCR0

OUTMOD_3

OUTMOD_4

OUTMOD_5

值时,TAx引脚置0

100

101

110

取反模式:当主计数器计数至TACCRx值时,TAx引脚取反

清零模式:当主计数器计数至TACCRx值时,TAx引脚置0

取反置位模式:当主计数器计数至TACCRx值时,TAx引脚取反,当主计数器计数至TACCR0

OUTMOD_6 值时,TAx引脚置1

111 清零置位模式:当主计数器计数至TACCRx值时,TAx引脚置0,当主计数器计数至TACCR0

OUTMOD_7 值时,TAx引脚置1

COV COV

捕获溢出标志位

CCIFG CCIFG

捕获/比较中断标志位

TA0IV-中断向量寄存器

MSP430G2553的ADC10

ADC10简介

ADC10是一个10位AD转换器,转换速度快。它包含一个10位的转换内核SAR、采样选择控制、

参考电压输出、数字量传输控制DTC等模块。DTC可以将数字量转换结果存储到任何一个内存单元内,

这不需要CPU来干预。

MSP430G2553的ADC10具有如下特点:

200ksps最大转换速率;

可编程设置采样/保持时间;

可以通过软件或者Timer_A触发转换;

可选内部参考电压,1.5V或者2.5V;

8路模拟输入通道;

内部转换通道自带温度传感器;

可选的转换时钟源;

单通道、重复单通道、序列采样、重复序列采样模式;

10位转换核心

转换核心将输入的模拟信号转换成10位数字量,将转换结果存储在ADC10MEM寄存器中。V

R+

V

R-

定义了模拟输入电压的上限和下限。当模拟输入电压大于V

R+

时,转换结果为03FFh,当模拟输入电压

小于V

R-

时,转换结果为0。转换结果按下式计算:

转换核心由两个控制寄存器来进行设置:ADC10CTL0、ADC10CTL1。转换核心通过ADC10ON来使

能工作。只有当ENC=0时,ADC10CTL0、ADC10CTL1的位才允许被改写;若要转换开始,必须将ENC=1。

转换时钟

ADC10模块的时钟称为ADC10CLK,转换时间和采样周期与之相关。ADC10的时钟源可以通过

ADC10SSELx来进行选择,并通过ADC10DIVx选择分频。ADC10的时钟源有:ACLK、SMCLK、MCLK

和ADC10OSC。

输入多路选择器

8路外部模拟输入和4路内部模拟输入可被选中为转换输入。

ADC10的外部输入包括:Ax、V

eREF+

、V

REF-

,这些端口与I/O口复用。2553的I/O口为数字CMOS

门电路,当模拟信号加在数字CMOS门时,VCC与GND之间会有寄生电流,禁用I/O缓冲器可以消除寄

生电流以此降低功耗。ADC10AEx可以选择控制禁用I/O缓冲器。

参考电压产生

ADC10内部自带参考电压模块,提供两种可选的参考电压。REFON=1,使能内部参考源;REF2_5=1,

内部参考电压为2.5V;REF2_5=0,内部参考电压为1.5V。当REFOUT=0时,内部参考电压只留给芯片

内部使用,当REFOUT=1时,可以将内部参考电压通过V

REF+

引脚输出。

外部参考电压通过V

R+

和V

R-

两个引脚输入。当采用外部参考电压或者V

CC

作为参考电压时,内部参考

电压关闭,以降低功耗。

ADC10的内部参考电压发生模块具有低功耗功能。内部参考电压模块由两部分组成,分别是:带隙

基准电压源和独立缓冲器。当REFON=1时,两部分同时开启;当REFON=0时,两部分同时关闭。

采样和转换时间

AD采样可以由一个上升沿信号SHI触发,SHI信号可以为如下几种:

置位ADC10SC;

Timer_A的输出单元0、1、2;

SHI信号的极性可以由ISSH位选择。SHT可以将采样周期t

sample

设置为4、8、16或64个ADC10CLK

时钟周期。SAPMCON为可以将采样周期设置与ADC10CLK同步。一个完整的采样周期包括t

sample

和t

sync

SAMPCON有高向低变化,将启动模拟-数字转换过程,一次转换需要13个连续的ADC10CLK时钟周期

长度。

当SAMPCON=0时,所有的模拟输入引脚Ax都为高阻状态;当SAMPON=1时,Ax输入端在t

sample

时间内可以看成RC网络构成的低通滤波器。(我们把采样时间设置为最大来用)

转换模式

CONSEQx用来选择转换模式。

Single-Channel Single-Conversion Mode

使用INCHx位来选择一路模拟输入通道进行采样转换。AD转换的结果写入ADC10MEM寄存器。

Sequence-of-Channels Mode

使用INCHx位来选择一个序列的模拟输入通道进行采样转换,直至降序转换至A0通道结束。每一个

转换结果都被写入ADC10MEM寄存器。A0通道转换完成后,整个序列转换结束。

若MSC=0,需要每次触发采样转换;若MSC=1,自动序列转换。

Repeat-Single-Channel Mode

Repeat-Sequence-of-Channels Mode

ADC10的头文件定义

/************************************************************

* ADC10

************************************************************/

#define __MSP430_HAS_ADC10__ /* Definition to show that Module is

available */

SFR_8BIT(ADC10DTC0); /* ADC10 Data Transfer Control 0 */

SFR_8BIT(ADC10DTC1); /* ADC10 Data Transfer Control 1 */

SFR_8BIT(ADC10AE0); /* ADC10 Analog Enable 0 */

SFR_16BIT(ADC10CTL0);

SFR_16BIT(ADC10CTL1);

SFR_16BIT(ADC10MEM);

SFR_16BIT(ADC10SA);

/* ADC10CTL0 */

#define ADC10SC (0x001)

#define ENC (0x002)

#define ADC10IFG (0x004)

#define ADC10IE (0x008)

#define ADC10ON (0x010)

#define REFON (0x020)

#define REF2_5V (0x040)

#define MSC (0x080)

#define REFBURST (0x100)

#define REFOUT (0x200)

#define ADC10SR (0x400)

1:50ksps */

#define ADC10SHT0 (0x800)

#define ADC10SHT1 (0x1000)

#define SREF0 (0x2000)

#define SREF1 (0x4000)

#define SREF2 (0x8000)

#define ADC10SHT_0 (0*0x800u)

#define ADC10SHT_1 (1*0x800u)

#define ADC10SHT_2 (2*0x800u)

#define ADC10SHT_3 (3*0x800u)

#define SREF_0 (0*0x2000u)

#define SREF_1 (1*0x2000u)

#define SREF_2 (2*0x2000u)

#define SREF_3 (3*0x2000u)

#define SREF_4 (4*0x2000u)

#define SREF_5 (5*0x2000u)

#define SREF_6 (6*0x2000u)

*/

/* ADC10 Control 0 */

/* ADC10 Control 1 */

/* ADC10 Memory */

/* ADC10 Data Transfer Start Address */

/* ADC10 Start Conversion */

/* ADC10 Enable Conversion */

/* ADC10 Interrupt Flag */

/* ADC10 Interrupt Enalbe */

/* ADC10 On/Enable */

/* ADC10 Reference on */

/* ADC10 Ref 0:1.5V / 1:2.5V */

/* ADC10 Multiple SampleConversion */

/* ADC10 Reference Burst Mode */

/* ADC10 Enalbe output of Ref. */

/* ADC10 Sampling Rate 0:200ksps /

/* ADC10 Sample Hold Select Bit: 0 */

/* ADC10 Sample Hold Select Bit: 1 */

/* ADC10 Reference Select Bit: 0 */

/* ADC10 Reference Select Bit: 1 */

/* ADC10 Reference Select Bit: 2 */

/* 4 x ADC10CLKs */

/* 8 x ADC10CLKs */

/* 16 x ADC10CLKs */

/* 64 x ADC10CLKs */

/* VR+ = AVCC and VR- = AVSS */

/* VR+ = VREF+ and VR- = AVSS */

/* VR+ = VEREF+ and VR- = AVSS */

/* VR+ = VEREF+ and VR- = AVSS */

/* VR+ = AVCC and VR- = VREF-/VEREF- */

/* VR+ = VREF+ and VR- = VREF-/VEREF- */

/* VR+ = VEREF+ and VR- = VREF-/VEREF-

#define SREF_7 (7*0x2000u) /* VR+ = VEREF+ and VR- = VREF-/VEREF-

*/

/* ADC10CTL1 */

#define ADC10BUSY (0x0001) /* ADC10 BUSY */

#define CONSEQ0 (0x0002) /* ADC10 Conversion Sequence Select 0 */

#define CONSEQ1 (0x0004) /* ADC10 Conversion Sequence Select 1 */

#define ADC10SSEL0 (0x0008) /* ADC10 Clock Source Select Bit: 0 */

#define ADC10SSEL1 (0x0010) /* ADC10 Clock Source Select Bit: 1 */

#define ADC10DIV0 (0x0020) /* ADC10 Clock Divider Select Bit: 0 */

#define ADC10DIV1 (0x0040)

#define ADC10DIV2 (0x0080)

#define ISSH (0x0100)

#define ADC10DF (0x0200)

complement */

#define SHS0 (0x0400)

#define SHS1 (0x0800)

#define INCH0 (0x1000)

#define INCH1 (0x2000)

#define INCH2 (0x4000)

#define INCH3 (0x8000)

#define CONSEQ_0 (0*2u)

#define CONSEQ_1 (1*2u)

#define CONSEQ_2 (2*2u)

#define CONSEQ_3 (3*2u)

#define ADC10SSEL_0 (0*8u)

#define ADC10SSEL_1 (1*8u)

#define ADC10SSEL_2 (2*8u)

#define ADC10SSEL_3 (3*8u)

#define ADC10DIV_0 (0*0x20u)

#define ADC10DIV_1 (1*0x20u)

#define ADC10DIV_2 (2*0x20u)

#define ADC10DIV_3 (3*0x20u)

#define ADC10DIV_4 (4*0x20u)

#define ADC10DIV_5 (5*0x20u)

#define ADC10DIV_6 (6*0x20u)

#define ADC10DIV_7 (7*0x20u)

#define SHS_0 (0*0x400u)

#define SHS_1 (1*0x400u)

#define SHS_2 (2*0x400u)

#define SHS_3 (3*0x400u)

/* ADC10 Clock Divider Select Bit: 1 */

/* ADC10 Clock Divider Select Bit: 2 */

/* ADC10 Invert Sample Hold Signal */

/* ADC10 Data Format 0:binary 1:2's

/* ADC10 Sample/Hold Source Bit: 0 */

/* ADC10 Sample/Hold Source Bit: 1 */

/* ADC10 Input Channel Select Bit: 0 */

/* ADC10 Input Channel Select Bit: 1 */

/* ADC10 Input Channel Select Bit: 2 */

/* ADC10 Input Channel Select Bit: 3 */

/* Single channel single conversion */

/* Sequence of channels */

/* Repeat single channel */

/* Repeat sequence of channels */

/* ADC10OSC */

/* ACLK */

/* MCLK */

/* SMCLK */

/* ADC10 Clock Divider Select 0 */

/* ADC10 Clock Divider Select 1 */

/* ADC10 Clock Divider Select 2 */

/* ADC10 Clock Divider Select 3 */

/* ADC10 Clock Divider Select 4 */

/* ADC10 Clock Divider Select 5 */

/* ADC10 Clock Divider Select 6 */

/* ADC10 Clock Divider Select 7 */

/* ADC10SC */

/* TA3 OUT1 */

/* TA3 OUT0 */

/* TA3 OUT2 */

#define INCH_0 (0*0x1000u) /* Selects Channel 0 */

#define INCH_1 (1*0x1000u) /* Selects Channel 1 */

#define INCH_2 (2*0x1000u) /* Selects Channel 2 */

#define INCH_3 (3*0x1000u) /* Selects Channel 3 */

#define INCH_4 (4*0x1000u) /* Selects Channel 4 */

#define INCH_5 (5*0x1000u) /* Selects Channel 5 */

#define INCH_6 (6*0x1000u) /* Selects Channel 6 */

#define INCH_7 (7*0x1000u) /* Selects Channel 7 */

#define INCH_8 (8*0x1000u) /* Selects Channel 8 */

#define INCH_9 (9*0x1000u) /* Selects Channel 9 */

#define INCH_10 (10*0x1000u) /* Selects Channel 10 */

#define INCH_11 (11*0x1000u) /* Selects Channel 11 */

#define INCH_12 (12*0x1000u) /* Selects Channel 12 */

#define INCH_13 (13*0x1000u) /* Selects Channel 13 */

#define INCH_14 (14*0x1000u) /* Selects Channel 14 */

#define INCH_15 (15*0x1000u) /* Selects Channel 15 */

/* ADC10DTC0 */

#define ADC10FETCH (0x001) /* This bit should normally be reset */

#define ADC10B1 (0x002) /* ADC10 block one */

#define ADC10CT (0x004) /* ADC10 continuous transfer */

#define ADC10TB (0x008) /* ADC10 two-block mode */

#define ADC10DISABLE (0x000) /* ADC10DTC1 */

ADC10的寄存器

ADC10CTL0-ADC10控制寄存器0

SREFx

参考源选择

ADC10SHTx

采样保持时间选择

00 4个ADC10CLK周期

00 8个ADC10CLK周期

00 16个ADC10CLK周期

00 64个ADC10CLK周期

ADC10SR

置1即可。

REFOUT

选择是否将内部参考电压输出

置0

REFBURST

是否一直开启内部参考源

0 一直开启

1 仅在采样和转换过程中开启

MSC

与连续转换还是启动停止有关

REF2_5

内部参考源电压水平

0 1.5V

1 2.5V

REFON

内部参考源使能

0 内部参考源关闭

1 内部参考源开启

ADC10ON

ADC10是否使能

0 关闭

1 使能

ADC10IE

ADC10中断使能

0 不使能中断

ADC10SHT_0

ADC10SHT_1

ADC10SHT_2

ADC10SHT_3

ADC10SR

REFOUT

REFBURST

MSC

REF2_5

REFON

ADC10ON

ADC10IE

1 使能中断

ADC10IFG ADC10IFG

ADC10的中断标志位

0

1

ENC

无中断产生

有中断产生

ENC

转换允许位

0

1

转换禁止

转换开启

ADC10SC ADC10SC

采样转换启动位

0

1

不启动

启动

ADC10CTL1-ADC10控制寄存器1

INCHx

转换通道选择

INCH_0~INCH_15

SHSx

ADC10触发信号选择

00 ADC10SCC

01 Timer_1

10 Timer_0

11 Timer_2

ADC10DF

转换结果数据格式

0 二进制

1 二进制补码

ISSH

采样保持启动信号是否翻转

0 不翻转

1 翻转

ADC10DIVx

ADC10CLK的分频控制

000 /1

001 /2

010 /3

011 /4

100 /5

101 /6

110 /7

111 /8

ADC10SSELx

ADC10时钟源选择

00 ADC10OSC

01 ACLK

10 MCLK

11 SMCLK

SHS_0

SHS_1

SHS_2

SHS_3

ADC10DF

ISSH

ADC10DIV_0

ADC10DIV_1

ADC10DIV_2

ADC10DIV_3

ADC10DIV_4

ADC10DIV_5

ADC10DIV_6

ADC10DIV_7

ADC10SSEL_0

ADC10SSEL_1

ADC10SSEL_2

ADC10SSEL_3

CONSEQx

转换模式选择

00

01

10

11

Single-channel-single-conversion

Sequence-of-channels

Repeat-single-channel

CONSEQ_0

CONSEQ_1

CONSEQ_2

CONSEQ_3 Repeat-sequence-of-channels

ADC10AE0-ADC10模拟通道使能寄存器0

ADC10MEM-ADC10转换结果寄存器

2024年5月24日发(作者:犁兴安)

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

01

10

11

RSELx

DCO频率选择控制2

/1

/2

/4

/8

BCSCTL2-基本时钟控制寄存器2

SELMx

MCLK的选择控制位

00

01

10

11

DIVMx

设置MCLK的分频数

00

01

10

11

SELS

SMCLK的选择控制位

0

1

DIVSx

设置SMCLK的分频数

00

01

10

11

DCOR

DCO直流发生电阻选择,此位一般设0

0

1

内部电阻

外部电阻

/1

/2

/4

/8

DCOCLK

LFXT1CLK或者VLOCLK

/1

/2

/4

/8

DCOCLK

DCOCLK

LFXT1CLK或者VLOCLK

LFXT1CLK或者VLOCLK

BCSCTL3-基本时钟控制寄存器3

XT2Sx

不用管

LFXT1Sx

00

01

10

11

XCAPx

LFXT1晶振谐振电容选择

00

01

10

11

1pF

6pF

10pF

12.5pF

LFXT1选为32.768KHz晶振

保留

VLOCLK

外部数字时钟源

msp430g2553.h中基本时钟系统的内容

/************************************************************

* Basic Clock Module

************************************************************/

#define __MSP430_HAS_BC2__ /* Definition to show that Module is

available */

SFR_8BIT(DCOCTL); /* DCO Clock Frequency Control */

SFR_8BIT(BCSCTL1); /* Basic Clock System Control 1 */

SFR_8BIT(BCSCTL2); /* Basic Clock System Control 2 */

SFR_8BIT(BCSCTL3); /* Basic Clock System Control 3 */

#define MOD0 (0x01) /* Modulation Bit 0 */

#define MOD1 (0x02) /* Modulation Bit 1 */

#define MOD2 (0x04) /* Modulation Bit 2 */

#define MOD3 (0x08) /* Modulation Bit 3 */

#define MOD4 (0x10) /* Modulation Bit 4 */

#define DCO0 (0x20) /* DCO Select Bit 0 */

#define DCO1 (0x40) /* DCO Select Bit 1 */

#define DCO2 (0x80) /* DCO Select Bit 2 */

#define RSEL0 (0x01) /* Range Select Bit 0 */

#define RSEL1 (0x02) /* Range Select Bit 1 */

#define RSEL2 (0x04) /* Range Select Bit 2 */

#define RSEL3 (0x08) /* Range Select Bit 3 */

#define DIVA0 (0x10) /* ACLK Divider 0 */

#define DIVA1 (0x20) /* ACLK Divider 1 */

#define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */

#define XT2OFF (0x80) /* Enable XT2CLK */

#define DIVA_0 (0x00) /* ACLK Divider 0: /1 */

#define DIVA_1 (0x10) /* ACLK Divider 1: /2 */

#define DIVA_2 (0x20) /* ACLK Divider 2: /4 */

#define DIVA_3 (0x30) /* ACLK Divider 3: /8 */

#define DIVS0 (0x02) /* SMCLK Divider 0 */

#define DIVS1 (0x04)

#define SELS (0x08)

1:XT2CLK/LFXTCLK */

#define DIVM0 (0x10)

#define DIVM1 (0x20)

#define SELM0 (0x40)

#define SELM1 (0x80)

#define DIVS_0 (0x00)

#define DIVS_1 (0x02)

#define DIVS_2 (0x04)

#define DIVS_3 (0x06)

#define DIVM_0 (0x00)

#define DIVM_1 (0x10)

#define DIVM_2 (0x20)

#define DIVM_3 (0x30)

#define SELM_0 (0x00)

#define SELM_1 (0x40)

#define SELM_2 (0x80)

*/

#define SELM_3 (0xC0)

#define LFXT1OF (0x01)

Flag */

#define XT2OF (0x02)

*/

#define XCAP0 (0x04)

#define XCAP1 (0x08)

#define LFXT1S0 (0x10)

#define LFXT1S1 (0x20)

#define XT2S0 (0x40)

#define XT2S1 (0x80)

#define XCAP_0 (0x00)

/* SMCLK Divider 1 */

/* SMCLK Source Select 0:DCOCLK /

/* MCLK Divider 0 */

/* MCLK Divider 1 */

/* MCLK Source Select 0 */

/* MCLK Source Select 1 */

/* SMCLK Divider 0: /1 */

/* SMCLK Divider 1: /2 */

/* SMCLK Divider 2: /4 */

/* SMCLK Divider 3: /8 */

/* MCLK Divider 0: /1 */

/* MCLK Divider 1: /2 */

/* MCLK Divider 2: /4 */

/* MCLK Divider 3: /8 */

/* MCLK Source Select 0: DCOCLK */

/* MCLK Source Select 1: DCOCLK */

/* MCLK Source Select 2: XT2CLK/LFXTCLK

/* MCLK Source Select 3: LFXTCLK */

/* Low/high Frequency Oscillator Fault

/* High frequency oscillator 2 fault flag

/* XIN/XOUT Cap 0 */

/* XIN/XOUT Cap 1 */

/* Mode 0 for LFXT1 (XTS = 0) */

/* Mode 1 for LFXT1 (XTS = 0) */

/* Mode 0 for XT2 */

/* Mode 1 for XT2 */

/* XIN/XOUT Cap : 0 pF */

#define XCAP_1 (0x04) /* XIN/XOUT Cap : 6 pF */

#define XCAP_2 (0x08) /* XIN/XOUT Cap : 10 pF */

#define XCAP_3 (0x0C) /* XIN/XOUT Cap : 12.5 pF */

#define LFXT1S_0 (0x00) /* Mode 0 for LFXT1 : Normal operation */

#define LFXT1S_1 (0x10) /* Mode 1 for LFXT1 : Reserved */

#define LFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */

#define LFXT1S_3 (0x30) /* Mode 3 for LFXT1 : Digital input signal

*/

#define XT2S_0 (0x00) /* Mode 0 for XT2 : 0.4 - 1 MHz */

#define XT2S_1 (0x40) /* Mode 1 for XT2 : 1 - 4 MHz */

#define XT2S_2 (0x80) /* Mode 2 for XT2 : 2 - 16 MHz */

#define XT2S_3 (0xC0) /* Mode 3 for XT2 : Digital input signal

*/

基本时钟系统例程(DCO)

MSP430G2553在上电之后默认CPU执行程序的时钟MCLK来自于DCO时钟。TI提供的Launch Pad

上,P1.0和P1.6分别接了红色和绿色的LED灯,下面写一个程序让它们交替闪烁;之后我们来改变DCO

的频率,进而使软延时时间变化,可以看到LED闪烁间隔有变化。

#include "msp430g2553.h"

void main(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"

void main(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头文件内容

/************************************************************

* DIGITAL I/O Port1/2 Pull up / Pull down Resistors

************************************************************/

#define __MSP430_HAS_PORT1_R__ /* Definition to show that Module is

available */

#define __MSP430_HAS_PORT2_R__ /* Definition to show that Module is

available */

SFR_8BIT(P1IN); /* Port 1 Input */

SFR_8BIT(P1OUT); /* Port 1 Output */

SFR_8BIT(P1DIR); /* Port 1 Direction */

SFR_8BIT(P1IFG); /* Port 1 Interrupt Flag */

SFR_8BIT(P1IES); /* Port 1 Interrupt Edge Select */

SFR_8BIT(P1IE); /* Port 1 Interrupt Enable */

SFR_8BIT(P1SEL); /* Port 1 Selection */

SFR_8BIT(P1SEL2); /* Port 1 Selection 2 */

SFR_8BIT(P1REN); /* Port 1 Resistor Enable */

SFR_8BIT(P2IN); /* Port 2 Input */

SFR_8BIT(P2OUT); /* Port 2 Output */

SFR_8BIT(P2DIR); /* Port 2 Direction */

SFR_8BIT(P2IFG); /* Port 2 Interrupt Flag */

SFR_8BIT(P2IES); /* Port 2 Interrupt Edge Select */

SFR_8BIT(P2IE); /* Port 2 Interrupt Enable */

SFR_8BIT(P2SEL); /* Port 2 Selection */

SFR_8BIT(P2SEL2); /* Port 2 Selection 2 */

SFR_8BIT(P2REN); /* Port 2 Resistor Enable */

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__ /* Definition to show that Module is

available */

SFR_16BIT(TA0IV); /* Timer0_A3 Interrupt Vector Word */

SFR_16BIT(TA0CTL); /* Timer0_A3 Control */

SFR_16BIT(TA0CCTL0); /* Timer0_A3 Capture/Compare Control 0 */

SFR_16BIT(TA0CCTL1); /* Timer0_A3 Capture/Compare Control 1 */

SFR_16BIT(TA0CCTL2); /* Timer0_A3 Capture/Compare Control 2 */

SFR_16BIT(TA0R); /* Timer0_A3 */

SFR_16BIT(TA0CCR0); /* Timer0_A3 Capture/Compare 0 */

SFR_16BIT(TA0CCR1); /* Timer0_A3 Capture/Compare 1 */

SFR_16BIT(TA0CCR2); /* Timer0_A3 Capture/Compare 2 */

/* Alternate register names */

#define TAIV TA0IV /* Timer A Interrupt Vector Word */

#define TACTL TA0CTL /* Timer A Control */

#define TACCTL0 TA0CCTL0 /* Timer A Capture/Compare Control 0 */

#define TACCTL1 TA0CCTL1 /* Timer A Capture/Compare Control 1 */

#define TACCTL2 TA0CCTL2

#define TAR TA0R

#define TACCR0 TA0CCR0

#define TACCR1 TA0CCR1

#define TACCR2 TA0CCR2

#define TAIV_ TA0IV_

#define TACTL_ TA0CTL_

#define TACCTL0_ TA0CCTL0_

#define TACCTL1_ TA0CCTL1_

#define TACCTL2_ TA0CCTL2_

#define TAR_ TA0R_

#define TACCR0_ TA0CCR0_

#define TACCR1_ TA0CCR1_

#define TACCR2_ TA0CCR2_

/* Alternate register names 2 */

#define CCTL0 TACCTL0

#define CCTL1 TACCTL1

#define CCTL2 TACCTL2

#define CCR0 TACCR0

#define CCR1 TACCR1

#define CCR2 TACCR2

#define CCTL0_ TACCTL0_

#define CCTL1_ TACCTL1_

#define CCTL2_ TACCTL2_

#define CCR0_ TACCR0_

#define CCR1_ TACCR1_

#define CCR2_ TACCR2_

#define TASSEL1 (0x0200)

#define TASSEL0 (0x0100)

#define ID1 (0x0080)

#define ID0 (0x0040)

#define MC1 (0x0020)

#define MC0 (0x0010)

#define TACLR (0x0004)

/* Timer A Capture/Compare Control 2 */

/* Timer A */

/* Timer A Capture/Compare 0 */

/* Timer A Capture/Compare 1 */

/* Timer A Capture/Compare 2 */

/* Timer A Interrupt Vector Word */

/* Timer A Control */

/* Timer A Capture/Compare Control 0 */

/* Timer A Capture/Compare Control 1 */

/* Timer A Capture/Compare Control 2 */

/* Timer A */

/* Timer A Capture/Compare 0 */

/* Timer A Capture/Compare 1 */

/* Timer A Capture/Compare 2 */

/* Timer A Capture/Compare Control 0 */

/* Timer A Capture/Compare Control 1 */

/* Timer A Capture/Compare Control 2 */

/* Timer A Capture/Compare 0 */

/* Timer A Capture/Compare 1 */

/* Timer A Capture/Compare 2 */

/* Timer A Capture/Compare Control 0 */

/* Timer A Capture/Compare Control 1 */

/* Timer A Capture/Compare Control 2 */

/* Timer A Capture/Compare 0 */

/* Timer A Capture/Compare 1 */

/* Timer A Capture/Compare 2 */

/* Timer A clock source select 1 */

/* Timer A clock source select 0 */

/* Timer A clock input divider 1 */

/* Timer A clock input divider 0 */

/* Timer A mode control 1 */

/* Timer A mode control 0 */

/* Timer A counter clear */

#define TAIE (0x0002) /* Timer A counter interrupt enable */

#define TAIFG (0x0001) /* Timer A counter interrupt flag */

#define MC_0 (0*0x10u) /* Timer A mode control: 0 - Stop */

#define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to CCR0

*/

#define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continous up

*/

#define MC_3 (3*0x10u) /* Timer A mode control: 3 - Up/Down */

#define ID_0 (0*0x40u) /* Timer A input divider: 0 - /1 */

#define ID_1 (1*0x40u)

#define ID_2 (2*0x40u)

#define ID_3 (3*0x40u)

#define TASSEL_0 (0*0x100u)

*/

#define TASSEL_1 (1*0x100u)

*/

#define TASSEL_2 (2*0x100u)

*/

#define TASSEL_3 (3*0x100u)

*/

#define CM1 (0x8000)

#define CM0 (0x4000)

#define CCIS1 (0x2000)

#define CCIS0 (0x1000)

#define SCS (0x0800)

#define SCCI (0x0400)

#define CAP (0x0100)

#define OUTMOD2 (0x0080)

#define OUTMOD1 (0x0040)

#define OUTMOD0 (0x0020)

#define CCIE (0x0010)

#define CCI (0x0008)

#define OUT (0x0004)

#define COV (0x0002)

#define CCIFG (0x0001)

#define OUTMOD_0 (0*0x20u)

#define OUTMOD_1 (1*0x20u)

#define OUTMOD_2 (2*0x20u)

*/

#define OUTMOD_3 (3*0x20u)

#define OUTMOD_4 (4*0x20u)

#define OUTMOD_5 (5*0x20u)

#define OUTMOD_6 (6*0x20u)

/* Timer A input divider: 1 - /2 */

/* Timer A input divider: 2 - /4 */

/* Timer A input divider: 3 - /8 */

/* Timer A clock source select: 0 - TACLK

/* Timer A clock source select: 1 - ACLK

/* Timer A clock source select: 2 - SMCLK

/* Timer A clock source select: 3 - INCLK

/* Capture mode 1 */

/* Capture mode 0 */

/* Capture input select 1 */

/* Capture input select 0 */

/* Capture sychronize */

/* Latched capture signal (read) */

/* Capture mode: 1 /Compare mode : 0 */

/* Output mode 2 */

/* Output mode 1 */

/* Output mode 0 */

/* Capture/compare interrupt enable */

/* Capture input signal (read) */

/* PWM Output signal if output mode 0 */

/* Capture/compare overflow flag */

/* Capture/compare interrupt flag */

/* PWM output mode: 0 - output only */

/* PWM output mode: 1 - set */

/* PWM output mode: 2 - PWM toggle/reset

/* PWM output mode: 3 - PWM set/reset */

/* PWM output mode: 4 - toggle */

/* PWM output mode: 5 - Reset */

/* PWM output mode: 6 - PWM toggle/set

*/

#define OUTMOD_7 (7*0x20u) /* PWM output mode: 7 - PWM reset/set */

#define CCIS_0 (0*0x1000u) /* Capture input select: 0 - CCIxA */

#define CCIS_1 (1*0x1000u) /* Capture input select: 1 - CCIxB */

#define CCIS_2 (2*0x1000u) /* Capture input select: 2 - GND */

#define CCIS_3 (3*0x1000u) /* Capture input select: 3 - Vcc */

#define CM_0 (0*0x4000u) /* Capture mode: 0 - disabled */

#define CM_1 (1*0x4000u) /* Capture mode: 1 - pos. edge */

#define CM_2 (2*0x4000u) /* Capture mode: 1 - neg. edge */

#define CM_3 (3*0x4000u) /* Capture mode: 1 - both edges */

/* T0_A3IV Definitions */

#define TA0IV_NONE (0x0000) /* No Interrupt pending */

#define TA0IV_TACCR1 (0x0002) /* TA0CCR1_CCIFG */

#define TA0IV_TACCR2 (0x0004) /* TA0CCR2_CCIFG */

#define TA0IV_6 (0x0006) /* Reserved */

#define TA0IV_8 (0x0008) /* Reserved */

#define TA0IV_TAIFG (0x000A) /* TA0IFG */

/************************************************************

* Timer1_A3

************************************************************/

#define __MSP430_HAS_T1A3__ /* Definition to show that Module is

available */

SFR_16BIT(TA1IV); /* Timer1_A3 Interrupt Vector Word */

SFR_16BIT(TA1CTL); /* Timer1_A3 Control */

SFR_16BIT(TA1CCTL0); /* Timer1_A3 Capture/Compare Control 0 */

SFR_16BIT(TA1CCTL1); /* Timer1_A3 Capture/Compare Control 1 */

SFR_16BIT(TA1CCTL2); /* Timer1_A3 Capture/Compare Control 2 */

SFR_16BIT(TA1R); /* Timer1_A3 */

SFR_16BIT(TA1CCR0); /* Timer1_A3 Capture/Compare 0 */

SFR_16BIT(TA1CCR1); /* Timer1_A3 Capture/Compare 1 */

SFR_16BIT(TA1CCR2); /* Timer1_A3 Capture/Compare 2 */

/* Bits are already defined within the Timer0_Ax */

/* T1_A3IV Definitions */

#define TA1IV_NONE (0x0000) /* No Interrupt pending */

#define TA1IV_TACCR1 (0x0002) /* TA1CCR1_CCIFG */

#define TA1IV_TACCR2 (0x0004) /* TA1CCR2_CCIFG */

#define TA1IV_TAIFG (0x000A) /* TA1IFG */

Timer0_A寄存器

TA0CTL-Timer0_A控制寄存器

TASSELx

主计数器时钟源选择

01 ACLK

IDx

时钟输入的分频控制

00 /1

01 /2

10 /4

11 /8

MCx

计数模式选择

00 停止模式

01 Up

10 Continuous

11 Up/Down

TACLR

清零控制

TAIE

TAIFG中断使能控制

0 禁止

1 使能

TAIFG

TAIFG中断标志

TASSEL_1

ID_0

ID_1

ID_2

ID_3

MC_0

MC_1

MC_2

MC_3

TACLR

TAIE

TAIFG

TA0R-主计数器计数寄存器

TA0CCRx-捕获/比较寄存器

TA0CCTLx-捕获/比较控制寄存器

CMx

捕获模式控制

00

01

10

11

CCISx

不进行捕获操作

捕获上升沿

捕获下降沿

MC_0

MC_1

MC_2

MC_3

上升沿和下降沿同时捕获

捕获引脚选择

00

01

10

11

SCS

CCIxA

CCIxB

GND

VCC

CCIS_0

CCIS_1

CCIS_2

CCIS_3

SCS

同步/异步捕获选择控制

0

1

异步捕获

同步捕获(建议)

CAP CAP

捕获/比较模式选择

0

1

比较模式

捕获模式

OUMODx

比较输出模式选择

000

001

010

电平输出模式:TAx引脚的输出由OUT控制位的值决定

OUTMOD_0

OUTMOD_1 置位模式:当主计数器计数至TACCRx值时,TAx引脚置1

取反/清零模式:当主计数器计数至TACCRx值时,TAx引脚取反,当主计数器计数至TACCR0

OUTMOD_2 值时,TAx引脚置0

011 置位清零模式:当主计数器计数至TACCRx值时,TAx引脚置1,当主计数器计数至TACCR0

OUTMOD_3

OUTMOD_4

OUTMOD_5

值时,TAx引脚置0

100

101

110

取反模式:当主计数器计数至TACCRx值时,TAx引脚取反

清零模式:当主计数器计数至TACCRx值时,TAx引脚置0

取反置位模式:当主计数器计数至TACCRx值时,TAx引脚取反,当主计数器计数至TACCR0

OUTMOD_6 值时,TAx引脚置1

111 清零置位模式:当主计数器计数至TACCRx值时,TAx引脚置0,当主计数器计数至TACCR0

OUTMOD_7 值时,TAx引脚置1

COV COV

捕获溢出标志位

CCIFG CCIFG

捕获/比较中断标志位

TA0IV-中断向量寄存器

MSP430G2553的ADC10

ADC10简介

ADC10是一个10位AD转换器,转换速度快。它包含一个10位的转换内核SAR、采样选择控制、

参考电压输出、数字量传输控制DTC等模块。DTC可以将数字量转换结果存储到任何一个内存单元内,

这不需要CPU来干预。

MSP430G2553的ADC10具有如下特点:

200ksps最大转换速率;

可编程设置采样/保持时间;

可以通过软件或者Timer_A触发转换;

可选内部参考电压,1.5V或者2.5V;

8路模拟输入通道;

内部转换通道自带温度传感器;

可选的转换时钟源;

单通道、重复单通道、序列采样、重复序列采样模式;

10位转换核心

转换核心将输入的模拟信号转换成10位数字量,将转换结果存储在ADC10MEM寄存器中。V

R+

V

R-

定义了模拟输入电压的上限和下限。当模拟输入电压大于V

R+

时,转换结果为03FFh,当模拟输入电压

小于V

R-

时,转换结果为0。转换结果按下式计算:

转换核心由两个控制寄存器来进行设置:ADC10CTL0、ADC10CTL1。转换核心通过ADC10ON来使

能工作。只有当ENC=0时,ADC10CTL0、ADC10CTL1的位才允许被改写;若要转换开始,必须将ENC=1。

转换时钟

ADC10模块的时钟称为ADC10CLK,转换时间和采样周期与之相关。ADC10的时钟源可以通过

ADC10SSELx来进行选择,并通过ADC10DIVx选择分频。ADC10的时钟源有:ACLK、SMCLK、MCLK

和ADC10OSC。

输入多路选择器

8路外部模拟输入和4路内部模拟输入可被选中为转换输入。

ADC10的外部输入包括:Ax、V

eREF+

、V

REF-

,这些端口与I/O口复用。2553的I/O口为数字CMOS

门电路,当模拟信号加在数字CMOS门时,VCC与GND之间会有寄生电流,禁用I/O缓冲器可以消除寄

生电流以此降低功耗。ADC10AEx可以选择控制禁用I/O缓冲器。

参考电压产生

ADC10内部自带参考电压模块,提供两种可选的参考电压。REFON=1,使能内部参考源;REF2_5=1,

内部参考电压为2.5V;REF2_5=0,内部参考电压为1.5V。当REFOUT=0时,内部参考电压只留给芯片

内部使用,当REFOUT=1时,可以将内部参考电压通过V

REF+

引脚输出。

外部参考电压通过V

R+

和V

R-

两个引脚输入。当采用外部参考电压或者V

CC

作为参考电压时,内部参考

电压关闭,以降低功耗。

ADC10的内部参考电压发生模块具有低功耗功能。内部参考电压模块由两部分组成,分别是:带隙

基准电压源和独立缓冲器。当REFON=1时,两部分同时开启;当REFON=0时,两部分同时关闭。

采样和转换时间

AD采样可以由一个上升沿信号SHI触发,SHI信号可以为如下几种:

置位ADC10SC;

Timer_A的输出单元0、1、2;

SHI信号的极性可以由ISSH位选择。SHT可以将采样周期t

sample

设置为4、8、16或64个ADC10CLK

时钟周期。SAPMCON为可以将采样周期设置与ADC10CLK同步。一个完整的采样周期包括t

sample

和t

sync

SAMPCON有高向低变化,将启动模拟-数字转换过程,一次转换需要13个连续的ADC10CLK时钟周期

长度。

当SAMPCON=0时,所有的模拟输入引脚Ax都为高阻状态;当SAMPON=1时,Ax输入端在t

sample

时间内可以看成RC网络构成的低通滤波器。(我们把采样时间设置为最大来用)

转换模式

CONSEQx用来选择转换模式。

Single-Channel Single-Conversion Mode

使用INCHx位来选择一路模拟输入通道进行采样转换。AD转换的结果写入ADC10MEM寄存器。

Sequence-of-Channels Mode

使用INCHx位来选择一个序列的模拟输入通道进行采样转换,直至降序转换至A0通道结束。每一个

转换结果都被写入ADC10MEM寄存器。A0通道转换完成后,整个序列转换结束。

若MSC=0,需要每次触发采样转换;若MSC=1,自动序列转换。

Repeat-Single-Channel Mode

Repeat-Sequence-of-Channels Mode

ADC10的头文件定义

/************************************************************

* ADC10

************************************************************/

#define __MSP430_HAS_ADC10__ /* Definition to show that Module is

available */

SFR_8BIT(ADC10DTC0); /* ADC10 Data Transfer Control 0 */

SFR_8BIT(ADC10DTC1); /* ADC10 Data Transfer Control 1 */

SFR_8BIT(ADC10AE0); /* ADC10 Analog Enable 0 */

SFR_16BIT(ADC10CTL0);

SFR_16BIT(ADC10CTL1);

SFR_16BIT(ADC10MEM);

SFR_16BIT(ADC10SA);

/* ADC10CTL0 */

#define ADC10SC (0x001)

#define ENC (0x002)

#define ADC10IFG (0x004)

#define ADC10IE (0x008)

#define ADC10ON (0x010)

#define REFON (0x020)

#define REF2_5V (0x040)

#define MSC (0x080)

#define REFBURST (0x100)

#define REFOUT (0x200)

#define ADC10SR (0x400)

1:50ksps */

#define ADC10SHT0 (0x800)

#define ADC10SHT1 (0x1000)

#define SREF0 (0x2000)

#define SREF1 (0x4000)

#define SREF2 (0x8000)

#define ADC10SHT_0 (0*0x800u)

#define ADC10SHT_1 (1*0x800u)

#define ADC10SHT_2 (2*0x800u)

#define ADC10SHT_3 (3*0x800u)

#define SREF_0 (0*0x2000u)

#define SREF_1 (1*0x2000u)

#define SREF_2 (2*0x2000u)

#define SREF_3 (3*0x2000u)

#define SREF_4 (4*0x2000u)

#define SREF_5 (5*0x2000u)

#define SREF_6 (6*0x2000u)

*/

/* ADC10 Control 0 */

/* ADC10 Control 1 */

/* ADC10 Memory */

/* ADC10 Data Transfer Start Address */

/* ADC10 Start Conversion */

/* ADC10 Enable Conversion */

/* ADC10 Interrupt Flag */

/* ADC10 Interrupt Enalbe */

/* ADC10 On/Enable */

/* ADC10 Reference on */

/* ADC10 Ref 0:1.5V / 1:2.5V */

/* ADC10 Multiple SampleConversion */

/* ADC10 Reference Burst Mode */

/* ADC10 Enalbe output of Ref. */

/* ADC10 Sampling Rate 0:200ksps /

/* ADC10 Sample Hold Select Bit: 0 */

/* ADC10 Sample Hold Select Bit: 1 */

/* ADC10 Reference Select Bit: 0 */

/* ADC10 Reference Select Bit: 1 */

/* ADC10 Reference Select Bit: 2 */

/* 4 x ADC10CLKs */

/* 8 x ADC10CLKs */

/* 16 x ADC10CLKs */

/* 64 x ADC10CLKs */

/* VR+ = AVCC and VR- = AVSS */

/* VR+ = VREF+ and VR- = AVSS */

/* VR+ = VEREF+ and VR- = AVSS */

/* VR+ = VEREF+ and VR- = AVSS */

/* VR+ = AVCC and VR- = VREF-/VEREF- */

/* VR+ = VREF+ and VR- = VREF-/VEREF- */

/* VR+ = VEREF+ and VR- = VREF-/VEREF-

#define SREF_7 (7*0x2000u) /* VR+ = VEREF+ and VR- = VREF-/VEREF-

*/

/* ADC10CTL1 */

#define ADC10BUSY (0x0001) /* ADC10 BUSY */

#define CONSEQ0 (0x0002) /* ADC10 Conversion Sequence Select 0 */

#define CONSEQ1 (0x0004) /* ADC10 Conversion Sequence Select 1 */

#define ADC10SSEL0 (0x0008) /* ADC10 Clock Source Select Bit: 0 */

#define ADC10SSEL1 (0x0010) /* ADC10 Clock Source Select Bit: 1 */

#define ADC10DIV0 (0x0020) /* ADC10 Clock Divider Select Bit: 0 */

#define ADC10DIV1 (0x0040)

#define ADC10DIV2 (0x0080)

#define ISSH (0x0100)

#define ADC10DF (0x0200)

complement */

#define SHS0 (0x0400)

#define SHS1 (0x0800)

#define INCH0 (0x1000)

#define INCH1 (0x2000)

#define INCH2 (0x4000)

#define INCH3 (0x8000)

#define CONSEQ_0 (0*2u)

#define CONSEQ_1 (1*2u)

#define CONSEQ_2 (2*2u)

#define CONSEQ_3 (3*2u)

#define ADC10SSEL_0 (0*8u)

#define ADC10SSEL_1 (1*8u)

#define ADC10SSEL_2 (2*8u)

#define ADC10SSEL_3 (3*8u)

#define ADC10DIV_0 (0*0x20u)

#define ADC10DIV_1 (1*0x20u)

#define ADC10DIV_2 (2*0x20u)

#define ADC10DIV_3 (3*0x20u)

#define ADC10DIV_4 (4*0x20u)

#define ADC10DIV_5 (5*0x20u)

#define ADC10DIV_6 (6*0x20u)

#define ADC10DIV_7 (7*0x20u)

#define SHS_0 (0*0x400u)

#define SHS_1 (1*0x400u)

#define SHS_2 (2*0x400u)

#define SHS_3 (3*0x400u)

/* ADC10 Clock Divider Select Bit: 1 */

/* ADC10 Clock Divider Select Bit: 2 */

/* ADC10 Invert Sample Hold Signal */

/* ADC10 Data Format 0:binary 1:2's

/* ADC10 Sample/Hold Source Bit: 0 */

/* ADC10 Sample/Hold Source Bit: 1 */

/* ADC10 Input Channel Select Bit: 0 */

/* ADC10 Input Channel Select Bit: 1 */

/* ADC10 Input Channel Select Bit: 2 */

/* ADC10 Input Channel Select Bit: 3 */

/* Single channel single conversion */

/* Sequence of channels */

/* Repeat single channel */

/* Repeat sequence of channels */

/* ADC10OSC */

/* ACLK */

/* MCLK */

/* SMCLK */

/* ADC10 Clock Divider Select 0 */

/* ADC10 Clock Divider Select 1 */

/* ADC10 Clock Divider Select 2 */

/* ADC10 Clock Divider Select 3 */

/* ADC10 Clock Divider Select 4 */

/* ADC10 Clock Divider Select 5 */

/* ADC10 Clock Divider Select 6 */

/* ADC10 Clock Divider Select 7 */

/* ADC10SC */

/* TA3 OUT1 */

/* TA3 OUT0 */

/* TA3 OUT2 */

#define INCH_0 (0*0x1000u) /* Selects Channel 0 */

#define INCH_1 (1*0x1000u) /* Selects Channel 1 */

#define INCH_2 (2*0x1000u) /* Selects Channel 2 */

#define INCH_3 (3*0x1000u) /* Selects Channel 3 */

#define INCH_4 (4*0x1000u) /* Selects Channel 4 */

#define INCH_5 (5*0x1000u) /* Selects Channel 5 */

#define INCH_6 (6*0x1000u) /* Selects Channel 6 */

#define INCH_7 (7*0x1000u) /* Selects Channel 7 */

#define INCH_8 (8*0x1000u) /* Selects Channel 8 */

#define INCH_9 (9*0x1000u) /* Selects Channel 9 */

#define INCH_10 (10*0x1000u) /* Selects Channel 10 */

#define INCH_11 (11*0x1000u) /* Selects Channel 11 */

#define INCH_12 (12*0x1000u) /* Selects Channel 12 */

#define INCH_13 (13*0x1000u) /* Selects Channel 13 */

#define INCH_14 (14*0x1000u) /* Selects Channel 14 */

#define INCH_15 (15*0x1000u) /* Selects Channel 15 */

/* ADC10DTC0 */

#define ADC10FETCH (0x001) /* This bit should normally be reset */

#define ADC10B1 (0x002) /* ADC10 block one */

#define ADC10CT (0x004) /* ADC10 continuous transfer */

#define ADC10TB (0x008) /* ADC10 two-block mode */

#define ADC10DISABLE (0x000) /* ADC10DTC1 */

ADC10的寄存器

ADC10CTL0-ADC10控制寄存器0

SREFx

参考源选择

ADC10SHTx

采样保持时间选择

00 4个ADC10CLK周期

00 8个ADC10CLK周期

00 16个ADC10CLK周期

00 64个ADC10CLK周期

ADC10SR

置1即可。

REFOUT

选择是否将内部参考电压输出

置0

REFBURST

是否一直开启内部参考源

0 一直开启

1 仅在采样和转换过程中开启

MSC

与连续转换还是启动停止有关

REF2_5

内部参考源电压水平

0 1.5V

1 2.5V

REFON

内部参考源使能

0 内部参考源关闭

1 内部参考源开启

ADC10ON

ADC10是否使能

0 关闭

1 使能

ADC10IE

ADC10中断使能

0 不使能中断

ADC10SHT_0

ADC10SHT_1

ADC10SHT_2

ADC10SHT_3

ADC10SR

REFOUT

REFBURST

MSC

REF2_5

REFON

ADC10ON

ADC10IE

1 使能中断

ADC10IFG ADC10IFG

ADC10的中断标志位

0

1

ENC

无中断产生

有中断产生

ENC

转换允许位

0

1

转换禁止

转换开启

ADC10SC ADC10SC

采样转换启动位

0

1

不启动

启动

ADC10CTL1-ADC10控制寄存器1

INCHx

转换通道选择

INCH_0~INCH_15

SHSx

ADC10触发信号选择

00 ADC10SCC

01 Timer_1

10 Timer_0

11 Timer_2

ADC10DF

转换结果数据格式

0 二进制

1 二进制补码

ISSH

采样保持启动信号是否翻转

0 不翻转

1 翻转

ADC10DIVx

ADC10CLK的分频控制

000 /1

001 /2

010 /3

011 /4

100 /5

101 /6

110 /7

111 /8

ADC10SSELx

ADC10时钟源选择

00 ADC10OSC

01 ACLK

10 MCLK

11 SMCLK

SHS_0

SHS_1

SHS_2

SHS_3

ADC10DF

ISSH

ADC10DIV_0

ADC10DIV_1

ADC10DIV_2

ADC10DIV_3

ADC10DIV_4

ADC10DIV_5

ADC10DIV_6

ADC10DIV_7

ADC10SSEL_0

ADC10SSEL_1

ADC10SSEL_2

ADC10SSEL_3

CONSEQx

转换模式选择

00

01

10

11

Single-channel-single-conversion

Sequence-of-channels

Repeat-single-channel

CONSEQ_0

CONSEQ_1

CONSEQ_2

CONSEQ_3 Repeat-sequence-of-channels

ADC10AE0-ADC10模拟通道使能寄存器0

ADC10MEM-ADC10转换结果寄存器

发布评论

评论列表 (0)

  1. 暂无评论