MSP430学习之时钟

发布者:TranquilMind88最新更新时间:2016-08-15 来源: eefocus关键字:MSP430  时钟 手机看文章 扫描二维码
随时随地手机看文章
时钟初始化和GPIO

概述:

本实验的目的是了解用于执行对MSP430 Value Line设备的初始化过程的步骤。在这个练习中,您将编写初始化代码,并运行该设备使用各种时钟资源。

1、写初始化代码

2、运行CPU的MCLK的来源方式:VLO 、32768晶体、DCO

3、主体程序部分

4、观察LED闪光灯速度

 

MSP430时钟:

1、在MSP430单片机中一共有三个或四个时钟源:

(1)LFXT1CLK,为低速/高速晶振源,通常接32.768kHz,也可以接(400kHz~16Mhz);

(2)XT2CLK,可选高频振荡器,外接标准高速晶振,通常是接8Mhz,也可以接(400kHz~16Mhz);     

(3)DCOCLK,数控振荡器,为内部晶振,由RC震荡回路构成;

(4)VLOCLK,内部低频振荡器,12kHz标准振荡器。

2、在MSP430单片机内部一共有三个时钟系统:

(1)ACLK,Auxiliary Clock,辅助时钟,通常由LFXT1CLK或VLOCLK作为时钟源,可以通过软件控制更改时钟的分频系数;    

(2)MCLK,Master Clock,系统主时钟单元,为系统内核提供时钟,它可以通过软件从四个时钟源选择;

(3)SMCLK,Sub-Main Clock,系统子时钟,也是可以由软件选择时钟源。

Basic Clock Module Registers(基础时钟寄存器)

DCO control register                         DCOCTL

Basic clock system control 1                   BCSCTL1

Basic clock system control 2                   BCSCTL2

Basic clock system control 3                   BCSCTL3

SFR interrupt enable register 1                 IE1

SFR interrupt flag register 1                   IFG1

3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3

 

DCOCTL,DCO控制寄存器,地址为56H,初始值为60H

 

DCO2

DCO1

DCO0

MOD4

MOD3

MOD2

MOD1

MOD0

 

DCO0~DCO2: DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义。

MOD0~MOD4: Modulation Bit,频率的微调。

一般不需要DCO的场合保持默认初始值就行了。

BCSCTL1,Basic Clock System Control 1,地址为57H,初始值为84H

 

XT2OFF

XTS

DIVA1

DIVA0

XT5V

RSEL2

RSEL1

RSEL0

 

RSEL0~RSEL2: 选择某个内部电阻以决定标称频率.0最低,7最高。

XT5V: 1.

DIVA0~DIVA1:选择ACLK的分频系数。DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8;

XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。

XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。

正常情况下把XT2OFF复位就可以了.

BCSCTL2,Basic Clock System Control 2,地址为58H,初始值为00H

 

SEM1

SELM0

DIVM1

DIVM0

SELS

DIVS1

DIVS0

DCOR

 

DCOR: Enable External Resistor. 0,选择内部电阻;1,选择外部电阻

DIVS0~DIVS1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8

SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.

DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8.

SELM0~1: 选择MCLK的时钟源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK

我用的时候一般都把SMCLK与MCLK的时钟源选择为XT2。

其它:

1. LFXT1: 一次有效的PUC信号将使OSCOFF复位,允许LFXT1工作,如果LFXT1信号没有用作SMCLK或MCLK,可软件置OSCOFF关闭LFXT1.

2. XT2: XT2产生XT2CLK时钟信号,如果XT2CLK信号没有用作时钟MCLK和SMCLK,可以通过置XT2OFF关闭XT2,PUC信号后置XT2OFF,即XT2的关闭的。

3. DCO振荡器:振荡器失效时,DCO振荡器会自动被选做MCLK的时钟源。如果DCO信号没有用作SMCLK和MCLK时钟信号时,可置SCG0位关闭DCO直流发生器。

4. 在PUC信号后,由DCOCLK作MCLK的时钟信号,根据需要可将MCLK的时钟源另外设置为LFXT1或XT2,设置顺序如下:

(1)清OSCOFF/XT2

(2)清OFIFG

(3)延时等待至少50uS

(4)再次检查OFIFG,如果仍置位,则重复(1)-(4)步,直到OFIFG=0为止。

(5)设置BCSCTL2的相应SELM。

 

实例分析

