这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 坤创E-Geek/天科大新电社 » 3队MSP-EXP430G2ET学习(四)

共6条 1/1 1 跳转至

3队MSP-EXP430G2ET学习(四)

助工
2019-07-10 19:16:53     打赏

MSP-EXP430G2ET的时钟系统学习笔记

     写在前面:经过这几天的学习,我犯下了以下问题,在此处做个笔记:问题一;端口设置问题。解决方法:MSP430的板子用到的端口是com28的,在驱动安装过的情况下如果下载不进去,或者下载失败的时候,最有可能是的是端口设置没设置成com28。找到“我的电脑”或者“此电脑”然后右键找到“属性”打开,然后找到设备管理器打开,在数据线和板子连接且在电脑上的情况下找到端口,看到两个以MSP开头的,分别为com什么的,如果Uart1 不是com28,那么就双击打开找到端口设置,双击高级,在左下角会发现com端口号,找到com28然后确定就行了。问题二;保存设置问题,有时候会因为保存问题导致写的程序没有在文件夹里出现。解决方法:每次写完下载完程序后,不要着急关闭程序,在左上角找到Save all保存到建的文件夹里,就成功了。问题三;设置问题。每一次创建的文件都要重新设定芯片型号。在此做个警示,希望以后一定要避免这些问题的发生。其实这次小编早就写整理好了,但是在小编的大意下没了,然后就当误了这么久。好了接下来跟着小编一起学习一下时钟系统吧!

     一,MSP-EXP430G2ET的时钟系统的大概介绍

        时钟就像是单片机的心脏,每跳动一下,整个单片机的各个电路就同步的动作一下。时钟为单片机内所有部分提供节拍,各个部分会随着这个节拍一起动作。节拍越快动作越快,节拍越慢动作越慢。单片机时钟的频率叫做主频,主频越高单片机可以在单位时间内完成更多的任务;但有时为了节省功耗,又需要单片机运行在较低的主频下。因此,像 MSP430 这样的单片机内部拥有多个时钟可以选择,以满足不同情况下的需要。MSP430 单片机的时钟分为 MCLKSMCLK ACLK 三个。三种时钟的功能区别如下:
         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:辅助时钟(Auxiliary Clock),辅助时钟的频率很低,所以即使一直开启功耗也不大,当然关掉也是可以的。辅助时钟可以供给那些只需低频时钟的片内外设,比如LCD 控制器,还可用于产生节拍时基,与定时器配合间歇唤醒 CPU

     二, MSP-EXP430G2ET时钟系统的基本构型

            MCLKSMCLK ACLK 及其来源构造在 MSP430G2 系列单片机中称为“Basic ClockModule+”单元,如下图所示。 请注意,不同型号的 MSP430,其具体的时钟系统结构可能有所不同,具体请参见芯片 datasheet 以及各个系列的 User’s Guide 下图左侧是时钟来源,右侧是最终单片机使用的三种时钟。 MSP430G2 系列单片机的时钟来源有 3 种,分别是内部低频振荡器 VLO、外部晶振 LFXT1 和内部高频数控振荡器 DCODCO MSP430 内部的数字振荡器, MSP430G2553 DCO 最高主频可以达到 16MHz,主要供 CPU 和其他一些高速外设使用。 DCO 的频率可以通过 DCOxMODx RSELx 这几个
