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,