新手上路
- 积分
- 31
- 金钱
- 31
- 注册时间
- 2016-1-20
- 在线时间
- 9 小时
|
5金钱
环境:
硬件平台:STM32F207
系统时钟频率:120MHZ
问题:
在使用IO口模拟I2C总线时,这个延时不好确认,标准中写的是5us,但是我看他们代码这样延时明显没有5us,但是外围器件能够正常运作。
源代码如下:
[mw_shl_code=cpp,true]static void I2C_delay(void)
{
INT16U i=100; //这里可以优化速度 ,经测试最低到5还能写入
while(i)
{
__NOP();
i--;
}
}[/mw_shl_code]
其中__NOP();--> static __INLINE void __NOP() { __ASM volatile ("nop"); }
大家看看我的分析过程是否正确:
第一:stm32f207 达到 1.25 DMIPS/MHz
第二:当前时钟是120Mhz,那么理论上每秒执行150M条指令
第三:这样算下来一条指令执行时间是=1/150M = 6.666666666666667e-9
第四:代码里面讲nop和i--算进去,相当于两条指令,所以执行时间= 6.666666666666667e-9 * 2 ~= 1.2e-8
第五:循环一百次,所用时间=1.2e-8 * 100 = 1.2e-6 ~= 1us
但是我在I2C协议上看到的是一个周期至少维持5us,这里我算出来只有1us,请问是我算错了还是哪里有没有考虑到的问题,
请各位帮我看看,谢谢
|
|