【MSP430】关于MSP430的精准延时__delay_cycles的分析

首先我们先看以下代码:

#define CPU_F                            ((double)8000000) 		//CPU_F代表系统选用的主时钟大小,单位Hz   
#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)) 

分析上述代码:
  一、8000000为MSP430板载的外部高速晶振提供的8MHz的主时钟频率,单位为Hz

  二、__delay_cycles是编译器提供的一个内联的精准延时函数,该函数的原型是:

 __intrinsic void __delay_cycles(unsigned long __cycles)//__cycles是CPU运行周期的个数,即时钟/机器周期的个数

分析
1、在MSP430单片机中,一个时钟周期 = MCLK晶振的倒数
 例如:如果MCLK是8MHz,则一个时钟周期为1/8us

2、MSP430的时钟模块主要包括:
 ACLK --> 辅助时钟
 MCLK --> 主时钟
 SMCLK --> 子系统时钟

3、时钟的来源:
 ACLK --> 是LFXT1CLK信号经1/2/4/8分频后得到的,主要用作低速外围的时钟
 MCLK --> 是LFXT1CLK,XT2CLK, DCOCLK的三者之一决定,由软件选择,然后经1/2/4/8分频后得到,主要用于CPU和系统
 SMCLK --> 可由LFXT1CLK和DCOCLK ,或者XT2CLK和DCOCLK决定,然后经1/2/4/8分频后得到,主要用于高速外围模块

4、注意:
 上文陈述的代码中,8000000是已经由系统选定的MCLK时钟(8MHz),不可以直接通过改变它的值来实现对不同主频系统参数的统一,即它的值受主时钟频率的改变而改变,而非MCLK频率受它的值的改变而改变。
 举个例子:
  当系统时钟为1MHz时,改为 -->   #define CPU_F ((double)1000000)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值