新闻中心

EEPW首页>嵌入式系统>设计应用> MSP430(F5529)学习笔记——UCS配置详解

MSP430(F5529)学习笔记——UCS配置详解

作者: 时间:2016-11-28 来源:网络 收藏
MSP430(F5529)相比MSP430(F149)来讲,功能更加强大。

UCS简介
MSP430F5XX/MSP430F6XX系列器件的UCS包含有五种时钟源,依次是:XT1CLK、VLOCLK、REFOCLK、DCOCLK和XT2CLK。这五种时钟的详细介绍请参考该系列芯片的指导手册,其中XT1CLK、VLOCLK、REFOCLK和XT2CLK跟MSP430F1XX系列没有太大区别,学习配置起来也比较简单。

UCS上电默认状态

PUC后,UCS模块的默认状态如下:

本文引用地址://m.amcfsurvey.com/article/201611/322859.htm
[html]view plaincopy
  1. (1)XT1处于LF模式作为XT1CLK时钟源。ACLK选通为XT1CLK。
  2. (2)MCLK选通为DCOCLKDIV
  3. (3)SMCLK选通为DCOCLKDIV
  4. (4)FLL使能,且将XT1CLK作为FLL参考时钟。
  5. (5)XIN和XOUT脚设置为通用IO,XIN和XOUT配置为XT1功能前,XT1保持禁用。
  6. (6)如果可用的话,XT2IN和XT2OUT被设置为通用IO且保持禁止状态。

清楚UCS上电默认状态是非常重要的,这对于理解后面的配置逻辑来说非常重要。

UCS时钟源切换

由于REFOCLK、VLOCLK、DCOCLK(这里暂时这么认为)默认状态下是可用的,所以,切换的时候只需要通过UCSCTL4来配置ACLK、SMCLK和MCLK的时钟源即可,而XT1CLK和XT2CLK需要根据硬件的具体配置情况确定,所以,这两者的配置比起前三者来讲,就有些不同了。下面,我们做三个实验:

(1)将MCLK和SMCLK配置REFOCLK、VLOCLK
REFOCLK和VLOCLK是芯片默认提供的,只要芯片正常工作,这两个时钟就会正常工作,因此,该时钟配置非常简单,只需要修改UCSCTL4,将SELS和SELM配置为对应的选项VLOCLK或者REFOCLK即可,具体代码如下:
[cpp]view plaincopy
  1. #include
  2. voidmain(void){
  3. WDTCTL=WDTPW+WDTHOLD;
  4. P1SEL|=BIT0;
  5. P1DIR|=BIT0;//测量ACLK用
  6. P2SEL|=BIT2;
  7. P2DIR|=BIT2;//测量SMCLK用
  8. P7SEL|=BIT7;
  9. P7DIR|=BIT7;//测量MCLK用
  10. //UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_1|SELM_1;//将SMCLK和MCLK配置为VLOCLK
  11. UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_2|SELM_2;//将SMCLK和MCLK配置为REFOCLK
  12. while(1);
  13. }

上面的代码就实现了将SMCLK和MCLK切换为VLOCLK和REFOCLK,ACLK的操作也是同样的,不作过多解释。
(2)将MCLK和SMCLK配置XT1CLK

我手头上的开发板XT1外接的是32.768K的手表时钟晶振,XT1CLK的配置要分为以下几步:

[cpp]view plaincopy
  1. 1.配置IO口5.4和5.5为XT1功能。
  2. 2.配置XCAP为XCAP_3,即12PF的电容。
  3. 3.清除XT1OFF标志位。
  4. 4.等待XT1起振。

具体的代码如下:
[cpp]view plaincopy
  1. #include
  2. voidmain(void){
  3. WDTCTL=WDTPW+WDTHOLD;
  4. P1SEL|=BIT0;
  5. P1DIR|=BIT0;//测量ACLK用
  6. P2SEL|=BIT2;
  7. P2DIR|=BIT2;//测量SMCLK用
  8. P7SEL|=BIT7;
  9. P7DIR|=BIT7;//测量MCLK用
  10. P5SEL|=BIT4|BIT5;//将IO配置为XT1功能
  11. UCSCTL6|=XCAP_3;//配置电容为12pF
  12. UCSCTL6&=~XT1OFF;//使能XT1
  13. while(SFRIFG1&OFIFG){
  14. UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);//清除三类时钟标志位
  15. //这里需要清除三种标志位,因为任何一种
  16. //标志位都会将OFIFG置位
  17. SFRIFG1&=~OFIFG;//清除时钟错误标志位
  18. }
  19. UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_0|SELM_0;//将SMCLK和MCLK时钟源配置为XT1
  20. while(1);
  21. }

上一页 1 2 3 下一页

评论


技术专区

关闭