历史上的今天
今天是:2025年02月04日(星期二)
2021年02月04日 | 关于MSP430的精准延时__delay_cycles的分析
2021-02-04 来源:eefocus
首先我们先看以下代码:
#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)
史海拾趣
|
最近移植bsp发现wince5.0的DM9000A驱动有问题!现在在这个和大家讨论讨论! 首先dm9000大部分驱动是官方的,下面就是一些细节的研究、我首先讲讲我的平台情况。 1.SD0~SD15 -------- LDATA0~LDATA15 数据线和 ...… 查看全部问答> |
|
各位高人! 我现在遇到这样一个问题!lcd驱动在uboot和kernel中使用了不同的buffer,从而导致了在进入kernel中lcd驱动时出现 lcd屏有个短暂的颜色渐变。为了消除这个bug。就想让uboot和kernel使用同一块内存。 1)下面是我的做法: & ...… 查看全部问答> |
|
//########################################################################### // // FILE: Example_281xSci_FFDLB.c // // TITLE: DSP281x Device SCI FIFO Digital Loop Back Test. // // ASSUMPTIONS: // ...… 查看全部问答> |
|
#include \"msp430x54x.h\" #include #include #include #include \"PIN_DEF.H\" #define FLL_FACTOR 749 &nbs ...… 查看全部问答> |
|
【解密08】基于51单片机的无线遥控坦克DIY 之 图片欣赏 前面介绍了很多专业内容,估计大家看的有些不耐烦了,今天换换口味,欣赏一下我们拍摄的照片,之前一直有朋友反映视频看的不是很清楚,很多细节没有看到,今天给大家上几张图,我们也正在翻录新的视频,希望能做的更好 ...… 查看全部问答> |
|
各位好,变量定义如下: char xdata ziku[] = {...} _at_ 0x0020; unsigned xdata int shuzu[] = {...}; unsigned xdata long ack; 求教:下面那两个未指定固定位置的xdata类型变量在编译的时候是否会和上面被指定固定位置的变量重叠呢?谢谢… 查看全部问答> |




