有很多人在使用MCU计时时发现误差比较大,把责任都推到MCU速度上来,其实你有没有算过就算是100M的MCU/DSP时钟经过分频再除以CPU状态数得到的机器周期还有多少?通常一个指令又要一到几个机器周期,这样速度当然不够。而且就算是用倍频CPU或者直接说指令执行很快,那么MCU上的计数器也存在中断进入的时间不确定性:可能计时开始门限电平到来时一个指令还没有执行完这样INT是无论无何也无法及时响应的,就算用NOP等待,那也要等几CPU状态走完,而计时开始门限电平在第几个状态到来是无法确定的,这样也是有误差的。要想真正做到实时只有用硬件计数器,我们在这类设计中一般是用CPLD自己做的触发和计数逻辑。MCU的工作只能是触发发射(计时开始),和采集CPLD计数器出来的数据,做相关运算。可能一片会不够(如果做的样本采集点数很多的话),那就用两片好了。