MSP430F5529火箭板 ---> 控制时钟系统输出频率实验(含时钟系统分析)

发布者:滁州鱼儿最新更新时间:2022-10-17 来源: csdn关键字:MSP430F5529  控制时钟  时钟系统 手机看文章 扫描二维码
随时随地手机看文章

实验内容:上电控制MSP430F5529 Launch Pad上的主时钟系统达到25Mhz


实验准备:

1、硬件:MSP430F5529 Launch Pad

2、软件:Code Composer Studio集成开发工具(CCS)

3、提升MSP430F5529核心电压的办法及介绍请参考《MSP430F5529火箭板 ----> 关于核心电压提升实验(含电源管理模块和供电监控系统介绍)》文章链接link


一、时钟系统

1、MSP430F5529 Lanuch Pad晶振的物理层分析

  在进入时钟系统之前我们先对MSP430F5529的时钟晶振做一个介绍。

   MSP430F5529 Launch Pad 板载了1个32.768Khz的RTC实时时钟XTAL1和1个4Mhz的外部晶振XTAL2

  默认情况下,MSP430F5529的系统时钟为1Mhz

   XT2的4Mhz晶振与MCU连接引脚如下图所示:

在这里插入图片描述

2、MSP430F5529 Launch Pad时钟的介绍

  MSP430应用程序通常使用一个快时钟和一个慢时钟。在某些情况下,快时钟(称为MCLK)用于驱动CPU和外围设备,而慢时钟保持计时器和外围设备在低功耗模式下运行。这种方法降低了功耗:慢时钟消耗的电量更少,因此,禁用快时钟的次数越多,应用程序消耗的电量就越少。

  这种快速时钟通常是集成在单片机中的数字控制振荡器(DCO)。DCO本身是一个重要的低功耗工具,因为与晶振不同,它有非常快的启动时间,因此可以快速关闭和重新启用。DCO可以被中断激活,并且稳定得足够快来响应它。MCU的低功耗模式只有在经常使用的情况下才有用。

  许多MSP430设备,包括F5529,将DCO与频率锁定环(FLL)模块耦合,使DCO锁定在精确的慢频参考上。这可以很好地控制DCO频率。


MSP430F5529有三个可用的慢时钟:

1、REFO:内部低频修整基准源,是一种不需要晶振起振的高精度、低功率芯片上振荡器,典型值为32.768Khz,常被用作锁相环FLL的基准频率,其设置往往要参考LPM模式的设置。

2、LEFXT1:外部低频振荡源,经典值为32.768Khz,它和REFO一样可以作为锁相环FLL的基准频率,但是它比REFO精度更高、功率更低且更稳定。

3、VLO:(Internal very low)内部低耗低频振荡源,精确度低,范围在12Khz~20Khz之间


下表为F5529推荐的时钟配置:

image.png

UCS模块默认配置:

  在F5529上电完成PUC后,UCS模块默认配置为:

    1、XT1默认选择LF模式,作为XT1CLK的振源。ACLK默认振源为XT1CLK

    2、MCLK默认振源为DCOCLKDIV

    3、SMCLK默认振源为DCOCLKDIV

    4、当启用FLL锁相环时,默认选择XY1CLK作为FLLREFCLK参考时钟源

    5、在具有XIN和XOUT与通用I/O共享的设备上,XIN和XOUT pin被设置为通用I/Os,并且XT1一直处于禁用状态,直到为XT1操作配置了复用I/O端口。如果XIN和XOUT不与通用I/Os共享,则默认启用XT1。

    6、上电时,XT2IN和XT2OUT引脚被设置为通用I/O,而XT2处于禁用状态


对于MSP430F5529来说,上电后,默认情况下FLL选择XT1,如果晶振引脚(XIN, XOUT)与通用I/O共享,XT1将保持禁用状态,直到与晶振引脚关联的PxSEL位和XT1BYPASS位决定被设置,如果XIN和XOUT不与通用I/O共享,则XT1启用。当XT1CLK使用32.768Khz晶体时,故障控制逻辑立即导致ACLK由REFOCLK提供,因为XT1不是立即稳定的。当晶体启动得到并稳定后,FLL稳定在MCLK和SMCLK到1.048576 MHz,fDCO = 2.097152 MHz


UCS模块故障安全操作:

  UCS模块包含振荡故障故障安全功能,该特性检测XT1、DCO和XT2的振荡器故障,存在的故障类型为:

  1、低频模式下XT1低频振荡器故障(XT1LFOFFG)

  2、高频模式下XT1高频振荡器故障(XT1HFOFFG)

  3、XT2高频振荡器故障(XT2OFFG)

  4、DCO故障标志(DCOFFG)


  对应的晶体振荡器打开后不能正常工作时,设置晶体振荡器故障位XT1LFOFFG、XT1HFOFFG、XT2OFFG。在故障位被设置之后,即使故障条件不再存在,它们仍然保持设置直到在软件中重置。如果故障一直存在,而用户却清除了故障标志位,则故障标志位在清除后再次自动置位。所以,在编写程序时,一定要判断故障标志位是否置位,如果置位,将其软件清除。


3、MSP430F5529 Launch Pad时钟树

  有如下图:

在这里插入图片描述

二、源代码

  下面我们先看一个让F5529输出8Mhz主频时钟的源代码:


#include


void SysClock_Init(); //申明系统时钟初始化函数

void SetVcoreUp(unsigned int level); //申明核心电压调整函数


void main()

{

    WDTCTL = WDTPW + WDTHOLD;

    SetVcoreUp(0x01);   //核心电压等级必须逐级提升,不能直接跳跃提升

    SetVcoreUp(0x02);

    SetVcoreUp(0x03);

    SysClock_Init();


    while(1);

}


void SetVcoreUp(unsigned int level)

{

    //Open PMM register for write

    PMMCTL0_H = PMMPW_H;        //PMMCTL0_H是电源管理寄存器PMMCTL0的高8位,PMMPW_H解锁PMM所有的寄存器

    

    //Set SVS/SVM high side new level

     SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // SVLE --> 此位控制SVSL使能      SVMHE  --> 此位控制SVMHE使能

                                                                      //SVSHRVL --> SVSH 复位电平电压

    //Set SVM low side to new level

     SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 *level;  

   

    //Wait till SVM is settle

     while((PMMIFG & SVSMLDLYIFG) == 0);

  

    //Clear already set flags

    PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);


    //Set Vcore to new level

    PMMCTL0_L = PMMCOREV0 *level;


    //Wait till new level reached

    if((PMMIFG & SVMLIFG))

  while((PMMIFG & SVMLVLRIFG) == 0);


   //Set SVS/SVM low side to new level

   SVSMLCTL = SVSLE +SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;


   //Lock PMM registers for write access

   PMMCTL0_H = 0x00;           //锁存所有寄存器

}


void SysClock_Init()

{

    UCSCTL3 = SELREF_2;         //设置DCO锁相环的时钟源为REFOCLK

    UCSCTL4 |= SELA_2;          //Set ACLK = REFO

    __bis_SR_register(SCG0);    //失能锁相环时钟,系统时钟切换到备用时钟,此时可以对时钟进行设置

    UCSCTL0 = 0X0000;           //将DCOx,MODx设置成最低

    UCSCTL1 = DCORSEL_4;        //设置DCO的频率范围   2~20Mhz

    UCSCTL2 = FLLD_0 + 762;     //FLLD_0  --->  32768Hz为基准时钟的分频  ,FFLN  ---> 是后面的数字

    //(N+1) * FLLRef = Fdco

                                //(243+1) * (32768/1) = 8Mhz

    __bic_SR_register(SCG0);    //使能锁相环时钟

    //最坏的情况下,DCO恢复的解决时间是(32 * 32 * n)/f_MCLK  =  Num MCLK cycles for DCO to settle

    // (32 *32 * 8Mhz)/32768Hz = 250K       ---->  n为我们要设置的频率

    __delay_cycles(250000);


    //进入循环直到XT1、XT2、DCO稳定为止,本例中只需循环到DCO稳定下来即可

    do

    {

        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);

        //清除XT2、XT1、DCO 默认标志

        SFRIFG1 &= ~OFIFG;      //清除默认标志,SFRIFG1 --> 中断标志寄存器

        //OFIFG --> 振荡器故障中断标志   0:没有中断发生  1:有中断即将发生

    }while(SFRIFG1 & OFIFG);    //测试振荡器故障中断是否发生,如果发生就卡在此处循环

}


关键字:MSP430F5529  控制时钟  时钟系统 引用地址:MSP430F5529火箭板 ---> 控制时钟系统输出频率实验(含时钟系统分析)

上一篇:MSP430F5529关于ADC12模数转换介绍
下一篇:MSP430F5529火箭板 ----> 关于核心电压提升实验(含电源管理模块和供电监控系统介绍)

推荐阅读最新更新时间:2024-11-05 15:51

