中级会员
 
- 积分
- 270
- 金钱
- 270
- 注册时间
- 2019-9-1
- 在线时间
- 61 小时
|
1金钱
大家好,请教大家一个问题,这是战舰版里面的微秒延时函数,怎么用逻辑分析,显示延时不对呢,在主函数里while下,只写 delay_us(4);
LED0=!LED0;//DS0éá˸这两句,延时4us,分析仪显示80us和120us,毫秒延时正常,这是哪里的问题,请解释一下
//Ñóê±nus
//nusÎaòaÑóê±μÄusêy.
void delay_us(u32 nus)
{
u32 ticks;
u32 told,tnow,tcnt=0;
u32 reload=SysTick->LOAD; //LOADμÄÖμ
ticks=nus*fac_us; //DèòaμĽúÅÄêy
tcnt=0;
delay_osschedlock(); //×èÖ1OSμ÷¶è£¬·àÖ1′ò¶ÏusÑóê±
told=SysTick->VAL; //¸Õ½øèëê±μļÆêyÆ÷Öμ
while(1)
{
tnow=SysTick->VAL;
if(tnow!=told)
{
if(tnow<told)tcnt+=told-tnow; //Õaàï×¢òaò»ÏÂSYSTICKêÇò»¸öμY¼õμļÆêyÆ÷¾í¿éòÔáË.
else tcnt+=reload-tnow+told;
told=tnow;
if(tcnt>=ticks)break; //ê±¼ä3¬1y/μèóúòaÑó3ùμÄê±¼ä,ÔòíË3ö.
}
};
delay_osschedunlock(); //»Ö¸′OSμ÷¶è
}
|
|