微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430学习之时钟

MSP430学习之时钟

时间:11-13 来源:互联网 点击:

EL3 (0x08) /* Range Select Bit 3 */

#definedivA0 (0x10) /* ACLK Divider 0 */

#definedivA1 (0x20) /* ACLK Divider 1 */

#defineXTS (0x40)

/* LFXTCLK 0:Low Freq. / 1: High Freq. */

#defineXT2OFF (0x80) /* Enable XT2CLK */

#definedivA_0 (0x00) /* ACLK Divider 0: /1 */

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

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

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

#definedivS0 (0x02) /* SMCLK Divider 0 */

#definedivS1 (0x04) /* SMCLK Divider 1 */

#defineSELS (0x08)

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

#definedivM0 (0x10) /* MCLK Divider 0 */

#definedivM1 (0x20) /* MCLK Divider 1 */

#defineSELM0 (0x40) /* MCLK Source Select 0 */

#defineSELM1 (0x80) /* MCLK Source Select 1 */

#definedivS_0 (0x00) /* SMCLK Divider 0: /1 */

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

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

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

#definedivM_0 (0x00) /* MCLK Divider 0: /1 */

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

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

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

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

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

#defineSELM_2 (0x80)

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

#defineSELM_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

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

#defineSFR_8BIT(address)extern volatile unsigned charaddress

#defineSFR_16BIT(address)extern volatile unsigned intaddress

七、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


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top