当前位置: 代码迷 >> WinCE >> 问个简单有关问题,2440执行一条指令的时间是如何算的
  详细解决方案

问个简单有关问题,2440执行一条指令的时间是如何算的

热度:71   发布时间:2016-04-28 13:44:43.0
问个简单问题,2440执行一条指令的时间是怎么算的?
我使用GPIO模拟IIC驱动程序。
搞了两天也不成功,
我怀疑是延时不精确
想问一下2440执行一条C语言指令的时间是怎么确定的?
比如
static void Delay(USHORT count)
{
volatile int i, j = 0;
volatile static int loop = S3C2440A_FCLK/100000;
//RETAILMSG(1,(TEXT("S3C2440A_FCLK/100000=0x%x\r\n"),S3C2440A_FCLK/100000));
  //S3C2440A_FCLK/100000=0xfd2=4050会不会太大呢?
for(;count > 0;count--)
for(i=0;i < loop; i++) { j++; }
}

这是我模拟IIC使用的延时程序。

这个S3C2440A_FCLK是不是相当于51单片机的12M晶振的作用?

如果是这样那么2440执行一条C的指令应该是
(1/S3C2440A_FCLK)*12,我这样理解对吗?
请了解的人说一下。

我觉得我IIC模拟的不行极有可能是这样原因。

刚接触ARM几个月,发现好多不明白。

------解决方案--------------------
拿示波器把波形抓下来分析一下,看到底是哪里的时序不对了了,再调整调整就可以啊
2440自己有标准的IIC接口,为什么要用GPIO来模拟呢?
------解决方案--------------------
如果是这样那么2440执行一条C的指令应该是 
(1/S3C2440A_FCLK)*12,我这样理解对吗?

这个好象有问题吧,每条C的指令转成汇编后有可能是几条指令,一般理解是要看汇编指令,执行不同的指令可能需要的时间也不一样,记得以前书上有说的
一般是1个或者2个或者4个Clock吧,具体的不记得了,没有仔细研究过
所以*12肯定是有问题的
------解决方案--------------------
用过Kitl, kitl跟Bootloader没有什么关系的
没有示波器?那怎么用GPIO来模拟?怎么知道时序对不对,Faint
------解决方案--------------------
对,只能算出汇编代码的执行时间,C语言不行。
------解决方案--------------------
探讨
对,只能算出汇编代码的执行时间,C语言不行。

------解决方案--------------------
既然不确定就先延时的够长一点试试,比如在原先的基础上延时时间×10。
不过最好还是有一台示波器,看看i2c设备晶振有没有正常工作,电源复位是不是正常打开,再量量输出的波形正不正常。
延时不会非常精确的,2440 wince50偶们的经验值是每ms800次循环。
另外担心模拟的i2c被其他线程打断完全没必要。i2c设备一般都是非常低速的设备,你真用2440标准i2c反而容易出问题。slc和sda的上下沿一般要错开一点时间的,2440上的标准i2c好像是无法控制这个时间,模拟的则不怕这个问题。