×
嵌入式 > 技术百科 > 详情

MSP430 Value Line MCU学习笔记 - 基础时钟模块

发布时间:2020-06-20 发布时间:
|
1. 关闭看门狗
由于要使用仿真器调试,加断点后MCU被挂起,会导致看门狗被触发而将MCU复位。因此在调试阶段,我们需要先关闭看门狗。关闭看门狗的方法是:
 
WDTCTL = WDTPW + WDTHOLD;
 
WDTCTL是一个16位的寄存器,顾名思义,就是看门狗的控制寄存器。WDTHOLD是控制看门狗开关的标志位。给WDTHOLD置位即关闭看门狗。但是这个WDTPW是什么呢?查手册得知WDTPW是看门狗的密码,这是一个宏,被定义为了0x5A00,这个密码是干什么用的呢?原来,WDTCTL寄存器是一个非常特殊的寄存器,为了防止程序异常时意外关闭看门狗,对它进行赋值操作时必须将其新值的高8位设为0x5A这个特定的值,也就是“密码”。如果赋值时新值的高8位不是0x5A,会导致MCU立即被复位。总之,对WDTCTL进行任何修改操作时,都要加上WDTPW的值。
 
2. 时钟系统
对于玩51单片机的人来说,学习MSP430的时钟系统是很痛苦的,也很颠覆的。MSP430为了做到超低功耗,对时钟系统进行了精妙的设计。网上有文章专门讲解MSP430的时钟系统,还有生动的配图。但遗憾的是这些讲解都多多少少的存在问题甚至是错误的。既然说人家讲得不好,我也就斗胆说说自己的理解。对时钟系统最精确的描述当然就是手册里的框图了:
 
我不喜欢看这种框图,觉得特别复杂,看起来累。但是静下心来看它时,你会发现其实它并不是那么复杂,很多困惑的问题也就迎刃而解了。唯一需要你了解的背景知识是,你必须要认识啥是多路选择器(Mux)。。。
 
首先,MSP430的时钟系统有这么几个概念。
时钟源:产生震荡的时钟信号。MSP430中最多有4个时钟源,分别是:DCO(数控晶振),VLO(超低功耗低频晶振),LFXT1(低频外部晶振),XT2(高频外部晶振)。在Value Line产品中,并非支持全部的四种时钟源。以MSP430G2231为例,内置了DCO和VLO,XT1可以自己焊接,XT2不支持。
时钟:供系统设备使用的时钟信号,通常是时钟源的原始信号经过分频后得到。MSP430有3个时钟,分别是:MCLK(主时钟,供CPU核心使用),ACLK(辅助时钟,供外围设备使用),SMCLK(子系统时钟,供外围设备使用)。
 
每个时钟都可以配置(1)从指定的时钟源获得信号 (2)对信号进行/1/2/4/8分频 (3)时钟开关
 
上面的框图我们从中间横向的红线分开看,上面一部分是低频时钟,LFXT1Sx这两个标志位用于选择使用哪个时钟源来驱动系统的低频时钟。蓝色的线就是低频时钟源的输出。下面一部分是高频时钟,红色的细线是高频时钟的输出(对没有XT2的芯片来说)。需要注意的是,这条蓝色线接在LFXT1Sx对应的数据选择器的后面。也就是说,系统只能选择一个低频时钟。比如我选择VLO作为ACLK的时钟源,那蓝色那条线上就是VLO的时钟信号。那即使我有外部晶振,也不能选择LFXT1作为MCLK的时钟源。就是这种机制,很多人没有理解清楚(或者没有表达清楚),致使网上的大部分教程都在说,MCLK是从ACLK和DCO中二选一,这样说是不准确的。因为蓝色的线在ACLK的分频器之前,所以并不受ACLK分频设置的影响,因此蓝色线上跑的并不是ACLK时钟信号,而是ACLK的时钟源信号。
更准确的理解是这样的:MCLK仍然是从DCO、VLO、LFXT1和XT2(如果有的话)中四选一,ACLK仍然是从LFXT1和VLO中二选一,SMCLK仍然可以从DCO和XT2(如果有的话)中二选一(如果没有XT2就在DCO、LFXT1、VLO中三选一)。只不过有一个约束,那就是如果MCLK或者SMCLK想要选择VLO或者LFXT1,那就必须跟ACLK选的一样。
在绝大部分Value Line产品中(以MSP430G2231为例),你可以采用更简单的记法:低频时钟源从LFXT1和VLO中选一个,高频时钟源只有DCO一个。因此对系统时钟(MCLK, ACLK, SMCLK)来说,只有2个时钟源,一个低频一个高频。三个系统时钟都可以选择使用低频时钟源(图中蓝线)或者高频时钟源(图中红线)。(2012年7月11日勘误:MCLK和SMCLK可以从低频和高频中选一个,而ACLK只能选择低频)
 
---------以下内容均以MSP430G2231和MSP430G2553芯片为例,即不存在XT2---------
 
3. 具体编程,对时钟源和系统时钟的配置和使用
(1)低频时钟源配置——寄存器BCSCTL3 (Basic Clock System Control Register 3)
    配置低频时钟的时钟源其实就是修改上面图中的LFXT1Sx,这两个标志位位于BCSCTL3这个8位寄存器的第4、5位。
 
    //使用频率约为12kHz的VLO作为低频时钟源
    BCSCTL3 |= LFXT1S_2;
    头文件中定义了LFXT1S_2,其实就是第4位为1,第5位为0. 含义是使用VLO
 
    // 使用Launchpad自带的32768Hz外部晶振,电容12.5pF
    BCSCTL3 |= LFXT1S_0 + XCAP_3; 
    头文件中定义的LFXTS_0含义是使用外部晶振,同时设置 XCAP_3,含义是晶振的负载电容是12.5pF
 
----------------------------待续,,,下面的还没写完------------------------------ 
 
(2)高频时钟源的配置——
 
(3)系统时钟MCLK的时钟源选择——寄存器BCSCTL2 (Basic Clock System Control Register 2)
    // 清晶振错误标志位
    IFG1 &= ~OFIFG;
    // 不懂。。。
    __bis_SR_register(SCG1 + SCG0);
    //系统时钟选择为低频,/8分频


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Semtech的LoRa技术携手Chipsafer将牧场连接至云端