[ZLG-MCU] 请教:关于SysCtlDelay()延时函数

[复制链接]
6368|6
 楼主| hopeasy 发表于 2009-6-22 22:11 | 显示全部楼层 |阅读模式
关于SysCtlDelay()延时函数:<br /><br />在周公的所有关于LM3S的例程中均采用了hh_SystemInit.c,其默认的设置为采用主晶振6M<br /><br />而在程序中则如此写:<br />1.&nbsp;SysCtlDelay(20);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;延时60个系统周期<br />2.&nbsp;SysCtlDelay(150&nbsp;*&nbsp;(SysCtlClockGet(&nbsp;)&nbsp;/&nbsp;3000));&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;延时150ms&nbsp;<br /><br />这里关于系统周期的说法:<br />2中,SysCtlClockGet(&nbsp;)=6000000&nbsp;Hz,换算为1ms,则为6000Hz<br /><br />总延时为&nbsp;150*6000/3000*3=900时钟周期,对应于150ms。<br />即当振荡源为6MHz时,6时钟周期耗时1ms<br />如果为40M,则40时钟周期耗时1ms<br /><br />我的理解对么?<br /><br />如果上述理解正确的话,那么:<br />在40M下需要延时150ms,函数同样可以写为<br />SysCtlDelay(150&nbsp;*&nbsp;(SysCtlClockGet(&nbsp;)&nbsp;/&nbsp;3000));&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;延时150ms
zlgmcu 发表于 2009-6-23 08:36 | 显示全部楼层

正解!

该问题以前有许多人问过的。<br />这是周立功手下工程师创造性的写法,其最大好处是想延迟多少跟具体的时钟频率配置无关,方便移植。<br />但好多新手感觉有些奇怪,因为不符合“常规”。
 楼主| hopeasy 发表于 2009-6-23 09:29 | 显示全部楼层

谢谢

谢谢
xiaoxin1986 发表于 2009-7-4 16:26 | 显示全部楼层

2楼说的很好

  
liujigan 发表于 2009-7-6 09:35 | 显示全部楼层

感觉不对呀

我用SysCtlDelay(1000*SysCtlClockGet()/3000);做了个延时使LED反转,可灯亮来的速度要比秒针快的多呀?我使用的是8MHZ晶振。
xiaoxin1986 发表于 2009-7-7 23:41 | 显示全部楼层

时钟没设好吧

  
linhai1986 发表于 2009-7-15 19:13 | 显示全部楼层

学习

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

40

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部