• msp430学习笔记-时钟及延时函数


    引用:http://blog.chinaunix.net/uid-24343357-id-3271380.html

    MCLK默认时钟源是DCOCLK,SMCLK默认时钟源也是DCOCLK,DCOCLK默认约为1.1MHZ(1126.4KHz),ACLK默认为32768HZ

    系统复位后MCLK和SMCLK的频率在0.8MHz~1.5MHz,即819.2KHz~1536KHz。系统启动后,可以调整RSELx(基本时钟系统控制寄存器1BCSCTL1前3位)、DCOx(DCO控制器DCOCTL前5位)、MODx(DCO控制器DCOCTL后3位)的值得到合适的频率

    MSP430基础时钟模块包含以下3个时钟输入源。

    一、4个时钟振荡源

       1、LFXT1CLK:  外部晶振或时钟1 低频时钟源 低频模式:32768Hz 高频模式:(400KHz-16MHz)

       2、XT2CLK:    外部晶振或时钟2 高频时钟源(400KHz-16MHz)
       3、DCOCLK:    内部数字RC振荡器,复位值1.1MHz
       4、VLOCLK:    内部低功耗振荡器 12KHz

       注:MSP430x20xx: LFXT1 不支持 HF 模式, XT2 不支持, ROSC 不支持.

      (1)LFXT1CLK 低频时钟源:由LFXT1振荡器产生(如图2所示)。通过软件将状态寄存器中OSCOff复位后,LFXT1开始工作,即系统采用低频工作。如果LFXT1CLK没有用作SMCLK或MCLK信号,则可以用软件将OSCOff置位,禁止LFXT1工作。

      (2)XT2CLK高频时钟源:由XT2振荡器产生。它产生时钟信号XT2CLK,其工作特性与LFXT1振荡器工作在高频模式时类似。可简单地通过软件设置XT2振荡器是否工作,当XT2CLK没有用作SMCLK或MCLK信号时,关闭XT2,选择其他时钟源。

      (3)DCOCLK 数字控制RC振荡器。由集成在时钟模块中的DCO振荡器产生。DCO振荡器是一个RC振荡器,频率可以通过软件调节,其控制逻辑如图3所示。当振荡器LFXT1、XT2被禁止或失效时,DCO振荡器被自动选作MCLK的时钟源。因此由振荡器失效引起的系统中断请求可以得到响应,甚至在CPU关闭的情况下也能得到处理。

        由基础时钟模块可以提供系统所需的3种时钟信号,即:ACLK、MCLK、SMCLK。其中辅助时钟ACLK是LFXT1CLK信号经1、2、4、8分频后得到的。ACLK可由软件选作各个外围模块的时钟信号,一般用于低速外设;系统主时钟MCLK可由软件选择来自LFXT1CLK、XT2CLK、DCOCLK三者之一,然后经1、2、4、8分频得到。MCLK主要用于CPU和系统。子系统时钟SMCLK可由软件选择来自LFXT1CLK和DCOCLK,或者XT2CLK和DCOCLK,然后经1、2、4、8分频得到,主要用于高速外设模块。

    这个是哪个DCO设置,与之对应的震荡频率。
    时钟模块的相关寄存器,具体含义,请看datasheet。
    ACLK=LFXT1=32768HZ, MCLK=DCOCLK(大约8MHZ,从上面图片上看), SMCLK=XT2,
    LFXT1是低速晶振输入,XT2是高速晶振输入。
    一般来说我们的代码,在时钟初始化的时候,会先使用DCO时钟来启动,然后切换主时钟到XT2。
    如果切换时钟,要查询一下时钟有效位 while ((IFG1 & OFIFG));   //晶振失效标志仍然存在?
    这是TI提供的一段关于时钟设置的例程,注释解释的很清楚了,我不多说,
    例程中用的一些宏定义,都是定义在这个头文件里面了,这个头文件很有用的,要好好看看,可以方便在程序里面设置,使得程序简单明了

    延时函数

    #define CPU_F                               ((double)8000000) 
    #define delay_us(x)                       __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 
    #define delay_ms(x)                      __delay_cycles((long)(CPU_F*(double)x/1000.0)) 

    在 #define CPU_F              ((double)8000000) 语句里 8000000 修改成你当前MSP430 CPU的主频频率,即CPU的MCLK

    直接调用,如:__delay_cycles(100),就延时100个时钟周期

    只能是常数,因为编译器会重新编译为汇编代码

  • 相关阅读:
    深入浅出Blazor webassembly之Local storage
    深入浅出Blazor webassembly之一种简单的部署方法
    深入浅出Blazor webassembly之以SubDirectory方式部署
    深入浅出Blazor webassembly之理解 Blazor WASM
    深入浅出Blazor webassembly之Logging
    [转]解决github不能访问的问题
    深入浅出Blazor webassembly之使用State container机制实现两组件联动
    深入浅出Blazor webassembly之使用EventCallback机制进行组件之间联动
    跳槽一年后的回顾
    Node.js躬行记(12)——BFF
  • 原文地址:https://www.cnblogs.com/xubeiping0930/p/4454098.html
Copyright © 2020-2023  润新知