Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2012848
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: C/C++

2010-03-10 10:52:48

MSP430单片机的时钟信号小结
时钟源有LFXT1(低频或高频),XT2(高频),DCO(数控)。
时钟信号有ACLK(辅助时钟),SMCLK(子系统时钟),MCLK(系统时钟)。

ACLK由LFXT1驱动;
SMCLK可由XT2,DCO之一驱动;
MCLK可由LFXT1,XT2,DCO之一驱动;
MSP430F449复位后,MCLK和SMCLK的驱动源为DCO,SMCLK=MCLK=32*ACLK=32*32768=1048576Hz。

fDCOCLK = D x (N + 1) x fACLK。
N的设置为SCFQCTL = N(N取值1~127);
D的设置为SCFI0 = D(D取值FLLD_1,FLLD_2,FLLD_4,FLLD_8,即D=1,2,4,8),默认值D取2;
还要设置FLL_CTL0 |= DCOPLUS,D才会生效。

在寄存器FLL_CTL1里设置SMCLK,MCLK的时钟驱动源。

 

程序清单
MSP430的另外一个特点是用C语言编写程序简单,而且效率较高。本例就采用C语言编写了程序。清单如下:
#i nclude
#i nclude
int SampleTimes=0;
//***定义正弦表,并用32个抽样值初始化正弦表,不要用"0"抽样***//
int SinTable[]={255,254,246,234,219,199,177,153,128,103,79,57,37,22,10,2,
                   1,2,10,22,37,57,79,103,128,153,177,199,219,234,246,255};
void main(void)
{
int i;
WDTCTL = WDTPW +WDTHOLD;           // 禁止看门狗定时器

//***初始化端口***//
P2DIR |= 0x0C;           // P2.2和P2.3为输出
P2SEL |= 0x0C;           // P2.2和P2.3分别为TB1和TB2

//***设置系统时钟***//
FLL_CTL0 = XCAP18PF;           // 设置XTAL1的负载电容
SCFQCTL = 50-1;           // 1.6384MHz/32768Hz = 50,fDCO=MCLK=1.6384MHz
for (i = 50000; i; i--);           // 晶振初始化延时

//***设置Timer_B***//
TBCTL = TBSSEL1 + TBCLR;           // 选择SMCLK为时钟,定时器清除
TBCTL|=MC_1+CNTL_0+TBCLGRP_0;           //选择up,16位模式
TBCCTL0=CCIE;           //将CCR0设为比较模式,中断允许
TBCCR0=256-1;           //PWM的周期为256,也就是DAC为8bit
TBCCTL1=OUTMOD_7+CLLD_1;           //将CCRx设为比较模式,中断禁止
TBCCTL2=OUTMOD_7+CLLD_1;           //选择输出模式7,当TBR计数到0时CCRx数据加载到TBCTLx
TBCCR1=SinTable[SampleTimes];           //将正弦表加载到CCR1
TBCCR2=128;           //PWM的占空比为50%,产生0.5VCC的直流电平
_EINT();           //中断允许
for (;;)
{ _BIS_SR(LPM0_bits);           //CUP进入低功耗模式
_NOP();
}
}

//调用中断函数
interrupt [TIMERB0_VECTOR] void Timer_B(void)
{
SampleTimes=(SampleTimes+1)%32;
TBCCR1=SinTable[SampleTimes];           //将新的抽样值装入CCR1
}

阅读(3763) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~