MSP430学习之时钟
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 |
MSP430时 相关文章:
- MSP430时钟设置及应用总结(11-25)
- MSP430的时钟周期 机器周期 指令周期(11-13)
- Msp430时钟设计与寄存器说明(11-13)
- MSP430 Value Line MCU学习笔记 - 基础时钟模块(11-13)
- MSP430的时钟系统(11-13)
- MSP430时钟分析(11-13)