锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【MSP430G2553】图形化开发笔记(2) 系统时钟和低功耗模式

时间:2022-10-07 07:00:00 555集成电路间歇定时器pf电容档电容器kit50低频晶体管low集成电路kitbc103电容

目录

  • 系统时钟概述
  • BCS 模块单元的基本结构
  • 时钟-概览
    • 介绍
    • Basic User 模式
    • Power User 模式
      • 1. 数控振荡器 DCO
      • 2. 出厂预校正频率
      • 3. 低频振荡器 VLO
      • 4. 内配电容
      • 5. 延时启动
      • 6. 自动选择 MCLK 源
      • 7. 时钟输出
      • 8. 振荡器故障中断
      • 9. 中断事件处理函数
      • 10. 退出中断后的节能选项
    • Registers 模式
  • 使用Grace改变系统时钟
  • 低功耗模式
  • 系统时钟直接配置

平台:
Code Composer Studio 6.2.0 Grace 2.2.0
MSP430G2553 LaunchPad? Development Kit (MSP-EXP430G2ET)


??摘自以下大部分内容《LaunchPad口袋实验平台 —— MSP-EXP430G傅强、杨艳两篇文章 编着(TI大学计划嵌入式微控制器技术系列)

系统时钟概述

??现代单片机的制造工艺相似,电子元件本身的节能潜力非常有限。单片机的低功耗主要依靠间歇工作,间歇工作的方法是启停系统时钟。如果像普通 51 单片机只有一个时钟,关闭时钟意味着单片机完全关闭,节能,不能正常使用。因此,出于低功耗的需要,MSP430 单片机工作的系统时钟分为 MCLKSMCLKACLK 三个可以根据需要关闭其中一个或全部。
??MCU 内需时钟的单元包括 CPU 三个时钟的功能区别如下:

  1. MCLK:主时钟(Main system Clock) , 专为CPU操作提供的时钟。MCLK频率配置越高,CPU执行速度越快。虽然CPU功耗越快,但频率越高MCLK可以让CPU工作时间更短。因此,正确的低功耗设计不应尽量减少MCLK,而是在不用CPU时立刻关闭MCLK。在大多数应用中,需要CPU计算时间很短,所以间歇开启MCLK (唤醒CPU)节能效果非常明显。
  2. SMCLK:子系统时钟(Sub-main Clock) ,为一些需要高速时钟的内外设备提供服务,如定时器和ADC采样等。当CPU只要休眠SMCLK打开,定时器和ADC它仍然可以工作(通常在电影内外设置完成后触发中断)CPU做后续工作)。
  3. ACLK:辅助时钟(Auxillary Clock),辅助时钟的频率很低,所以即使一直打开,功耗也不大,当然也可以关闭。辅助时钟可以提供只需要低频时钟的内外设备,如LCD控制器也可以用来产生节拍时基,间歇唤醒定时器CPU。

??MCLK、SMCLK 和 ACLK 三者关系用更生动的比喻是主力军(MCLK)、先头部队(SMCLK)、警戒哨兵(ACLK)的关系。

  1. 使用主力需要的时间不多,一般都处于休息状态,以节省供养(功耗)。
  2. 如果只能用先头部队解决问题,就不要用主力。先头部队完成任务后,请主力出马。
  3. 当没有实际的敌人时,主力部队和先锋部队以休息,但哨兵作为警告,发现敌人可以随时唤醒主力军。

BCS 模块单元的基本结构

??MCLK、SMCLK 和 ACLK 及其来源结构 MSP430x2xx 在系列单片机中称为 Basic Clock Module 单元,如下图所示。
??下图所示的框图乍一眼看过去异常复杂,需要设置的寄存器多如牛毛。但我们需要明白,单片机的设计师已经完成了所有可以为用户完成的事情,预留的寄存器是必须由主人控制的各种
开关。与实际硬件电路的设计相比,没有什么比拨开关更简单的了。在理解单片机设计师的设计意图后,借助 Grace 配置各种寄存器,事半功倍,胸有成竹。
??下图右侧的三个框架部分是最终单片机使用的三个时钟。左侧显示了这些时钟的可能来源。右框架中有一系列来源选择开关、分频控制开关和输出开关。下图左侧是时钟的可能来源。为了考虑精度、成本和使用方便,时钟的来源分为 3 大类,即低频振荡器, 高频振荡器(石英晶体) MSP430G 不支持系列单片机)数控振荡器。
在这里插入图片描述

