⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 时基模块.c

📁 430各模块例程包
💻 C
字号:
【MSP430入门例程】:时基模块
作者:DC 微控技术论坛原创   MSP430单片机入门基础例程 
若想了解MSP430单片机常用模块应用原理,请下载<<MSP430F常用模块应用原理>> 
http://www.microcontrol.cn/datasheet/msp430/msp430base/MSP430register_guide.pdf 

  MSP430系列单片机基础时钟主要是由低频晶体振荡器,高频晶体振荡器,数字控制振荡器(DCO),锁频环(FLL)及FLL+等模块构成.由于430系列单片机中的型号不同,而时钟模块也将有所不同.虽然不同型号的单片机的时基模块有所不同,但这些模块产生出来的结果是相同的.在MSP430F13,14中是有TX2振荡器的,而MSP430F11X,F11X1中是用LFXT1CLK来代替XT2CLK时钟信号的.在时钟模块中有3个(对于F13,F14)时钟信号源(或2个时钟信号源,对于F11X,F11X1): 
1-LFXT1CLK: 低频/高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较常使用的晶体振荡器是32768HZ. 
2-XT2CLK: 高频时钟源.由外接晶体振荡器.需要外接两个振荡电容器.较常用的晶体振荡器是8MHZ. 
3-DCOCLK:数字可控制的RC振荡器. 

MSP430单片机时钟模块提供3个时钟信号输出,以供给片内各部电路使用. 
1-ACLK: 辅助时钟信号.由图所示,ACLK是从FLXT1CLK信号由1/2/4/8分频器分频后所得到的.由BCSCTL1寄存器设置DIVA相应为来决定分频因子.ACLK可用于提供CPU外围功能模块作时钟信号使用. 
2-MCLK: 主时钟信号.由图所示,MCLK是由3个时钟源所提供的.他们分别是LFXT1CLK,XT2CLK(F13,F14,如果是F11,F11X1则由LFXT1CLK代替),DCO时钟源信号提供.MCLK主要用于MCU和相关系统模块作时钟使用.同样可设置相关寄存器来决定分频因子及相关的设置. 
3-SMCLK: 子系统时钟,由图所示,SMCLK是由2个时钟源信号所提供.他们分别是XT2CLK(F13,F14)和DCO.如果是F11,F11X1则由LFXT1CLK代替TX2CLK.同样可设置相关寄存器来决定分频因子及相关的设置. 
 
                  MSP430模块参考图 

复制代码

//MSP430F14时钟模块操作 
/*************************************************************************/ 
//以下是结合MC430F14开发板来实验的时基应用例程,程序运行后可用示波器观察各时钟源输出. 
//F14系列的时钟源为三个: 
//LFXT1(XT1): 低速,频率精确,功耗低 
//XT2:高速,频率精确.通讯应用于高速的处理.但带来的相对功耗较大. 
//DCO:高速,频率不稳定.频率与芯片的温度,电压等因素有关.且容易漂移.但功耗低. 
//应用目标板:www.Microcontrol.cn MC430F14开发板 
/*************************************************************************/ 
#include <msp430x14x.h> 
void main(void) 
{
	 unsigned char i; 
	 WDTCTL = WDTPW + WDTHOLD;    //先关闭看门狗,对单片机初始化. 
	 //时基模块的时钟设置 
	 //单片机上电时,MCLK主时钟的源默认选择为DCO提供.F1系列DCO默认800KHZ. 
	 //ACLK辅助时钟默认为XT1,XT1一般接32768HZ晶体. 
	 //SMCLK子时钟默认为DCO,同样是800KHZ. 
	 //XT2需要人为开启,并要检测其开启是否成功. 
	 BCSCTL1 &= ~(XT2OFF + XTS);   //启动XT2高速时钟模块 
	 BCSCTL2 |= SELM1;            //MCLK主时钟选XT2为时钟源.TX2输入不分频. 
	 BCSCTL2 &= ~SELS;            //SMCLK选为DCO为时钟源.(参考) 
  
	 //刚才开启了XT2,需要一定时间XT2才进入稳定状态.所以需要等待并检测稳定状态. 
	 //通常采用do...for语法,这是TI推荐的程序写法 
	 do 
	 { 
	  IFG1 &=~OFIFG;              //清OSCFault 标志 
	  for(i=0xff;i>0;i--)         //延时等待其开启稳定 
		  ; 
	 } 
	 while((IFG1 & OFIFG) !=0);   //检查OSCFault标志位是否为0,若为0则表示XT2开启稳定. 
								  //否则一直等下去... 
  
	 //----------------------------------------------- 
	 //以下我们来检测各个时钟信号的输出. 
	 //在MSP430单片机中,大部的IO是有复用功能.而基础模块的时钟就可以通过IO设置使其输出. 
	 P1DIR |= BIT4;               //P1.4 IO口设置为输出. 
	 P1SEL |= BIT4;               //P1.4 IO口设置为SMCLK. 
  
	 P2DIR |= BIT0;               //P2.0 IO口设置为输出. 
	 P2SEL |= BIT0;               //P1.4 IO口设置为ACLK. 
  
	 P5DIR |= BIT4;               //P5.4 IO口设置为输出. 
	 P5SEL |= BIT4;               //P5.4 IO口设置为ACLK. 
  
	 //----------------------------------------------- 
	 //同样,内部其它模块也选择不同的时钟.可以在相关模块的控制寄存器中设置.例如: 
	 //定时器A 选用SMCLK子系统时钟=DCO=~800KHZ,当然也可以选择其它时钟源. 
	 TACTL = TASSEL1 + TACLR ;    //注意转换其它时钟源的同时要清定时器内容. 
	 //....... 
  
	 //USART选用ACLK=XT1-32khz 
	 UTCTL1 = SSEL0;              //串口模块的时钟源选择为ACLK=32768HZ, 
                              
	 //当前程序的MCLK主时钟为TX2=8MHZ 
	 while(1); 
} 
/*************************************************************************/  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -