新手入门
- 积分
- 5
- 金钱
- 5
- 注册时间
- 2017-8-14
- 在线时间
- 0 小时
|
1金钱
在我参与的一个项目里面遇到个奇葩问题:网口初始化时,引脚拉低之后会进行250ms的延时如下:
GPIO_ResetBits(ETH_RST_GPIO_M, ETH_RST_M); //低电平复位W5500
Delay(250);
GPIO_SetBits(ETH_RST_GPIO_M, ETH_RST_M); /* Restore W5500 */
Delay(50);
这个Delay函数如下:
void Delay( u32 ms){
u32 start;
start = sysTime;
while( (sysTime - start) < ms){
}
}
当延时为250时,延时1000us delay_10us(100)实测是937.5us,但是把Delay(250)调为Delay(300)时,实测1000us延时得到的结果是1009.375us,结果相差很大。delay_10us函数如下
void delay_10us(vu32 count)
{
vu32 i;
vu16 j;
for(i = 0; i < count; i++)
{
for(j = 0; j < 48; j++)
{
}
}
}
网口的初始化延时应该完全不会影响别的东西,然而它做到了,而且影响的还不止delay_10us函数,还影响了我们项目的另外一个功能。有个朋友说是Delay函数调用了系统时钟引起的,不知道是不是这个问题?
然后我的设备初始化是在系统滴答中断(SysTick_Handler)初始化之前的:
Peripheral_Init(); /* Initialize driver module */
caculate_record_cnt_in_flash();
CPU_Init();
cpu_clk_freq = BSP_CPU_ClkFreq(); /* Determine SysTick reference freq. */
cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; /* Determine nbr SysTick increments */
OS_CPU_SysTickInit(cnts);
不知道这个网口初始化延时时间为什么影响其它的东西,希望各位大大给点思路,求解求解,谢谢啦
|
|