??点击 "Device Overview(设备概述) "可以查看可供配置的外围模块(蓝色描述)。


??鼠标可以点击带底色框图的部分,是用户可以配置的资源。当前有 3 每个模块都有模块,分别是时钟(Oscillators Basic Clock System ),P1 口(Port P1),看门狗(Watchdog WDT ),这表明目前默认配置和启用 3 模块资源。点击其他带背景色框模块配置所选模块。
??上图中有一个电源下拉框,默认显示 1.8V,一些初学者认为,未来单片机的内部将会变成多少电压,因果关系是错误的。实际单片机供电是多少伏,框中应选择多少伏,Grace 有必要知道单片机的实际电源电压,因为有些外设不能在低电压下使用,Grace 外设功能将自动屏蔽。

??我们点击时钟配置,如下图所示,默认检查 Enable Clock in my configuration(在我的配置中使用时钟),然后就会出现 Overview、Basic User、Power User、Register 四个按钮。默认是停留Overview 状态,所以在下图中 Overview 灰色不能点击。

时钟-概览


该介绍机翻如下:

介绍

??基本时钟模块 (BCS )支持低系统成本和超低功耗。使用三个内部时钟信号,用户可以选择性能和低功耗的最佳平衡。在完整的软件控制下,BCS 可配置为使用外部电阻、一个或两个外部晶体或谐振器,无需任何外部元件。
??BCS 振荡器故障安全功能集成,可检测LFXT1和XT2.振荡器故障。如果相应的
晶体振荡器打开并运行异常,晶体振荡器的故障位置LFXT1OF和XT2OF位置。如果使用的振荡器功能正常,故障位置总是被位置,只要存在故障条件。
??当发现振荡器故障时(LFXT1OF或XT2OF)时,OFIFG如果振荡器故障标志位置。OFIE被置位,OFIFG请求一个NMI中断。当允许中断时,OFIE自动重置。OFIFG软件必须清除标志。通过检查每个故障位置,可以确定故障源。
??如果检测到为MCLK晶体振荡器供电故障,MCLK会自动切换到DCO作为时钟源。

Basic User 模式

??在点击了 Basic User 之后,如下图所示,我们进入了基本配置模式。这种模式更适合傻瓜模式。从图中可以看出,只要下拉菜单,时钟的配置就可以完成,没有多余的废话。

??对于想快速上手的初学者,可以使用 Grace 的 Basic User 时钟的模式配置可以在瞬间完成。如下图所示,DCO 频率可设为 1/8/12/16MHz,这 4 出厂校准后的频率更准确。如果外部手表没有焊接晶体振动,则选择低频信号源 12kHz 内部振荡器, 焊接手表
晶振选择32.768kHz。

Power User 模式

??点击 Power User ,如下图所示,可配置选项突然增加。这可能是众所周知的 BCS 半熟练工用的图形配置模式注意到,右下角还包括中断服务子函数中调用的中断事件函数的配置。

部分内容机翻 该系统使用低频振荡器。频率为4kHz至20kHz之间的变化。见具体设备数据表。
Note 1
??启用中断处理程序,Grace在src文件夹内的InterruptVectors init.c完全工作的中断服务程序在文件中生成。用户可以在ISR将代码插入指定区域,并保留代码。当用户禁用中断处理程序时,用户插入的代码会保留在文件的底部,如果用户重新启用中断处理程序,会自动重新插入用户也可以手动删除这些代码,当它不再…
Note 2
  手动配置DCO频率可能会导致+/-10%的频率偏差。预先校准的DCO有+/-3%的频率偏差。更多信息见数据表。
Note 3
  根据系统上升时间设置一个以毫秒为单位的延迟值,以确保不违反VCC与MCLK的关系。强烈建议在设置非默认的系统时钟频率时,确保系统的正常启动。


  为了进一步理解 BCS+的结构,结合上图中标注的 10 个知识点,下面分 10 个小结来讲解。

