博士
最后登录1970-1-1
在线时间 小时
注册时间2015-3-6
|
发表于 2015-7-2 18:34:06
|
显示全部楼层
/*
*********************************************************************************************************
* 函 数 名: bsp_DelayUS
* 功能说明: 这里的延时采用CPU的内部计数实现,32位计数器
* OSSchedLock(&err);
* bsp_DelayUS(5);
* OSSchedUnlock(&err); 根据实际情况看看是否需要加调度锁或选择关中断
* 形 参:n : 延迟长度,单位1 us
* 返 回 值: 无
*********************************************************************************************************
*/
void bsp_DelayUS(uint32_t _ulDelayTime)
{
uint32_t ticks;
uint32_t told,tnow,tcnt=0;
uint32_t reload = SysTick->LOAD; /* LOAD的值 */
ticks = _ulDelayTime * 72; /* 需要的节拍数 */
tcnt = 0;
told = SysTick->VAL; /* 刚进入时的计数器值 */
while(1)
{
tnow = SysTick->VAL;
if(tnow != told)
{
/* 这里注意一下SYSTICK是一个递减的计数器 */
if(tnow < told)
{
tcnt += told - tnow;
}
/* 重新装载递减 */
else
{
tcnt += reload - tnow + told;
}
told = tnow;
/*时间超过/等于要延迟的时间,则退出 */
if(tcnt >= ticks)break;
}
}
}
是要自己另外写,利用滴答定时器来实现 |
|