在DM642中怎样才能精确延时呢?请各位前辈给指点一下!

[复制链接]
 楼主| ccjchen 发表于 2009-7-23 16:59 | 显示全部楼层 |阅读模式
1.我现在使用的是DM642,时钟经过倍频后系统时钟为600MHz,如果我想延时100us,程序应该怎么写?<br />2.在C6000中有没有像51单片机中的那样空操作指令_nop()之内的指令?
zhongxon 发表于 2009-7-23 17:25 | 显示全部楼层

re

在642中也可以用nop指令。就是在C语言中加入汇编指令。<br />asm(&quot;&nbsp;&nbsp;&nbsp;&nbsp;nop&nbsp;8&quot;);就等于是加入了8个nop指令,比c51方便。<br /><br />不过延时100us用这种方法太耗费DSP的运算能力了。
ccjgalaxy 发表于 2009-7-23 21:14 | 显示全部楼层

hehe

那如果我的DM642系统时钟是600MHz的话,一个&nbsp;nop&nbsp;相当于延时多长时间啊
shixiudong 发表于 2009-7-26 21:51 | 显示全部楼层

说几句

由于CCS的编译优化,使得采用NOP延时的老办法无效。如下是一个成熟的方法。<br /><br />方法:用DM642的定时器2作精确延时。<br />效果:应用在成熟产品中,很可靠并支持重入机制。<br />程序:如下<br /><br />/////////////////////////////////////////////////////////////////////<br />//&nbsp;function:&nbsp;&nbsp;&nbsp;&nbsp;Wait_uSeccond<br />//&nbsp;<br />//&nbsp;Descript:&nbsp;&nbsp;&nbsp;&nbsp;Spin&nbsp;in&nbsp;a&nbsp;delay&nbsp;loop&nbsp;for&nbsp;delay&nbsp;microseconds<br />//&nbsp;Note:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)&nbsp;Timer-2&nbsp;does&nbsp;not&nbsp;trig&nbsp;a&nbsp;interrupt.<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)&nbsp;The&nbsp;MAX&nbsp;time&nbsp;is&nbsp;57.2662306&nbsp;seconds&nbsp;at&nbsp;CPU&nbsp;clock&nbsp;600&nbsp;MHz.<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)&nbsp;1uS&nbsp;=&nbsp;75&nbsp;cycle.<br />//////////////////////////////////////////////////////////////////////<br />void&nbsp;Wait_uSeccond(&nbsp;Uint32&nbsp;ui32Delay)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Uint32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;TIMER_Config&nbsp;&nbsp;&nbsp;&nbsp;cfgTimer2;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;save&nbsp;Timer2&nbsp;old&nbsp;settings<br />&nbsp;&nbsp;&nbsp;&nbsp;TIMER_getConfig(&nbsp;hTimer2,&nbsp;&cfgTimer2);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;=&nbsp;75*ui32Delay;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;clear&nbsp;the&nbsp;timer&nbsp;count&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;TIMER_setCount(&nbsp;hTimer2,&nbsp;0x00000000);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;resume&nbsp;the&nbsp;timer2<br />&nbsp;&nbsp;&nbsp;&nbsp;TIMER_resume(&nbsp;hTimer2);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;wait&nbsp;until&nbsp;time=delay<br />&nbsp;&nbsp;&nbsp;&nbsp;while(&nbsp;TIMER_getCount(&nbsp;hTimer2)&nbsp;&lt&nbsp;cnt);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Reconfigure&nbsp;Timer2&nbsp;with&nbsp;old&nbsp;settings<br />&nbsp;&nbsp;&nbsp;&nbsp;TIMER_config(&nbsp;hTimer2,&nbsp;&cfgTimer2);<br />}<br />
 楼主| ccjchen 发表于 2009-7-27 13:27 | 显示全部楼层

我刚学DSP不久

弱弱的问一下,用DM642的定时器2不是通常用作SDRAM的定时中断吗?还能用作程序其他部分的延时吗?
zhongxon 发表于 2009-7-28 09:56 | 显示全部楼层

史版主,好久不见了,生意好吗。

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

本版积分规则

175

主题

446

帖子

1

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