寄存器位来调整。
DCO 的精度并不是高,因此如果想要通过 DCO 获得一个比较精确的时钟频率,必须先进行校准。LFXT1 是低速外部晶振,频率为 32.768kHz。这种晶振俗称“手表晶振”,为什么这么叫呢?
是因为这种晶振被广泛用于石英表中。大家可以计算一下,
32.768kHz=2^15,因此它的频率非常适合作为实时时钟进行记时,同时它的精度相比 DCO 也更高。需要注意的是, MSP430G2LaunchPad 上的外部晶振在出场时并没有焊接,而是在包装盒中单独提供。用户需要使用外部晶振时需要先将它焊接到 LaunchPad 上。VLO MSP430 内置的低频振荡器,它的频率是 12kHz 左右。 VLO 的最主要用途是在MSP430 进入低功耗模式后作为维持单片机“生命”的时钟源,待 MSP430 被唤醒后再切换到其他时钟。因此 VLO 的精度不高, 但它的功耗是最低的。 请注意当 MSP430G2553 没有接外部晶振时,系统会自动切换到 VLO 作为 ACLK 的时钟源。在时钟源和系统时钟之间有一系列的选择开关,通过配置这些选择开关(实际操作中是配置寄存器),可以为 3 种系统时钟选取不同的时钟源。 MCLK SMCLK 可以来自 3 个时钟源中的任意一个,而 ACLK 只能选择外部晶振或 VLO 作为时钟源。出厂默认情况下, MSP430G2553 MCLK SMCLK 来源于 DCO,频率约为 1.1MHz; 而ACLK 默认来源于外部晶振(前提是外部晶振已经被焊接) , 频率为 32.768kHz
      1562753008349054.png      

       下面是我在数据手册上找到的MSP430G2 系列单片机的时钟系统的详细构造图。然后再给大家分享一下数据手册的链接:http://www.ti.com.cn/cn/lit/ug/slau144j/slau144j.pdf 。提醒一下全英文的看起来有点费劲,所以说加油吧!

       1562753554916039.png1562753683218597.png

             数控振荡器DOC介绍

    MSP430G2 系列只能通过内部数控振荡器 DCO 来获得高频时钟,不支持外部高频晶振.DCO 的原理实际是一个开环控制的振荡器,DCO 模块内置系列(振荡)电阻,供选择频率范围(RSELx 4 位, 16 档),也就是 RSELx 负责粗调。接下来是对振荡频率进行分频(DCOx 3 位,共 8 档,档位步进约 10%),也就是 DCOx 负责细调。振荡频率范围和分档的设定示意图如下。 如果粗调和细调仍不满足要求, MSP430 单片机还有混频器 Modulator,可以交替输出两种DCO 频率,将其平均以输出目标频率。寄存器 MODx 负责控制混频。大家可能会好奇这样得到的“等效”频率的时钟能用吗?答案是当然有用,可以用于配置通讯的波特率。如果 MODx 设定值不为 0,显然经混频得到的振荡波形在示波器上看将会“抖动”,对于时钟瞬时稳定度要求高的场合应避免使用混频 。

image.png

        DCO 与一些型号 MSP430 配置的数字锁频环(FLL)不同, DCO 并不是一个带反馈的振荡器,而开环输出频率的误差很大。也就是说 RSELx 的粗调和 DCOx 的细调都是非线性的。如何保证 DCO 输出频率精度呢?在出厂时,每一块单片机都校正了 4 个频率值(1/8/12/16MHz),将这 4 个频率值的校验参数(RSELx/DCOx/MODx 的取值)存在了单片机片内 Flash Info A 段中。下面的代码是将 DCO 设置为1MHz,实际就是调取出厂校验参数 CALBC1_1MHZ CALDCO_1MHZCALBC1_xMHZ CALDCO_xMHZ 这两个宏存储了 Flash 中记录校正参数的地址,每个单片机的校正参数不一样。利用这两个宏可以直接取得精确的 1/8/12/16MHz 的时钟频率。

            

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

    三,MSP-EXP430G2ET时钟系统的寄存器介绍

          时钟系统的控制类寄存器上述所有配置位均在 DCOCTLBCSCTL1BCSCTL2BCSCTL3 这四个寄存器,这是我在网上整理的各个位的配置,有 4 个常用频率,再配合分频寄存器 DIVADIVS DIVM,就可以很方便的将时钟设置为想要的频率 了。

1562754876444013.png1562755009170649.png1562755064508862.png

