msp430g2231基础定时器设置
#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的头文件(名为:msp430x20x2.h),如果文章中有错误的话希望大家发邮件给我。纯属菜鸟入门级别文档,只是简单的分析了一下MSP430的时钟配置问题,对于一个单片机系统而言时钟可谓是重中之重,可能刚入门多是采用51系列的片子(不包括C8051f系列)所以对时钟也就没有过多的接触,只是涉及速度以及延时程序的时
msp430g2231定时器设 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)