1、CPU运行在VLO时钟下:

这是最慢的时钟,在约12千赫兹下运行。因此,我们将通过可视化的LED闪烁的红色慢慢地在约每3秒钟率。我们可以让时钟系统默认这种状态,设置专门来操作VLO。我们将不使用任何ALCK外设时钟在此实验室工作,但你应该认识到,ACLK来自VLO时钟。

#include

void main(void)

{

WDTCTL = WDTPW + WDTHOLD;           // 关闭看门狗定时器

P1DIR = 0x40;                          // P1.6 配置输出

P1OUT = 0;                            // 关闭LED

BCSCTL3 |= LFXT1S_2;                   // LFXT1 = VLO

IFG1 &= ~OFIFG;                       // 清除OSCFault 标志

__bis_SR_register(SCG1 + SCG0);          // 关闭 DCO

BCSCTL2 |= SELM_3 + DIVM_3;           // MCLK = VLO/8

while(1)

{

P1OUT = 0x40;                       // 开启LED

_delay_cycles(100);

P1OUT = 0;                          // 关闭 LED

_delay_cycles(5000);

}

}

2、CPU运行在晶振(32768Hz)时钟下:

晶体频率为32768赫兹,约3倍的VLO。如果我们在前面的代码中使用晶振,指示灯应闪烁大约每秒一次。你知道为什么32768赫兹是一个标准?这是因为这个数字是2的15次方,因此很容易用简单的数字计数电路,以每秒一次获得率 ——手表和其他时间时基。认识到ACLK来自外部晶振时钟。

#include

void main(void)

{

WDTCTL = WDTPW + WDTHOLD;        // 关闭看门狗定时器

P1DIR = 0x41;                       // P1.0 和P1.6配置输出

P1OUT = 0x01;                      // 开启P1.0

BCSCTL3 |= LFXT1S_0;                // LFXT1 = 32768Hz 晶振

while(IFG1 & OFIFG)

{

IFG1 &= ~OFIFG;                   // 清除 OSCFault 标志

_delay_cycles(100000);             // 为可见的标志延时

}

P1OUT = 0;                      // 关闭P1

__bis_SR_register(SCG1 + SCG0);     // 关闭 DCO

BCSCTL2 |= SELM_3 + DIVM_3;      // MCLK = 32768/8

while(1)

{

P1OUT = 0x40;                   // 开启 LED

_delay_cycles(100);

P1OUT = 0;                     / / 关闭LED

_delay_cycles(5000);

}

}

3、CPU运行在晶振(32768Hz)和DCO时钟下:

最慢的频率,我们可以运行DCO约在1MHz(这也是默认速度)。因此,我们将开始切换MCLK到DCO下。在大多数系统中,你会希望ACLK上运行的VLO或32768赫兹晶振。由于ACLK在我们目前的代码是在晶体上运行,我们会打开DCO计算。

#include

void main(void)

{

WDTCTL = WDTPW + WDTHOLD;            // 关闭看门狗定时器

if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

{

while(1);                               // If cal const erased, 挂起

}

BCSCTL1 = CALBC1_1MHZ;                // Set range

DCOCTL = CALDCO_1MHZ;                //设置DCO模式

P1DIR = 0x41;                          // P1.0 和P1.6配置输出

P1OUT = 0x01;                         // P1.0 开启

BCSCTL3 |= LFXT1S_0;                   // LFXT1 = 32768Hz

while(IFG1 & OFIFG)

{

IFG1 &= ~OFIFG;                       // 清除OSCFault 标志

_delay_cycles(100000);                 // 为可见标志延时

}

P1OUT = 0;                           // P1.6 关闭

// __bis_SR_register(SCG1 + SCG0);       // 关闭DCO

BCSCTL2 |= SELM_0 + DIVM_3;          // MCLK = DCO

while(1)

{

P1OUT = 0x40;                       // P1.6 开启

_delay_cycles(100);

P1OUT = 0;                         / / P1.6 关闭

_delay_cycles(5000);

}

}

4、CPU运行在DCO时钟下:

最慢的频率,我们可以运行DCO约在1MHz(这也是默认速度)。因此,我们将开始切换MCLK到DCO下。在大多数系统中,你会希望在VLO或者是晶振下运行ACLK。由于ACLK在我们目前的代码是在VLO上运行,我们会打开DCO运行。

#include

void main(void)