1562755116812254.png1562755241200611.png

       四,MSP-EXP430G2ET时钟系统的程序编写

          其实吧,经过小编的总结,这时钟系统就用到了那四个寄存器,然后就是对频率的设置,也不是多麻烦,就是网上的各路大神讲的比较细致,是让大家学会的那种,小编这没有他们那么全,只能尽量做做笔记了。做一个小实验,让绿色的LED灯在 MSP430G2553 的时钟设置为: MCLK 4MHzSMCLK 2MHz 的情景下亮。接下来跟小编一起来写代码吧!

         首先创建一个文件夹,然后创建一个新的工程,记得保存!!!然后打开main函数打开,找到io430g2553.h文件打开,一直拉到下面找到CALDCO和CALBC1将它们的频率给 BCSCTL1和DCOCTL,再因为要把MCLK 为 4MHz, SMCLK 为 2MHz 的情景下,所以先把设置DCO8MHz,再对MCLK 2分频, SMCLK 4分频,然后方向寄存器和输出寄存器设置就好了。

image.png

              下面是小编写好的程序代码供大家参考,其实也没事啥参考的,然后编译没有错误,没有警告,下载到板子上,你会发现那个绿灯在不停的闪烁,这可不是那种用延迟让它亮灭的闪烁哦

    

#include "io430.h"

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
 BCSCTL1 = CALBC1_8MHZ; // 先将DCO设为8MHz
 DCOCTL = CALDCO_8MHZ;
 BCSCTL2 |= DIVM_1 + DIVS_2; // 再对MCLK 2分频, SMCLK 4分频
  
   P1DIR |= 0x01; 
  while(1)
  {
   volatile unsigned int i;
    P1OUT ^= 0x01;                          // Toggle P1.0 using exclusive-OR
    i = 50000;                              // Delay
    while (i--);
  
  
  }
}

       下面是我在网上找的一些有关时钟系统设置的例程,希望这些能对大家有帮助;

   1 MSP430G2553 的时钟设置为: MCLK SMCLK 均为 1MHzACLK 设为32.768kHz
   BCSCTL1 = CALBC1_1MHZ; // 要取得精确的1MHz,一定要调取校正参数
   DCOCTL = CALDCO_1MHZ; // ACLK保持默认即可
  例 2 MSP430G2553 的时钟设置为: MCLK SMCLK 均为 16MHzACLK 设为 VLO
   BCSCTL1 = CALBC1_16MHZ; // 调取16MHz校正参数
   DCOCTL = CALDCO_16MHZ;
   BCSCTL3 |= LFXT1S_2;
// 设为VLO
  低频晶振源是由 BCSCTL3 中的 LFXT1Sx 控制的。将 LFXT1Sx 置为 10 即可用 VLO 作为低频时钟源。

   3 MSP430G2553 的时钟设置为: MCLK 4MHzSMCLK 2MHz
   BCSCTL1 = CALBC1_8MHZ; // 先将DCO设为8MHz
   DCOCTL = CALDCO_8MHZ;
   BCSCTL2 |= DIVM_1 + DIVS_2;
// 再对MCLK 2分频, SMCLK 4分频
   MSP430G2 单片机出厂时没有提供 4MHz 2MHz 的校正参数,但我们可以灵活利用分频功能来得到想要的频率。先将 DCO 频率设为 8MHz,再将 DIVM DIVS 寄存器设为 2 分频和 4 分频,即可得到 4MHz 2MHz 的频率。
   例
4 MSP430G2553 的时钟设置为: MCLK 设为 32.768kHz 外部晶振MSP430G2553 包装中提供了一个 32.768kHz 的外部晶振,但出厂时未焊接。要使用外部晶振,需要将晶振焊接在 LaunchPad Q2 处。另外晶振要想起振,需要配合 2 12.5pF 的外围电容。 MSP430G2553 内部专门内置了电容配合晶振使用,以减少外围电路复杂程度。 BCSCTL3寄存器的 XCAPx 可以配置此电容。



   




高工
2019-07-10 21:11:27     打赏
2楼

谢谢楼主分享


菜鸟
2019-07-10 21:16:25     打赏
3楼

真的是很用心了


工程师
2019-07-10 21:17:44     打赏
4楼

学习一下 嘿嘿


院士
2019-07-11 09:15:29     打赏
5楼

内容详实,排版工整,美观。

不错的笔记分享。赞~~


高工
2019-07-11 10:21:33   被打赏 100 分(兑奖)     打赏
6楼

这么好的笔记,当然要赞一个哦


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]