1. 数控振荡器 DCO

  MSP430G 系列单片机目前只能通过内部数控振荡器 DCO 来获得高频时钟,将来可能推出支持高频外部晶振的型号。
  DCO 的原理实际是一个开环控制的振荡器,DCO 模块内置系列(振荡)电阻,供选择频率范围(RSELx 共 4 位,16 档),也就是 RSELx 管粗调。接下来是对振荡频率进行分频(DCOx 有 3 位,共 8 档,档位步进约 10%),也就是 DCOx 负责细调。振荡频率范围和分档的设定示意图见下图。

  粗调和细调仍不满足要求怎么办?例如上文提到 DCOx 每档频率步进约 10%,如果我想频率只递增 5%怎么办?为了得到更多的频率,MSP430 单片机引入了小数分频的概念。如下图所示,利用混频器 Modulator,可以交替输出 DCOx 和 DCOx+1 两种频率,如果按 1:1 比例,就相当于输出了 DCOx+0.5 这一档频率。

  混频器当然也可以不按 1:1 混频,寄存器 MODx 共 5 位,用于设定两种频率在 32 个脉冲中所占比例,混频后的完整周期(32 个 CLK)可由如下公式表示:
t = ( 32 − M O D x ) ∗ t D C O + M O D x ∗ t D C O + 1 t=(32-MOD_x)*t_{DCO}+MOD_x*t_{DCO}+1 t=(32MODx)tDCO+MODxtDCO+1
  大家可能会好奇这样得到的“等效”频率的时钟能用吗?答案是当然有用,可以用于配置通讯的波特率。如果 MODx 设定值不为 0,显然经混频得到的振荡波形在示波器上看将会“抖动”,对于时钟瞬时稳定度要求高的场合应避免使用混频

2. 出厂预校正频率

  DCO 与一些型号 MSP430 配置的数字锁频环(FLL)不同,DCO 并不是一个带反馈的振荡器,而开环输出频率的误差很大。也就是说 RSELx 的粗调和 DCOx 的细调都是非线性的。如何保证 DCO 输出频率精度呢?在出厂时,每一块单片机都校正了 4 个频率值(1/8/12/16MHz),将这 4 个频率值的校验参数(RSELx/DCOx/MODx 的取值)存在了单片机片内 Flash 的 Info A 段中。
  在如下BCS+初始化配置代码中,设置 DCO 为 1MHz,实际就是调取出厂校验参数CALBC1_1MHZ 和 CALDCO_1MHZ。

 void BCSplus_init(void) { 
        
 ...
 BCSCTL1 = CALBC1_1MHZ; /* Set DCO to 1MHz */
 DCOCTL = CALDCO_1MHZ;
 ...
}

  既然是校验参数,那么每一块单片机会都不一样, MSP430G2553 单片机的 DCO 校验参数 CALBC1_xMHz 和 CALDCO_xMHz 在 Flash ROM 中的地址如下表所示。1 个字中的高 8 位用来存储 CALBC1_xMHz 参数,将来用于配置 BCSCTL1 寄存器。1 个字中的低 8 位用来存储 CALDCO_xMHz 参数,将来用于配置 DCOCTL 寄存器。

  1. MSP430 可以直接读写 1 个字(2 个字节,因为 MSP430 的 CPU 是 16 位的)。
  2. 也可以只读写其中一个字节(寻址到字节)。
  3. 但是不能直接读取 1 位(不能寻址到位)。

  在上表中最后一栏是基址和偏移地址(Tag Address and Offset),当我们对一段连续的内存进行操作时,往往采用宏定义基址,再操作偏移地址的方法来增加程序的可靠性(有了基址,就不易发生误写其他内存段的情况)和可读性(偏移地址都很小,容易看出规律)。
  我们还可以在 CCS 软件中查看单片机的校验参数值,插上 LaunchPad