{

WDTCTL = WDTPW + WDTHOLD;                // 关闭看门狗定时器

if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

{

while(1);                                   // If cal const erased,挂起

}

BCSCTL1 = CALBC1_1MHZ;                     // Set range

DCOCTL = CALDCO_1MHZ;                     // 设置DCO模式

P1DIR = 0x40;                               // P1.6 配置输出

P1OUT = 0;                                 // P1关闭

BCSCTL3 |= LFXT1S_2;                        // LFXT1 = VLO

IFG1 &= ~OFIFG;                             // 清除 OSCFault 标志

//__bis_SR_register(SCG1 + SCG0);              // 关闭DCO

BCSCTL2 |= SELM_0 + DIVM_3;                 // MCLK = DCO/8

while(1)

{

P1OUT = 0x40;                          // P1.6 关闭

_delay_cycles(100);

P1OUT = 0;                            // P1.6 开启

_delay_cycles(5000);

}

}

以下将会分析上面4个例子的代码细微差别:

首先让我们看一下msp430x20x2.h这个文件中的内容,由于头文件信息量很大这里就只简单说明和以上四个代码有关的部分,其余请大家自行阅读。

 

一、WDTCTL = WDTPW + WDTHOLD;                // 关闭看门狗定时器(例1、2、3、4)

头文件中的相关说明如下:

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

* WATCHDOG TIMER

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

#define __MSP430_HAS_WDT__      /* Definition to show that Module is available */

SFR_16BIT(WDTCTL);                /* Watchdog Timer Control */

/* The bit names have been prefixed with "WDT" */

#define WDTIS0                 (0x0001)

#define WDTIS1                 (0x0002)

#define WDTSSEL                (0x0004)

#define WDTCNTCL              (0x0008)

#define WDTTMSEL               (0x0010)

#define WDTNMI                 (0x0020)

#define WDTNMIES               (0x0040)

#define WDTHOLD                (0x0080)

#define WDTPW                  (0x5A00)

这个指令设置密码(WDTPW)和停止位定时器(WDTHOLD),所有的WatchDog配置都需要在WDTPW的辅助下完成。

举例如下:

A、间隔时间由Bit0-2位编码:

1、看门狗的时钟由FSMCLK(假设为1MHz)

#define WDT_MDLY_32         (WDTPW+WDTTMSEL+WDTCNTCL)                         /* 32ms interval (default) */

#define WDT_MDLY_8          (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0)                  /* 8ms     " */

#define WDT_MDLY_0_5        (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1)                  /* 0.5ms   " */

#define WDT_MDLY_0_064      (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0)           /* 0.064ms " */

 

2、看门狗的时钟由FACLK(假设为32KHz)

#define WDT_ADLY_1000       (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL)                 /* 1000ms  " */

#define WDT_ADLY_250        (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0)          /* 250ms   " */

#define WDT_ADLY_16         (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1)          /* 16ms    " */

 

B、看门狗模式——在过期时间后重启:

1、看门狗的时钟由FSMCLK(假设为1MHz)

#define WDT_MRST_32         (WDTPW+WDTCNTCL)                                  /* 32ms interval (default) */

#define WDT_MRST_8          (WDTPW+WDTCNTCL+WDTIS0)                           /* 8ms     " */

#define WDT_MRST_0_5        (WDTPW+WDTCNTCL+WDTIS1)                           /* 0.5ms   " */

#define WDT_MRST_0_064      (WDTPW+WDTCNTCL+WDTIS1+WDTIS0)                    /* 0.064ms " */

 

2、看门狗的时钟由FACLK(假设为32KHz)

#define WDT_ARST_1000       (WDTPW+WDTCNTCL+WDTSSEL)                          /* 1000ms  " */

#define WDT_ARST_250        (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0)                   /* 250ms   " */

#define WDT_ARST_16         (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1)                   /* 16ms    " */

#define WDT_ARST_1_9        (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)            /* 1.9ms   " */

 

二、P1DIR = 0x40;                               // P1.6 配置输出

    P1OUT = 0;                                 // P1关闭      (例1、2、3、4)

其中DIR 和P1OUT分别配置IO口的方向和输出值,这里不在赘述,请参考手册。

 

三、BCSCTL3 |= LFXT1S_2;                   // LFXT1 = VLO       (例1和例4)

    BCSCTL3 |= LFXT1S_0;                   // LFXT1 = 32768Hz    (例2和例3)

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

