微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430F5418学习笔记----UCS时钟模块配置

MSP430F5418学习笔记----UCS时钟模块配置

时间:11-28 来源:互联网 点击:
引言:一年前开始用TI公司的x14x系列超低功耗单片机MSP430F149,感觉与普通的51系列相比,各个外设的功能强大了一些,使用起来没有很大的区别,但有一个重要的区别就是外部晶振需要正确配置才能使用。现在在用TI的x54x系列的MSP430F5418芯片,发现它的各个外设的集成度更高了(比如所有的外部时钟和内部时钟由一个Unified Clock System(UCS)模块统一管理,内部Uart,IIC,SPI之类的串行接口由Universal Serial Communication Interfaces(USCI)模块统一管理),使用起来更灵活了,由此带来的影响就是配置起来也就更麻烦了。(呵呵,要想拥有更强大的功能,还不得花更多的精力去研究它的使用方法?)

刚刚才把F5418的UCS模块调通,特此庆祝一番~~

动手之前,首先要阅读TI提供的430x54x Family User Guide(slau208d)和MIXED SIGNAL MICROCONTROLLER,了解一下这种全新的芯片的时钟模块的框图,有个整体把握:


下面是我翻译的MIXED SIGNAL MICROCONTROLLER第18页对UCS的介绍(觉得翻译不好可别拍砖哦):

@振荡器和系统时钟 (MIXED SIGNAL MICROCONTROLLER, P18)

在MSP430x5xx家族的器件中,时钟系统由统一时钟系统Unified Clock System(UCS)模块提供,它包含了一个32KHz钟表石英晶体(XT1 LF Mode),一个内部低功率,低频率震荡器(VLO),一个内部平衡的低频震荡器(REFO),一个集成的内部数字可控震荡器(DCO),和一个高频石英晶体振荡器(XT1 HF模式或XT2).这个UCS模块的设计符合了系统对低成本和低功耗的要求,它包含数字锁频环(FLL),通过连接一个数字的调制器,使DCO频率稳定成一个可编程倍数的钟表石英晶体频率.其内部DCO提供了一个快速开启的时钟源,并能够在低于5us内稳定.
统一时钟系统模块提供了如下时钟信号:
·Auxiliary辅助时钟(ACLK),可由32KHz钟表晶体,高频晶体,内部低频振荡器(VLO),平衡的低频振荡器(REFO)或内部数字控制振荡器(DCO)提供.
·Main系统时钟(MCLK),供CPU使用,信号提供与ACLK相同.
·Sub-Main系统子时钟(SMCLK),供外设模块使用,信号提供与ACLK相同.
·ACLK/n,由ACLK分频后缓冲输出,分频系数可为1,2,4,8,16,32.

当你不做任何时钟配置时,你仍然可以像使用普通单片机一样正常使用它,那么它是时钟默认是怎么配置的呢?这时候你就得了解USC模块的默认配置了,这部分在430x54x Family User Guide中第64页有讲解。我的翻译:

@Unified Clock System(UCS)操作---430x54x Family User Guide slau208d,P64

在上电清除信号(PUC)之后,UCS模块的默认配置是:
·XT1 低频模式被选择为XT1CLK时钟的振荡器。XT1CLK被选择为ACLK的时钟源。
·DCOCLKdiv作为MCLK的时钟源。
·DCOCLKdiv作为SMCLK的时钟源。
·FLL(锁频环)运行被使能,XT1CLK作为FLL参考时钟,即FLLREFCLK。
·XIN和XOUT引脚被设置为通用IO时,XT1保持禁能直到IO口置为XT1操作模式。
·如果XT2IN和XT2OUT引脚被设置为通用IO,XT2被禁能。
在初始状态,FLL以XT1为参考时钟的运行默认使能,但XT1被禁止。要使能XT1,相应管脚的PSEL位必须置位。当一个32.768KHz的晶振用作XT1CLK时,出错的控制逻辑电路直接造成REFOCLK作为ACLK的时钟源,因为XT1不会立即稳定。一旦振荡开始信号被获取到了,FLL就使MCLK和SMCLK稳定到1.048576MHz,f(DCO)=2.097152MHz。
状态寄存器控制位(SCG0,SCG1,OSCOFF和CPUOFF)配置MSP430的运行模式,还使能或禁能UCS模块的部分功能(参考系统复位,中断,运行模式等章节)。寄存器UCSCTL0到UCSCTL8配置UCS模块。

废话别太多,下面直接看程序:

如果想将MCLK、SMCLK的时钟源设为外部高速晶振(我接的是16MHz),在初始化时加入以下程序段

//使用XT2振荡器
P5SEL |= BIT2 + BIT3;//配置管脚为晶振输入
UCSCTL6 &= ~XT2OFF; //打开XT2振荡器
do
{
UCSCTL7 &= ~(XT2OFFG; //清除振荡器XT2失效标志
SFRIFG1 &= ~OFIFG; // 清除振荡器失效标志
//上面这句必须有,否则起振了也不会分配成功
}
while (UCSCTL7 & XT2OFFG); //判断XT2是否起振
UCSCTL6 &= ~XT2DRIVE0;//设置驱动电流最小以降低功耗
UCSCTL4 |= SELM__XT2CLK + SELS__XT2CLK; //选择MCLK、SMCLK为XT2
//UCSCTL5 |= divS__2;//SMCLK设为2分频

如果想让外部的XT1,XT2和内部DCO同时使用,并从端口输出以便于测试,连接图示意(参考ti例程)
// MSP430F5418
// -----------------
// /| | XIN|-
// | | | 32kHz
// ---|RST XOUT|-
// | |
// | |
// | XT2IN|-
// | | HF XTAL or Resonator (add capacitors)
// | XT2OUT|-
// | |
// | P1.0|--> ACLK = 32kHz Crystal Out
// | |
// | P1.6|--> SMCLK = High Freq Xtal or Resonator Out
// | |
// | P2.0|--> MCLK = Default DCO Frw

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

网站地图

Top