开发板,建立任何一个工程运行仿真,然后可以在 Registers 中的 Calibration_Data 中找到 CALDCO_xMHz 和CALBC1_xMHz 的各个 Value 值。由于 Flash 储存器的值是可以被人为改写的,将来大家在学习 Flash 控制器的时候,很可能误操作将 Calibration_Data 数据删除。所以建议大家将自己手头 G2 中的 Calibration_Data 记下来,保存备用,万一删除,还可以想办法恢复。

  Grace 代码在配置 DCO 为 xMHz 前,有一句代码:“if (CALBC1_xMHZ != 0xFF)”,这是用于判断 Flash 中校验参数还在不在(Flash 一旦被擦除,所有位都是 1),防止误操作用的。

3. 低频振荡器 VLO

  为了尽可能节约成本和简化外部电路,MSP430x2xx 内部还集成了一个低频振荡器VLO,用于取代 32.768kHz 手表晶振。低频振荡器的标称值是 12kHz,它与 DCO 一样,实际频率受温度和供电电压影响(范围 4kHz~20kHz)。
  VLO 一般用于对频率精度要求不高的场合。

4. 内部匹配电容

  用过 51 单片机的读者知道,晶振引脚上可能需要接电容才能正常工作。还是基于节约成本简化电路的目的,当使用外部晶振时,可以由单片机内部提供可选的 1/6/10/12.5pF 晶振电容

5. 延时启动

  随供电电压的不同,MSP430 单片机的最高工作频率是不一样。下图表示运行程序(读 Flash ROM)和编程(擦写 Flash ROM)时所需的供电电压与 CPU 频率的关系。例如,MSP430 最低可以 1.8V 供电,但此时的工作频率最高为 6MHz,并且只能运行程序,不能擦 写 Flash ROM。

  单片机刚上电时,VCC 是逐渐达到额定值的,如果在 VCC 很低的时候将 MCLK 设置频率很高就会与上图所示的限定条件相冲突。设置数 ms 的延时,等待 VCC 达到额定值再配置 MCLK 频率就可以解决这个问题。具体代码为:

if (CALBC1_8MHZ != 0xFF) 
{ 
        
	 /* Adjust this accordingly to your VCC rise time */
	 __delay_cycles(10000); //等待VCC达到额定值
	 DCOCTL = 0x00;
	 BCSCTL1 = CALBC1_8MHZ; /* Set DCO to 8MHz */
	 DCOCTL = CALDCO_8MHZ;
 }

6. 自动选择 MCLK 源

  MCLK 的时钟是提供给 CPU 的,如果没有 MCLK 单片机就是“死的”。所以,MSP430中有一个智能机制,不管软件设定的 MCLK 时钟源是什么,最终 CPU 总会找一个“正常”的时钟使自己先“活过来”。这就是自动选择 MCLK,此功能不需要设置,强行派送的。

7. 时钟输出

  理论上 MSP430 单片机的 3 个时钟 MCLK、SMCLK、ACLK 都可以对外输出,但是有的单片机受 IO 口数量的限制,没有预留 CLK 输出口。比如 MSP430G2553 单片机,预留了SMCLK、ACLK 输出口,但是没有 MCLK 输出口

8. 振荡器失效中断

  当配置了使用外部晶振,而外部晶振没有正常工作(无振荡、或振荡频率不够高),单片机有一个保护机制,MCLK 将会自动切换到使用内部 DCO 工作。同时,XT2OF 或LFXT1OF 两个错误标识位将会置位(MSP430G2553 没有高频晶振对应的 XT2OF),可以引发一个中断告知用户该事件,除非外部振荡器恢复正常,否则错误标识位将一直保持。判断失效的频率范围视具体型号而不同。

9. 中断事件处理函数

  在 Grace 中,可以直接命名一个中断事件处理函数,这个函数将来会出现在中断服务子函数中,这种写法的可读性高。因为中断函数本身很分散(甚至在不同文件中),写在中断中的代码总是难于阅读的,所以中断中尽量只写事件处理函数的“空壳”,而把实际中断事件处理函数汇集到一个文件中,集中阅读。

#pragma vector=NMI_VECTOR
__interrupt void NMI_ISR_HOOK(void) 
{ 
        
	/* Oscillator fault interrupt handler */
	BCS_OF();
	/* No change in operating mode on exit */
}

10. 退出中断后的节能选项

  MSP430 中,进出中断前后的节能设置可以在中断服务子函数中修改。Grace 提供了快捷修改的方法,直接在下拉菜单中选择即可。