* 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 LFXT1OF                (0x01)        

/* Low/high Frequency Oscillator Fault Flag */

#define XT2OF                  (0x02)        

/* High frequency oscillator 2 fault flag */

#define XCAP0                  (0x04)       /* XIN/XOUT Cap 0 */

#define XCAP1                  (0x08)       /* XIN/XOUT Cap 1 */

#define LFXT1S0                (0x10)       /* Mode 0 for LFXT1 (XTS = 0) */

#define LFXT1S1                (0x20)       /* Mode 1 for LFXT1 (XTS = 0) */

#define XT2S0                  (0x40)       /* Mode 0 for XT2 */

#define XT2S1                  (0x80)       /* 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 */

 

四、__bis_SR_register(SCG1 + SCG0);          // 关闭 DCO

 

__bis_SR_register()是在intrinsics.h这个头文件中定义了,实现的功能是将SR中的位置零。

关于头文件中的代码作用

#ifdef __cplusplus

extern "C"

{

#endif

#ifdef __cplusplus

}

#endif /* extern "C" */

一般用于将C++代码以标准C形式输出(即以C的形式被调用),这是因为C++虽然常被认为是C的超集,但是C++的编译器还是与C的编译器不同的。C中调用C++中的代码这样定义会是安全的。

 

五、BCSCTL2 |= SELM_3 + DIVM_3;           // MCLK = VLO/8

    BCSCTL2 |= SELM_3 + DIVM_3;           // MCLK = 32768/8

    BCSCTL2 |= SELM_0 + DIVM_3;          // MCLK = DCO

    BCSCTL2 |= SELM_0 + DIVM_3;          // MCLK = DCO/8

MSP430中有如下定义:

#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)         /* SMCLK Divider 1 */

#define SELS                   (0x08)       

 /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */

#define DIVM0                  (0x10)         /* MCLK Divider 0 */

#define DIVM1                  (0x20)         /* MCLK Divider 1 */

#define SELM0                  (0x40)         /* MCLK Source Select 0 */

#define SELM1                  (0x80)         /* MCLK Source Select 1 */

 

#define DIVS_0                 (0x00)         /* SMCLK Divider 0: /1 */

#define DIVS_1                 (0x02)         /* SMCLK Divider 1: /2 */

#define DIVS_2                 (0x04)         /* SMCLK Divider 2: /4 */

#define DIVS_3                 (0x06)         /* SMCLK Divider 3: /8 */

 

#define DIVM_0                 (0x00)         /* MCLK Divider 0: /1 */

#define DIVM_1                 (0x10)         /* MCLK Divider 1: /2 */

#define DIVM_2                 (0x20)         /* MCLK Divider 2: /4 */

#define DIVM_3                 (0x30)         /* MCLK Divider 3: /8 */

 

#define SELM_0                 (0x00)    /* MCLK Source Select 0: DCOCLK */

#define SELM_1                 (0x40)    /* MCLK Source Select 1: DCOCLK */

#define SELM_2                 (0x80)   

/* MCLK Source Select 2: XT2CLK/LFXTCLK */

#define SELM_3                 (0xC0)        

/* MCLK Source Select 3: LFXTCLK */

 

六、BCSCTL1 = CALBC1_1MHZ;                //设置值     (例3、4)

#ifndef __DisableCalData

SFR_8BIT(CALDCO_16MHZ);          /* DCOCTL  Calibration Data for 16MHz */

SFR_8BIT(CALBC1_16MHZ);          /* BCSCTL1 Calibration Data for 16MHz */

SFR_8BIT(CALDCO_12MHZ);          /* DCOCTL  Calibration Data for 12MHz */

SFR_8BIT(CALBC1_12MHZ);          /* BCSCTL1 Calibration Data for 12MHz */

SFR_8BIT(CALDCO_8MHZ);           /* DCOCTL  Calibration Data for 8MHz */

SFR_8BIT(CALBC1_8MHZ);           /* BCSCTL1 Calibration Data for 8MHz */

SFR_8BIT(CALDCO_1MHZ);           /* DCOCTL  Calibration Data for 1MHz */

SFR_8BIT(CALBC1_1MHZ);           /* BCSCTL1 Calibration Data for 1MHz */

#endif                              /* #ifndef __DisableCalData */

 

关于SFR_8BIT的相关说明:

