补偿ARM中断的延迟?
我在STM32F4 CPU上做一个项目,生成信号 我在STM32上有一个通用的CPU时钟定时器(没有预分频器),在溢出时触发中断,以生成GPIO的周期信号 我需要在非常精确的时间触发thr GPIO(基本上降低到一个CPU周期的精度)。我已经设法通过设置优先级将抖动减少到+-5个周期&al,但是这种抖动是存在的,这取决于CPU在做什么 我需要补偿这几个周期的抖动。只要我在一个精确的时间切换GPIOs,增加几个周期的延迟就不是问题 我的想法是读取计数器的当前值,并有一个固定数量-当前值时间的活动循环,确保在精确的时间退出循环 然而,在C中做一个简单的循环——作为一个FOR循环,或者一段时间(counter->value补偿ARM中断的延迟?,arm,counter,interrupt,stm32,low-latency,Arm,Counter,Interrupt,Stm32,Low Latency,我在STM32F4 CPU上做一个项目,生成信号 我在STM32上有一个通用的CPU时钟定时器(没有预分频器),在溢出时触发中断,以生成GPIO的周期信号 我需要在非常精确的时间触发thr GPIO(基本上降低到一个CPU周期的精度)。我已经设法通过设置优先级将抖动减少到+-5个周期&al,但是这种抖动是存在的,这取决于CPU在做什么 我需要补偿这几个周期的抖动。只要我在一个精确的时间切换GPIOs,增加几个周期的延迟就不是问题 我的想法是读取计数器的当前值,并有一个固定数量-当前值时间的活动循
wfi
这些都是可以克服的问题。我不同意评论说你需要放弃C语言而用汇编语言编写;我的系统几乎不包含汇编语言,抖动非常低
我将在中更详细地讨论这些问题和我的解决方案。克里夫是正确的,在具有中断、闪存等待状态和管道的CPU内核上,无法获得单一CPU周期精度。顺便说一句,有点奇怪的视差“推进器”是为数不多的能够保证周期时间一致性的“高性能”MCU内核之一,因为它不支持中断(而是“旋转”访问集线器中的8个内核)。你知道你无法获得单个周期的精度是吗?如果您希望达到这种精度,请让计时器直接向gpio馈电或直接使用计时器输出。不管您使用的是什么处理器,它们都倾向于在开始处理中断之前完成当前指令。完成一条指令所需的时钟周期数因指令而异,即使只有一个异常,您也无法满足周期计时要求。如果您希望获得极高的性能或精度,C或任何编译语言都绝对是您的敌人。您正在使用的处理器可以运行速度高达168mhz或在该范围内的某个地方,并具有数据和指令缓存,如果您的速度远未达到该速度(请注意,如果从缓存运行,闪存不会更快,您仍然会受到它的限制),则提高速度,将您的要求更改为+/-多个周期。对于dwelch-是,多个长度指令将被中断,从而产生抖动。但是,从中断处理程序获取计数器的值可以告诉我应该等待多少时间。在这里,我不应该被打断,所以从理论上讲,实现固定的延迟似乎是可行的
loop : SUBS r0,#1 ; tried with 2 also
BGE loop