Registers 模式

  点击 Registers ,如下图所示,所有 BCS+(时钟)相关的寄存器豁然在列。这些寄存器有的是用鼠标勾选,有的组合需要鼠标下拉,但是所有位在鼠标停留时都会有提示。这个模式,属于真正懂 BCS+原理的人才能配置。

使用Grace改变系统时钟


  修改配置后,Ctrl+S保存,并点击小
锤子

  经编译后工程中多了 src 文件夹,展开之后我们得到一系列 Grace 配置文件,其中 Basic clock system +模块的初始化文件名为 BCSplus_init.c,这就是我们刚刚图形化设置的时钟配置。

低功耗模式

  MSP430x2xx 系列单片机的 CPU 共有 5 种工作模式分别为 AM(Active Mode)、LPM0(Low Power Mode 0)、LPM1、LPM2、LPM3,如图 4.9 所示为各种工作模式下的电流值。相比于 Active 工作模式的 300μA,常用的 LPM3(哨兵警戒)模式的电流仅需不到 1μA,而LPM4 模式耗电 0.1μA 比电池漏电流还小,直接可当关机使用。

  在 MSP430 单片机中,是如何控制低功耗模式的呢?我们花 10 秒钟翻回到下图所示原理框图中,下划线标注了一些开关,这些开关决定了是否停止振荡器,是否关闭输出。
在这里插入图片描述

  1. “停止”和“关闭”,两者的区别是停止振荡器消耗的功率更低。但是, “停止”后若要重新开启振荡器,直到振荡器能稳定输出是需要时间的,这个时间的长短在具体型号的器件说明书中可以查询。
  2. 不停止振荡器,但关闭输出,则可以快速切换到正常输出状态。
  3. 所有这些开关的组合构成了单片机的活动模式(ActiveMode)和另外4种低功耗休眠模式(Low Power Mode),详见下表所示。

      所有 4 种模式中,LPM0(主力休眠,先头部队工作)和 LPM3(主力和先头部队都休眠,仅留警戒哨兵)最常用,LPM4 则当关机使用。

直接配置系统时钟

  前面我们学习了如何用 Grace 配置时钟,其实对 MSPG2553 单片机来说,MCLK 和SMCLK 基本就是使用 DCO(没外部高频晶振可用)。有 32.768kHz 手表晶振,则 ACLK 选32.768Hz,没有就选 12kHz 的 VLO。所以,直接代码配置时钟也很方便,直接调用 DCO 出厂校验参数即可。

  1. 将 MSP430G2553 的时钟设置为 MCLK 和 SMCLK 均为 8MHz,ACLK 设为 32.768kHz。
DCOCTL = CALDCO_8MHZ; // 调取出厂校准后存储在Flash中的参数
BCSCTL1 = CALBC1_8MHZ; // BCSCTL3参数默认不用设
  1. 将 MSP430G2553 的时钟设置为 MCLK 和 SMCLK 均为 16MHz,ACLK 设为内部低频振荡器。
DCOCTL = CALDCO_16MHZ; // 调取出厂校准后存储在Flash中的参数
BCSCTL1 = CALBC1_16MHZ;
BCSCTL3 |= LFXT1S1; // 设为内部低频振荡器
  1. 将 MSP430G2553 的时钟设置为 MCLK 和 SMCLK 均为 16MHz,ACLK 设为使用32.768kHz 晶振且 4 分频。
DCOCTL = CALDCO_16MHZ; // 调取出厂校准后存储在Flash中的参数
BCSCTL1 = CALBC1_16MHZ; 
BCSCTL1 |= DIVA_2; // 补充修改 BCSCTL 的 DIVAx 位,4 分频
  1. 将 MSP430G2553 的时钟设置为 MCLK4MHz,SMCLK 为 2MHz,ACLK 设为使用32.768kHz 晶振。
DCOCTL = CALDCO_8MHZ; // 先设为 8MHz
BCSCTL1 = CALBC1_8MHZ; 
BCSCTL2 |= DIVM_1+DIVS_2; // 再对 MCLK 2 分频 ,SMCLK 4 分频
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章