MSP430FR6989系列教程 -- 第二章 系统时钟

今天继续跟大家分享MSP430FR6989系列教程的系统时钟

教程用到的硬件平台:TI官方的MSP430FR6989 LaunchPad

编译器:IAR For MSP430。

目录

1,系统时钟源的种类

2,系统时钟信号

3,寄存器配置IO口实现外部时钟输入

4,配置DCO时钟以及配置时钟源

5,代码实现


1,系统时钟源的种类

MSP430FR6989有五个时钟源,分别如下:

  • LFXTCLK:低频振荡器,例如32.768kHz晶振。可以通过软件配置由外部方波信号驱动。

  • HFXTCLK:高频振荡器, 4 MHz - 24 MHz 范围内晶振使用。可以通过软件配置由外部方波信号驱动。

  • DCOCLK:具有可选频率的内部数控振荡器 (DCO) 

  • VLOCLK:典型频率为 10 kHz 的内部超低功耗低频振荡器 

  • MODCLK:典型频率为 5 MHz 的内部低功耗振荡器。 

大家可以根据项目的需求配置时钟源,在LaunchPad开发板中外部时钟使用LFXTCLK外接32.768k的晶振,原理图如下:

图片

2,系统时钟信号

对于MSP430FR6989单片机,一共有五种时钟信号,如下所示:

  • ACLK:      辅助时钟。             一般用于低速外设。

  • MCLK:     主时钟。                 用于CPU和系统使用。 

  • SMCLK:   子系统主时钟。      一般用于高速外设。

  • MODCLK:模块时钟。            一般用于低功耗下高速外设模块使用。

  • VLOCLK:  VLO 时钟。           一般用于低功耗下低速外设模块使用。

3,寄存器配置IO口实现外部时钟输入

LFXTCLK时钟连接到PJ4、PJ5上,我们需要将PJ4、PJ5配置为主功能模式,可以通过PxSEL1和PxSEL0配置IO口的功能,如下图所示:

图片

实现主功能,只需要将PxSEL1配置为0,PxSEL0配置为1即可,代码如下:

/* 外部引脚32.768k使能 */ PJSEL0 |= BIT4;    PJSEL1 &= ~BIT4;
PJSEL0 |= BIT5;    PJSEL1 &= ~BIT5;

4,配置DCO时钟以及配置时钟源

接下来我们需要配置内部DCO时钟供以MCLK和SMCLK使用,在配置时钟之前,我们需要先进行时钟配置的解锁,通过寄存器CSCTL0配置,如下:

图片

CSCTL0寄存器的高位要写入A5h才可以进行配置,配置如下:

  /* 使能时钟寄存器设置 */     CSCTL0_H = CSKEY_H;    // 将寄存器的高8位,配置为A5h   

我们找到头文件中定义CSKEY_H可以看到,CSKEY_H即为A5h,头文件中已经定义好了,方便程序的编写以及后续对于程序的阅读。如下所示:

图片

当然,程序也可以如下编写,是跟上面的是一样的 :​​​​​​​

/* 使能时钟寄存器设置 */ CSCTL0 = CSKEY;      // 将寄存器的高8位,配置为A5h

解锁完成之后,我们就要进行DCO的频率配置,这里我们选择8M时钟,配置寄存器CSCTL1选择频率,配置DCOFSEL位为6,即为选择8M时钟,如下:

图片

代码配置如下:

CSCTL1 = DCOFSEL_6;              // DCO = 8M

当我们选择更高的频率时,比如16M频率,那么我们需要将DCORSEL位置1,然后在选择DCOFSEL为第四位即可,即:

CSCTL1 = DCORSEL + DCOFSEL_4;              // DCO = 16M

接下来就是为系统时钟分配时钟源,我们ACLK选择LFXTCLK,SMCLK选择DCOCLK,MCLK选择DCOCLK,直接通过CSCTL2寄存器进行配置即可,寄存器介绍如下:

图片

代码的编写就要简单的多,而且一眼就可以看懂,如下所示:​​​​​​​

     /* ACLK = LFXT ,SMCLK和MCLK=DCO */    CSCTL2 = SELA__LFXTCLK + SELS__DCOCLK + SELM__DCOCLK;

然后就是关于系统时钟的分频,比如说8MHz频率,经过2分频后就是4MHz用于系统分频的寄存器是CSCTL3,如下图所示:

图片

这里我们不进行分频,直接CSCTL3 = 0;即可。

比如SMCLK要进行2分频的话,代码的编写如下:

 CSCTL3 = DIVS_1;     // ACLK/MCLK 分频=1   SMCLK 分频=2

最后,我们要选择时钟源的开关,比如我们没有用到HFXTCLK和VLOCLK,我们将其关闭,对于使用到的LFXTCLK,我们需要配置一下驱动电流,这里我们没有调试低功耗,可以先将其设置为最大强度的驱动电流。如下:

图片

当然最后不能忘记,锁定寄存器,只要不是A5h即可。代码如下:

CSCTL4 = HFXTOFF + VLOOFF + LFXTDRIVE_3;   // 关闭HFXT VLO ,打开LFX

5,代码实现​​​​​​​

void Initial_Clock(void){    /* 外部32.768k使能 */     PJSEL0 |= BIT4;        PJSEL1 &= ~BIT4;        PJSEL0 |= BIT5;        PJSEL1 &= ~BIT5;    /* 使配置完成的IO口生效,从LPMx.5退出 */    PM5CTL0 &= ~LOCKLPM5;      /* 使能时钟寄存器设置 */     CSCTL0_H = CSKEY_H;          CSCTL1 = DCOFSEL_6;                                     // DCO = 8M    CSCTL2 = SELA__LFXTCLK + SELS__DCOCLK + SELM__DCOCLK;   // ACLK = LFXT ,SMCLK和MCLK=DCO    CSCTL3 = 0;                                             // ACLK/SMCLK/MCLK 分频=1    CSCTL4 = HFXTOFF + VLOOFF + LFXTDRIVE_3;                // 关闭HFXT VLO ,打开LFXT  /* 禁止时钟寄存器设置 */     CSCTL0_H = 0;       

文章中使用到的资料以及编写的例程,我已经上传至GitHub,有需要的可以自行下载。https://github.com/Aimny2020/MSP430FR6989​​​​​​​

大家可以关注微信公众号『LemonTechnology』回复MSP430FR6989​​​​​​​,获取视频教程。

最后,欢迎大家关注微信公众号『LemonTechnology』,查看单片机编程、实时操作系统、Linux系统编程、硬件电路设计等更多精彩内容。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值