整理系统时钟定时器--SysTick的应用
Cortex-M3的内核中包含一个SysTick时钟。SysTick 为一个24位递减计数器,SysTick设定初值并使能后,每经过1个系统时钟周期,计数值就减1。计数到0时,SysTick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断(如果中断使能)。 在STM32的应用中,使用Cortex-M3 内核的SysTick作为定时时钟,设定每一毫秒产生一次中断,在中断处理函数里对N减一,在Delay(N)函数中循环检测N是否为0,不为0则进行循环等待;若为0则关闭SysTick时钟,退出函数。 外部晶振为8MHz,9倍频,系统时钟为72MHz,SysTick的最高频率为9MHz(最大为HCLK/8),
[单片机]
笔记--STM32时钟系统简单总结
STM32时钟系统 五个蓝色的正方形都是时钟源 HSI(high speed internal)高速内部时钟 RC振荡器不够稳定 图中梯形代表选择器(几选一) PLLXCLK常作为系统时钟来源 HSE (high speed external)高速外部时钟 MCO 是内部时钟输出引脚 对应PA8 绿色矩形对应预分频器 使用每个设备之前 都要进行时钟使能 原因之一就是:设备的功耗问题 不需要的外设就不需要开启时钟了 PCLK1和PCLK2下面挂载了很多外设 备注:某一个外设的时钟被使能后 该时钟振荡器还不能马上稳定 所以还有一个标志位代表其是否稳定 1.对应的是五个时钟源的使能 2.对应的是时钟源的来源配置 3.对应的是由
[单片机]
笔记--STM32<font color='red'>时钟</font><font color='red'>系统</font>简单总结
MSP430F5529 DriverLib 库函数学习笔记(十二)I2C实战
平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 上机实战 I2C给 DAC 芯片 DAC7571 写入数字量 DAC7571 介绍 DAC7571 是低功耗,单通道 12 位 DA 转换器.DAC7571 兼容 I2C 接口,通过这两条数据线和外部通信,时钟的最高速度为 3.4Mbps. DAC7571 的外观图和引脚定义 如上图所示: 1 脚:模拟电压输出脚. 2 脚:接地. 3 脚:电源输入脚. 4 脚:串行数据输入引脚. 5 脚:串行时钟输入引脚. 6 脚:地址选择脚. DAC
[单片机]
<font color='red'>MSP430F5529</font> DriverLib 库函数学习笔记(十二)I2C实战
STM32获取当前系统时钟
代码如下: RCC_ClocksTypeDef get_rcc_clock; //获取系统时钟状态 RCC_GetClocksFreq(&get_rcc_clock); //仿真的时候就可以在结构体get_rcc_clock中看见各个外设的时钟了 注意: 上述代码中的结构体RCC_ClocksTypeDef原型,可以在库文件stm32f10x_rcc.h中找到,如下: typedef struct { uint32_t SYSCLK_Frequency; /*! returns SYSCLK clock frequency expressed in Hz */ uint32_t HCLK_Frequen
[单片机]
基于自定义时钟脉冲的交通红绿灯控制设计
    随着我国社会经济的快速发展和人民生活水平的日益提高,城市规模也不断扩大,城市交通也日益繁忙,作为保障了城市交通安全、有序、快速运行的红绿灯的控制问题,是城市交通监控指挥系统中最重要的组成部分。交通红绿灯的控制既要安全可靠,其控制程序又要便于根据道路交通流量情况进行修改。以PLC定时器构成的自定义时钟脉冲程序段作为程序基本单元设计的交通红绿灯控制程序结构简单、思路清晰,在不改变程序结构的情况下,通过定时器设定值的调整快速获得新的红绿灯控制规律。下面就以三菱FX2N型PLC作为控制核心元件,阐明交通红绿灯的控制设计思路和控制方案。 1 工作任务与时序分析 1.1 工作任务     如图1所示,十字路口分别在东西方向和南北方向装设
[嵌入式]
ATmega16 时钟系统及其分布
时钟系统及其分布 Figure 11为AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。为了降低功耗,可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟,详见P30“ 电源管理及睡眠模式” 。时钟系统详见Figure 11。 CPU 时钟- clkCPU CPU时钟与操作AVR内核的子系统相连,如通用寄存器文件、状态寄存器及保存堆栈指针的数据存储器。终止CPU 时钟将使内核停止工作和计算。 I/O 时钟- clkI/O I/O时钟用于主要的I/O 模块,如定时器/ 计数器、SPI 和USART。I/O 时钟还用于外部中断模块。要注意的是有些外部中断由异步逻辑检测,因此即使I/O 时钟停止了这些中断仍然可以得到监控。此外
[单片机]
ATmega16 <font color='red'>时钟</font><font color='red'>系统</font>及其分布
MSP430F5529的IO口管脚的中断学习笔记
非常简单的一个程序,在F5529的开发板上用按键的IO中断控制LED的亮灭: #include int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= BIT0; //将LED1对应的IO口P1.0设置为输出 P1OUT &= ~BIT0; //初始化该灯设置为灭 P1DIR &= ~BIT7; //将按键1对应的IO口P1.7设置为输入 P1IFG &= ~BIT7; //初始化清空中断标志位 P1IE |= BIT7; //P1.7中断使能 P1IES |= BIT7; //下降沿产生中断
[单片机]
STM32时钟控制RCC探究
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 其实是四个时钟源,如下图所示(灰蓝色),PLL是由锁相环电路倍频得到PLL时钟。  ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。  ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。  ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。  ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。  ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 点击进入看
[单片机]
STM32<font color='red'>时钟</font><font color='red'>控制</font>RCC探究
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved