MSP430F149学习随笔(一)

1.延时函数

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

其中,__delay_cycles((long)(CPU_F*(double)x/1000.0))并不是真正的函数, 只是提供编译器内联展开,该函数并不支持变量参数, 其参数只能是常数。
在头文件intrinsics.h中可以找到如下定义:

  /* Insert a delay with a specific number of cycles. */
  __intrinsic void __delay_cycles(unsigned long __cycles);

intrinsic在英文中是内在的、本质的意思,是MSP430的编译码,能够被MSP430的内核直接识别。
延时函数的原理:
当系统主时钟频率CPU_F为8MHz时:
频率 f = 8MHz = 8,000,000Hz
机器周期 Tm = 1/f = 1/8MHz = 1/8us
也就是说,一个机器周期(nop)的时长是1/8us,所以延时1us即8*Tm,
关于延时函数的的精确延时摘自:
《[MSP430] 对MSP430单片机__delay_cycles精确延时的说明及改正 》
https://www.cnblogs.com/memset/p/msp430_delay_cycles.html

2.系统时钟

MSP430F149的基本时钟模块包含3个时钟源:
LFXT1CLK:低频/高频时钟源。常用的频率为:32.768kHz。
XT2CLK:高频时钟源。常用频率为:8MHz。
DCOCLK:数字可控制的RC振荡器。其频率可以通过DCOCTL寄存器来设定,通过设定DCOCTL中的高三位(COOx),BCSCTL1基本时钟控制寄存器低四位(RSELx)可以控制DCO振荡器产生100k~20M的时钟频率。
DCO时钟频率配置
在这三个时钟源的独立工作或相互协调配合下提供了3个时钟信号输出:
ACLK:辅助时钟信号。ACLK是LFXT1CLK信号由1/2/4/8分频器分频后所得到的。由BCSCTL1寄存器设置DIVAx位来决定分频因子。ACLK可用于提供CPU外围功能模块做时钟信号使用。
MCLK:主时钟信号。可以由LFXT1CLK、XT2CLK或DCOCLK信号由1/2/4/8分频器分频后得到。MCLK主要用于MCU和相关系统模块做时钟使用。
SMCLK:子系统时钟。可以由LFXT1CLK、XT2CLK或DCOCLK信号由1/2/4/8分频器分频后得到。SMCLK可用于提供CPU外围功能模块做时钟信号使用。
时钟源与时钟信号的关系

猜你喜欢

转载自blog.csdn.net/qq_32425377/article/details/81326437
今日推荐