External references resolved by a device-specific linker command file

(外部引用解决的特定于设备的连接器命令文件)

#define SFR_8BIT(address)   extern volatile unsigned char address

#define SFR_16BIT(address)  extern volatile unsigned int address

 

七、if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

    {

     while(1);                            // If cal const erased,挂起

}                                     (例3、例4)

请注意这里的陷阱。它可以清除内存段信息。

 

八、IFG1 &= ~OFIFG;                       // 清除OSCFault 标志   (例1、例4)

时钟系统将强制使用的MCLK作为其源的DCO在一个时钟故障的存在。因此,我们必须清除故障标志。

FG1中断标志寄存器是1。寄存器中的位域是唯一的振荡器故障中断标志 - OFIFG。

 

九、while(IFG1 & OFIFG)

{

IFG1 &= ~OFIFG;                       // 清除OSCFault 标志

_delay_cycles(100000);                 // 为可见标志延时

}                                    (例2、例3)

在上面的代码我们把OSCFault标志继续做我们的任务,由于时钟系统将默认为VLO。现在,我们希望确保该标志保持清零,这意味着晶体是启动并运行着的。

如果该故障标志是明确的,我们就退出循环。我们需要等待清算后的标志,直到我们再次测试50微秒。该_delay_cycles(100000)。我们需要它是那么长的时间,所以我们可以看到在代码开头的LED灯。否则,它会这么快,我们的光将无法看到它。

配置:

 

 

BCSCTL1

BCSCTL2

BCSCTL3

DCOCTL

IFG1

VLO(12KHz)

 

SELM_3 + DIVM_3

LFXT1S_2

 

 

32768KHz

 

SELM_3 + DIVM_3

LFXT1S_0

 

While

晶振、DCO

 

SELM_0+ DIVM_3

LFXT1S_0

 

While

DCO

CALBC1_1MHZ

SELM_0+ DIVM_3

LFXT1S_2

CALDCO_1MHZ

 

 

结果:

 

 

ACLK

MCLK

LFXT1

VLO(12KHz)

VLO

VLO/8

VLO

32768Hz

32768Hz

32768Hz/8

32768Hz

晶振、DCO

32768Hz

DCO

32768Hz

DCO

VLO

DCO/8

VLO


关键字:MSP430  时钟 引用地址:MSP430学习之时钟

上一篇:MSP430系列单片机串口通信波特率计算方法
下一篇:MC3361+MCU低速通信系统电路

推荐阅读最新更新时间:2024-03-16 15:05

