MSP430G2553学习笔记
更新时间:2024-04-03 14:31:01 阅读量: 综合文库 文档下载
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) #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)
/* SMCLK Divider 0 */ /* 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 */
#define XCAP_0 (0x00) /* 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 \ 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 \ 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寄存器中。VR+和VR-定义了模拟输入电压的上限和下限。当模拟输入电压大于VR+时,转换结果为03FFh,当模拟输入电压小于VR-时,转换结果为0。转换结果按下式计算:
转换核心由两个控制寄存器来进行设置:ADC10CTL0、ADC10CTL1。转换核心通过ADC10ON来使
能工作。只有当ENC=0时,ADC10CTL0、ADC10CTL1的位才允许被改写;若要转换开始,必须将ENC=1。
转换时钟
ADC10模块的时钟称为ADC10CLK,转换时间和采样周期与之相关。ADC10的时钟源可以通过ADC10SSELx来进行选择,并通过ADC10DIVx选择分频。ADC10的时钟源有:ACLK、SMCLK、MCLK和ADC10OSC。
输入多路选择器
8路外部模拟输入和4路内部模拟输入可被选中为转换输入。
ADC10的外部输入包括:Ax、VeREF+、VREF-,这些端口与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时,可以将内部参考电压通过VREF+引脚输出。
外部参考电压通过VR+和VR-两个引脚输入。当采用外部参考电压或者VCC作为参考电压时,内部参考电压关闭,以降低功耗。
ADC10的内部参考电压发生模块具有低功耗功能。内部参考电压模块由两部分组成,分别是:带隙基准电压源和独立缓冲器。当REFON=1时,两部分同时开启;当REFON=0时,两部分同时关闭。
采样和转换时间
AD采样可以由一个上升沿信号SHI触发,SHI信号可以为如下几种: 置位ADC10SC;
Timer_A的输出单元0、1、2;
SHI信号的极性可以由ISSH位选择。SHT可以将采样周期tsample设置为4、8、16或64个ADC10CLK时钟周期。SAPMCON为可以将采样周期设置与ADC10CLK同步。一个完整的采样周期包括tsample和tsync。SAMPCON有高向低变化,将启动模拟-数字转换过程,一次转换需要13个连续的ADC10CLK时钟周期长度。
当SAMPCON=0时,所有的模拟输入引脚Ax都为高阻状态;当SAMPON=1时,Ax输入端在tsample
时间内可以看成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);
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)
/* ADC10 Analog Enable 0 */ /* 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- */
#define SREF_6 (6*0x2000u) /* 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) #define ADC10DIV0 (0x0020) #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)
/* ADC10 Clock Source Select Bit: 1 */ /* ADC10 Clock Divider Select Bit: 0 */ /* 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 */
#define SHS_3 (3*0x400u) /* 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
参考源选择
正在阅读:
MSP430G2553学习笔记04-03
第2章电阻电路的等效变换习题及答案04-06
孕妇牙龈发炎怎么办02-27
铁路工程施工组织设计及概算试卷04-24
锅炉抢险预案12-27
生活中的语文作文600字06-21
《BP世界能源统计年鉴》201404-07
《a o e》教学设计,新人教版部编本一年级上册语文教案04-27
快乐暑假之冏事作文700字07-10
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- MSP430G2553
- 笔记
- 学习
- midas - civil简支梁模型计算
- 第15章 工具变量与两阶段最小二乘
- 精通急救试题
- 物流管理系统期末复习
- 四川第十八次社会科学优秀成果评奖
- 2018届高考化学复习 专题十四 有机化学基础(选考) 含答案 - 图
- 《农村小学数学学习两极分化的成因与对策研究》课题实施方案
- 武汉理工大学2010年度新增硕士生导师名单
- ubi详解
- 四年级2008-2009学年下期综合实践活动教学计划
- 2011全国优秀律师事务所申请报告书 - 图文
- 2016年春 运动会秩序册(终稿) - 图文
- 原位杂交实验问题收集
- 公共关系综合练习
- 3GPP - LTE - MAC层协议36321-870(Release8) - 图文
- 小学一年级语文教研组工作总结
- 医学装备管理制度与岗位职责的监管与考核机制 - 图文
- 任意角和弧度制及任意角的三角函数知识点与题型归纳DOC
- 元朝文化的发展
- 德州市2018小升初数学模拟试题-附详细解析