初级会员

- 积分
- 195
- 金钱
- 195
- 注册时间
- 2015-3-5
- 在线时间
- 44 小时
|
1金钱
在实时性要求极高的自动控制系统中,PID的计算十分依赖于时间的准确性,所以我希望能做一个单位为微秒的计时器,来准确计算两次PID运算间隔的时间。目前只能想到定时器,但微秒的频繁中断恐怕是不行,请问各位大神有什么高招呢?
我在某开源项目里找到这样一段代码,但是看不懂~
uint32_t micros(void)
{
register uint32_t ms, cycle_cnt;
do {
ms = sysTickUptime;
cycle_cnt = SysTick->VAL;
/*
* If the SysTick timer expired during the previous instruction, we need to give it a little time for that
* interrupt to be delivered before we can recheck sysTickUptime:
*/
asm volatile("\tnop\n");
} while (ms != sysTickUptime);
return (ms * 1000) + (usTicks * 1000 - cycle_cnt) / usTicks;
}
|
最佳答案
查看完整内容[请看2#楼]
多谢啦,基本上有思路了。
利用systick在每个时钟周期减1的特性,将计数器初值设为x,x减到零时刚好产生1ms的中断,每次进中断让ms值加一,读取时间的时候,读取ms值加上计数器初值减去systick->val就可以啦
|