全面直击MSP430微控制器全家族成员
德州仪器(TI)MSP430系列微控制器,凭借着它的超低功耗在电子行业中占据着举足轻重的行业地位,同时提供最低的功耗和集成外设已成了MSP430绑定的行业标签,将适用范围广的低功耗和便携式应用完美结合…… 同时TI提供的MSP微控制器强大的设计支持,包括技术文档,培训,如果你需要现在开始就可以运用硬件和软件工具…… 下面我们”沙场点兵”MSP430系列中全家族成员,把握机遇、参透技术、运用自如…… NO.1:MSP430F1系列产品 MSP430F1系列为超低功耗MCU系列16位微控制器(MCU),用于广泛的应用,包括消费电子,数据记录应用,便携式医疗仪器… 经典产品:MSP430F112--16 位超低功耗微控制器,具
[单片机]
MSP430的中断面面观
MSP430的中断优先级、打开关闭、中断嵌套 优先级顺序从高到低为: PORT2_VECTOR (1 * 2u) PORT1_VECTOR (4 * 2u) TIMERA1_VECTOR (5 * 2u) TIMERA0_VECTOR (6 * 2u) ADC_VECTOR (7 * 2u) USART0TX_VECTOR (8 * 2u) USART0RX_VECTOR (9 * 2u) WDT_VECTOR (10 * 2u) COMPARATORA_VECTOR (11 * 2u) TIMERB1_VECTOR (12 * 2u) TIMERB0_VECTOR (13 * 2u) NMI_VECTOR
[单片机]
可编程时钟发生器及其应用
摘要: 美国CYPRESS公司的可编程时钟发生器芯片ICD2053B的结构和工作原理及其在数据采集系统中的应用。ICD2053B提供用户可编程的锁相环特性,输出可改变型任何所期望的频率值上(391kHz~100MHz)。在数据采集系统中,利用ICD2053B所具有的动态改变输出频率的能力,可实现系统的变频率采样,提高了系统的适用范围和兼容性,给设计者提供了灵活的设计自由度。 关键词: 在数据采集系统中,所设计的系统应具有通用性,可根据不同的数据采集对象,产生不同的采样频率;或者系统处于不同的运动情况时,能够动态改变采样频率,即数据采集系统应当具有改变采样频率的能力。传统的数据采集系统,一般都是固定频率的数据采集,很难
[模拟电子]
ATmega48 外部时钟
ATmega48可用外部时钟源驱动,如Figure 15所示的进行连接。 此时CKSEL熔丝位必须按照Table15编程。 选择了这个振荡源之后,启动时间由熔丝位 SUT确定,如 Table16 所示。 为了保证MCU 能够稳定工作,不能突然改变外部时钟源的振荡频率。工作频率突变超过2% 将会产生异常现象。应该在MCU 保持复位状态时改变外部时钟的振荡频率。 要注意的是,系统时钟预分频可以实现在运行期间改变内部时钟频率而保持系统稳定运 行。请参见 P31”系统时钟预分频器 ”。
[单片机]
ATmega48 外部<font color='red'>时钟</font>
12b双通道高速A/D转换器AD9238的原理及应用
   AD9238是美国模拟器件公司(ADI)在2002年8月推出的业界最快的12 b双通道模数转换器。AD9238与ADI公司的驱动运算放大器配合可以给医疗成像、多通道通信等高端应用提供完整的解决方案。   AD9238分3种型号,采样率最高分别可达20 MS/s,40 MS/s和65 MS/s。他可以提供与单通道A/D转换器同样优异的动态性能,但是比使用2个单通道A/D转换器具有更好的抗串扰性能。   AD9238三种型号的功耗分别为180 mW,330 mW和600 mW,只有同类A/D转换器的1/2。他采用64脚LQFP封装(尺寸只有9 mm×9 mm),非常适合在对尺寸要求严格的场合中使用。    1  AD923
[模拟电子]
浅谈一下MSP430单片机编程及其优点
MSP430是自己接触的第一种单片机,个人觉得MSP430单片机无论在软件上还是硬件上都很不错。它的编程环境IAR Embedded Workbench,这个编程环境软件很不错,在软件布局上很人性化,用起来很顺手,在调试方面也很方便,支持软件仿真等。 个人觉得,430编程在头文件上做得很好,而且各种型号的芯片的头文件兼容性也不错,在调用头文件里面参数的书写规范上做得很好。所以430在编程上手还不错。430在硬件上功能很强大,个人觉得在以后430的发展空间会更大。低功耗,小巧,功能强大,性价比高。
[单片机]
OK6410A 开发板 (三) 20 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 system clock
system clock 的设置 主要参与的寄存器 归属 3 SYSTEM CONTROLLER 范围 0x7E00_F000 0x7E00_FFFF S3C6410的时钟 |---APLL---------ARMCLK --- 用于 CPU | 外部晶振(XTIPLL)+内部的OSC(振荡器) | 0 | |----HCLK --- 用于 AXI/AHB 总线外设 |---OM --- 主时钟 ---- |---MPLL----| 外部时钟(EXTCLK) | 1 | |----PCLK --- 用于 APB 总线外设
[单片机]
OK6410A 开发板 (三) 20 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 system <font color='red'>clock</font>
详解80C51单片机的复位电路和时钟电路
复位电路 在80C51中,最常见的复位电路就是下图的上电复位电路。 它能有效地实现上电复位和手动复位。RST引脚高电平有效。 其有效时间应持续24个振荡周期以上才能完成复位操作。若使用6MHz晶振,则需持续4us以上才能完成复位操作。 在通电瞬间,由于RC电路的充电过程,在RST端出现一定宽度的正脉冲,只要正脉冲保持10mS以上,就能使单片机自动复位。 CPU在第二个及其周期内执行内部复位操作,以后每个机器周期重复一次,直至RST端电平变低。 在单片机复位器件,ALE和~PSEN信号都不产生。复位操作将对部分专用寄存器产生影响,复位后,这些内部寄存器的状态发生变化,如下表。 时钟电路 在80C51单片机内有一个高增益的反
[单片机]
详解80C51单片机的复位电路和<font color='red'>时钟</font>电路
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved